diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e1ca408
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,42 @@
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.out
+*.app
+
+# Vim temp files
+*.swp
+
+# patches
+*.patch
+
+# archives
+*.zip
+
+# Python cache
+__pycache__
+*.pyc
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..74890bf
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,667 @@
+// Copyright 2020-2021 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
+
+
+                                 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.
+
+
+  * MIT: https://opensource.org/licenses/MIT
+
+MIT License
+
+Copyright (c) 2020-2021 The Khronos Group Inc.
+
+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.
+
+  * CC-BY-4.0: https://creativecommons.org/licenses/by/4.0/legalcode
+
+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.
+
+     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.
+
+  c. 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.
+
+  d. 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.
+
+
+  * LicenseRef-MPLUS:  https://osdn.net/softwaremap/trove_list.php?form_cat=370
+
+M+ Font License
+
+These fonts are free softwares.
+Unlimited permission is granted to use, copy, and distribute it,
+with or without modification, either commercially and noncommercially.
+THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY. 
diff --git a/METADATA b/METADATA
new file mode 100644
index 0000000..1e27929
--- /dev/null
+++ b/METADATA
@@ -0,0 +1,15 @@
+name: "gfxstream-protocols"
+description:
+    "gfxstream-protocols is a package containing Vulkan specifications and "
+    "Vulkan encoder/decoder generator scripts used for gfxstream "
+    "(https://android.googlesource.com/device/generic/vulkan-cereal/)."
+
+third_party {
+  url {
+    type: GIT
+    value: "https://github.com/KhronosGroup/Vulkan-Docs.git"
+  }
+  version: "v1.2.198"
+  last_upgrade_date { year: 2022 month: 2 day: 3 }
+  license_type: NOTICE 
+}
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..f3f3c2b
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,12 @@
+bohu@google.com
+cstout@google.com
+doughorn@google.com
+gurchetansingh@google.com
+kaiyili@google.com
+lfy@google.com
+liyl@google.com
+natsu@google.com
+reveman@google.com
+rkir@google.com
+yahan@google.com
+
diff --git a/registry/vulkan/BUILD.adoc b/registry/vulkan/BUILD.adoc
new file mode 100644
index 0000000..855b7d3
--- /dev/null
+++ b/registry/vulkan/BUILD.adoc
@@ -0,0 +1,459 @@
+// Copyright 2014-2021 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, then one way to build using the image (assuming
+a Linux docker host) is:
+
+    $ docker run --user `id -u`:`id -g` -it --rm \
+      -v <vulkan-path>:/vulkan \
+      khronosgroup/docker-images:asciidoctor-spec /bin/bash
+
+where <vulkan-path> is the path to the cloned repository. This runs the
+image with the cloned repository under /vulkan and accesses it as a
+specified user (set to your own user and group ID above), so that it doesn't
+get filled with files owned by another user.
+
+Then in the running image,
+
+    $ cd /vulkan
+    $ ./makeSpec -spec core html
+
+which builds an HTML5 specification output for the core Vulkan 1.2
+specification, with no extensions included, or
+
+    $ ./makeSpec -spec all all
+
+which builds 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 go to <vulkan-path> and invoke the same `make`
+commands there.
+
+[NOTE]
+.Note
+====
+  * While it's 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's needed for spec bugfixes not involving extensions.
+  * The default `make` options build a Vulkan 1.2 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.2 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-extensions]]
+=== Building With Extensions Included
+
+Extensions are defined in the same source as the core Specification, but
+are only conditionally included in the output.
+http://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 sepcified sets of extensions.
+    *type* may be
+  ** *core* - no extensions added (default if not specified)
+  ** *khr* - all KHR extensions 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.txt` 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, as we've had
+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's 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 sanity 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://www.khronos.org/registry/vulkan/specs/1.1/styleguide.html[style
+guide] (generated from `styleguide.txt`).
+
+We (may) eventually tool up the spec and reference pages to the point that
+anywhere there's 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/*.txt`
+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
+http://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're writing new spec language or modifying existing language, see the
+link:https://www.khronos.org/registry/vulkan/specs/1.2/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 name of the build image is
+
+    khronosgroup/docker-images:asciidoctor-spec
+
+It can be pulled from the
+link:https://hub.docker.com/repository/docker/khronosgroup/docker-images[Dockerhub
+repository] with the command
+
+    docker pull khronosgroup/docker-images:asciidoctor-spec
+
+Once docker is installed and the image is available, it can be executed as
+described above under <<building, Building the Spec>> to generate
+Specification output documents or other Makefile targets.
+
+[NOTE]
+.Note
+====
+The old `vulkan-docs-base` and `vulkan-docs` images continue to be hosted,
+but the new `asciidoctor-spec` image is preferred - the added functionality
+of `vulkan-docs`, to set the user/group inside Docker based on environment
+variables passed into Docker, is no longer needed with the Docker `--user`
+option.
+====
+
+
+[[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/master/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 we have no intention of forcing people to use our Docker image, we
+cannot support every possible environment.
+The Docker image is a straightforward way to use the Vulkan-Docs repository
+with almost all modern desktop environments.
+====
+
+
+[[history]]
+== Revision History
+
+  * 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/registry/vulkan/CODE_OF_CONDUCT.adoc b/registry/vulkan/CODE_OF_CONDUCT.adoc
new file mode 100644
index 0000000..d8c2546
--- /dev/null
+++ b/registry/vulkan/CODE_OF_CONDUCT.adoc
@@ -0,0 +1,10 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+= Code of Conduct
+
+A reminder that this issue tracker is managed by the Khronos Group.
+Interactions here should follow the
+https://www.khronos.org/developers/code-of-conduct[Khronos Code of Conduct],
+which prohibits aggressive or derogatory language. Please keep the
+discussion friendly and civil.
diff --git a/registry/vulkan/CONTRIBUTING.adoc b/registry/vulkan/CONTRIBUTING.adoc
new file mode 100644
index 0000000..9551984
--- /dev/null
+++ b/registry/vulkan/CONTRIBUTING.adoc
@@ -0,0 +1,38 @@
+// Copyright 2020-2021 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.txt[`vkspec.txt`])
+  * 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.
+
+== Contributor License Agreement
+
+When you propose a pull request on Vulkan-Docs you must execute the 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/registry/vulkan/COPYING.adoc b/registry/vulkan/COPYING.adoc
new file mode 100644
index 0000000..8aafada
--- /dev/null
+++ b/registry/vulkan/COPYING.adoc
@@ -0,0 +1,91 @@
+// Copyright 2020-2021 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`] is 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're compatible with my
+license?
+
+A: We are using a dual license license on `vk.xml`, to make it 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/registry/vulkan/ChangeLog.txt b/registry/vulkan/ChangeLog.txt
new file mode 100644
index 0000000..aecdfa0
--- /dev/null
+++ b/registry/vulkan/ChangeLog.txt
@@ -0,0 +1,9691 @@
+Copyright 2016-2021 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.
+
+-----------------------------------------------------
+
+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`" rather than "`cubemap`" 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 accomodate 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 missiong `optional` attribute to
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR::pname:pVideoFormatPropertyCount
+    in `vk.xml` (public pull request 1514).
+  * Add additional header dependecies 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 interger 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:
+
+  * Specifiy 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 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 staement 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 returing 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:kWaitSemaphores 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), don'
+    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. dditionally, the definition
+    of "`color sample mask`" and discussions of it have been removed in
+    favour 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 is 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).
+  * 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 handle literal block delimiters and lines containing
+    only whitespace properly (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's of enough scope to create a
+    and 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).
+  * Synchronize 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 an
+    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 required core versions and/or extensions 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>> 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 insures 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.
+  * 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).
+
+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:
+
+  * 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>> 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 competed 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::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
+    accomodate, 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 imcompatible change to an EXT
+    that's very recently released; 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's 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::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, accomodating 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 (see public issue 814
+    - does not close this, however).
+  * 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's 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 mutiple
+    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 + KHR extensions and Vulkan 1.0 +
+    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's 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 correspondance/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's 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 colour 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 Extenions:
+
+  * `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
+    re-use 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 +
+    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 strucure, 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's 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's 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 engineE 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's 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 "correponds" 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 acces
+    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 Attachement" 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/registry/vulkan/LICENSE.adoc b/registry/vulkan/LICENSE.adoc
new file mode 100644
index 0000000..cb7c404
--- /dev/null
+++ b/registry/vulkan/LICENSE.adoc
@@ -0,0 +1,34 @@
+// Copyright 2020-2021 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/registry/vulkan/LICENSES/Apache-2.0.txt b/registry/vulkan/LICENSES/Apache-2.0.txt
new file mode 100644
index 0000000..4ed90b9
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/LICENSES/CC-BY-4.0.txt b/registry/vulkan/LICENSES/CC-BY-4.0.txt
new file mode 100644
index 0000000..3f92dfc
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/LICENSES/LicenseRef-KhronosSpecCopyright.txt b/registry/vulkan/LICENSES/LicenseRef-KhronosSpecCopyright.txt
new file mode 100644
index 0000000..a39ec49
--- /dev/null
+++ b/registry/vulkan/LICENSES/LicenseRef-KhronosSpecCopyright.txt
@@ -0,0 +1,83 @@
+Copyright 2014-2021 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.
+
+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, and which
+defines the terms 'Scope', 'Compliant Portion', and 'Necessary Patent Claims'.
+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.
+
+This Specification contains substantially unmodified functionality from, and is a
+successor to, Khronos specifications including OpenGL, OpenGL ES and OpenCL.
+
+Some parts of this Specification are purely informative and so are EXCLUDED from
+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>> 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.
+
+Where this Specification includes <<introduction-normative-references,
+normative references to external documents>>, only the specifically
+identified sections of those external documents are INCLUDED in the Scope of
+this Specification. If not created by Khronos, those external documents may
+contain contributions from non-members of Khronos not covered by the Khronos
+Intellectual Property Rights Policy.
+
+ifndef::ratified_core_spec[]
+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
+https://www.khronos.org/registry/vulkan/specs/1.2/html/vkspec.html (core
+only) and
+https://www.khronos.org/registry/vulkan/specs/1.2-khr-extensions/html/vkspec.html
+(core with KHR extensions).
+endif::ratified_core_spec[]
+
+Vulkan and Khronos are registered trademarks of The Khronos Group Inc.
+ASTC is a trademark of ARM Holdings PLC; OpenCL is a trademark of Apple
+Inc.; and OpenGL and OpenGL ES are registered trademarks of Hewlett Packard
+Enterprise, all used under license by Khronos. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.
diff --git a/registry/vulkan/LICENSES/LicenseRef-MPLUS.txt b/registry/vulkan/LICENSES/LicenseRef-MPLUS.txt
new file mode 100644
index 0000000..9db1dd8
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/LICENSES/MIT.txt b/registry/vulkan/LICENSES/MIT.txt
new file mode 100644
index 0000000..204b93d
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/Makefile b/registry/vulkan/Makefile
new file mode 100644
index 0000000..b6a5eaf
--- /dev/null
+++ b/registry/vulkan/Makefile
@@ -0,0 +1,614 @@
+# Copyright 2014-2021 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_2) *including all previous
+# versions of the API* (e.g. VK_VERSION_1_1 must also include
+# VK_VERSION_1_0). $(VERSIONS) is converted into asciidoc and generator
+# script arguments $(VERSIONATTRIBS) and $(VERSIONOPTIONS)
+#
+# 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 asciidoc and generator script
+# arguments $(EXTATTRIBS) and $(EXTOPTIONS).
+
+# 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:
+
+VERSIONS := VK_VERSION_1_0 VK_VERSION_1_1 VK_VERSION_1_2
+VERSIONATTRIBS := $(foreach version,$(VERSIONS),-a $(version))
+VERSIONOPTIONS := $(foreach version,$(VERSIONS),-feature $(version))
+
+EXTS := $(sort $(EXTENSIONS) $(DIFFEXTENSIONS))
+EXTATTRIBS := $(foreach ext,$(EXTS),-a $(ext))
+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 doesn't 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 - Python sanity checker for script markup and macro use
+
+all: alldocs allchecks
+
+alldocs: allspecs allman proposals
+
+allspecs: html pdf styleguide registry
+
+allman: manhtmlpages
+
+# check_spec_links.py looks for proper use of custom markup macros
+#   --ignore_count 0 can be incremented if there are unfixable errors
+# xml_consistency.py performs various XML consistency checks
+# check_undefined looks for untagged use of 'undefined' in spec sources
+# reflow.py looks for asciidoctor conditionals inside VU statements;
+#   and for duplicated VUID numbers, but only in spec sources.
+allchecks:
+	$(PYTHON) $(SCRIPTS)/check_spec_links.py -Werror --ignore_count 0
+	$(PYTHON) $(SCRIPTS)/xml_consistency.py
+	$(SCRIPTS)/ci/check_undefined
+	$(PYTHON) $(SCRIPTS)/reflow.py -nowrite -noflow -check FAIL -checkVUID FAIL $(SPECFILES)
+
+# Note that the := assignments below are immediate, not deferred, and
+# are therefore order-dependent in the Makefile
+
+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
+GS_EXISTS := $(shell command -v gs 2> /dev/null)
+
+# Path to scripts used in generation
+SCRIPTS  = $(CURDIR)/scripts
+
+# Target directories for output files
+# HTMLDIR - 'html' target
+# PDFDIR - 'pdf' target
+# CHECKDIR - 'allchecks' target
+OUTDIR	  = $(GENERATED)/out
+HTMLDIR   = $(OUTDIR)/html
+VUDIR	  = $(OUTDIR)/validation
+PDFDIR	  = $(OUTDIR)/pdf
+CHECKDIR  = $(OUTDIR)/checks
+PROPOSALDIR = $(OUTDIR)/proposals
+
+# 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
+# ATTRIBOPTS sets the API revision and enables KaTeX generation
+# VERSIONATTRIBS sets attributes for enabled API versions (set above
+#	     based on $(VERSIONS))
+# EXTATTRIBS sets attributes for enabled extensions (set above based on
+#	     $(EXTENSIONS))
+# 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 = 198
+
+ifneq (,$(findstring VK_VERSION_1_2,$(VERSIONS)))
+SPECMINOR = 2
+else
+ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS)))
+SPECMINOR = 1
+else
+SPECMINOR = 0
+endif
+endif
+
+SPECREVISION = 1.$(SPECMINOR).$(PATCHVERSION)
+
+# 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's 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`)
+
+# Base path to SPIR-V extensions on the web.
+SPIRVPATH = https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions
+
+# Some of the attributes used in building all spec documents:
+#   chapters - absolute path to chapter sources
+#   appendices - absolute path to appendix 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)" \
+	       -a revdate="$(SPECDATE)" \
+	       -a revremark="$(SPECREMARK)" \
+	       -a apititle="$(APITITLE)" \
+	       -a stem=latexmath \
+	       -a imageopts="$(IMAGEOPTS)" \
+	       -a config=$(CURDIR)/config \
+	       -a appendices=$(CURDIR)/appendices \
+	       -a chapters=$(CURDIR)/chapters \
+	       -a images=$(IMAGEPATH) \
+	       -a generated=$(GENERATED) \
+	       -a spirv="$(SPIRVPATH)" \
+	       -a refprefix \
+	       $(VERSIONATTRIBS) \
+	       $(EXTATTRIBS) \
+	       $(EXTRAATTRIBS)
+ADOCMISCOPTS = --failure-level ERROR
+# Non target-specific Asciidoctor extensions and options
+# Look in $(GENERATED) for explicitly required non-extension Ruby, such
+# as api.rb
+ADOCEXTS     = -I$(GENERATED) -r $(CURDIR)/config/spec-macros.rb -r $(CURDIR)/config/tilde_open_block.rb
+ADOCOPTS     = -d book $(ADOCMISCOPTS) $(ATTRIBOPTS) $(NOTEOPTS) $(VERBOSE) $(ADOCEXTS)
+
+# HTML target-specific Asciidoctor extensions and options
+ADOCHTMLEXTS = -r $(CURDIR)/config/katex_replace.rb \
+	       -r $(CURDIR)/config/loadable_html.rb \
+	       -r $(CURDIR)/config/vuid-expander.rb \
+	       -r $(CURDIR)/config/rouge-extend-css.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.
+# ADOCHTMLOPTS also relies on the absolute build-time path to the
+# 'stylesdir' containing our custom CSS.
+KATEXSRCDIR  = $(CURDIR)/katex
+KATEXDIR     = katex
+ADOCHTMLOPTS = $(ADOCHTMLEXTS) -a katexpath=$(KATEXDIR) \
+	       -a stylesheet=khronos.css \
+	       -a stylesdir=$(CURDIR)/config \
+	       -a sectanchors
+
+# PDF target-specific Asciidoctor extensions and options
+ADOCPDFEXTS  = -r asciidoctor-pdf \
+	       -r asciidoctor-mathematical \
+	       -r $(CURDIR)/config/asciidoctor-mathematical-ext.rb \
+	       -r $(CURDIR)/config/vuid-expander.rb
+ADOCPDFOPTS  = $(ADOCPDFEXTS) -a mathematical-format=svg \
+	       -a imagesoutdir=$(PDFMATHDIR) \
+	       -a pdf-fontsdir=config/fonts,GEM_FONTS_DIR \
+	       -a pdf-stylesdir=config/themes -a pdf-style=pdf
+
+# Valid usage-specific Asciidoctor extensions and options
+ADOCVUEXTS = -r $(CURDIR)/config/vu-to-json.rb
+ADOCVUOPTS = $(ADOCVUEXTS)
+
+.PHONY: directories
+
+# Images used by the spec. These are included in generated HTML now.
+IMAGEPATH = $(CURDIR)/images
+SVGFILES  = $(wildcard $(IMAGEPATH)/*.svg)
+
+# Top-level spec source file
+SPECSRC := vkspec.txt
+# Static files making up sections of the API spec.
+SPECFILES = $(wildcard chapters/[A-Za-z]*.txt chapters/*/[A-Za-z]*.txt appendices/[A-Za-z]*.txt)
+# 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
+PROPOSALPATH   = $(CURDIR)/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
+RUBYDEPEND     = $(GENERATED)/api.rb
+# All generated dependencies
+GENDEPENDS     = $(APIDEPEND) $(VALIDITYDEPEND) $(HOSTSYNCDEPEND) $(METADEPEND) $(INTERFACEDEPEND) $(SPIRVCAPDEPEND) $(RUBYDEPEND)
+# All non-format-specific dependencies
+COMMONDOCS     = $(SPECFILES) $(GENDEPENDS)
+
+# Script to add href to anchors
+GENANCHORLINKS = $(SCRIPTS)/genanchorlinks.py
+# Script to translate math on build time
+TRANSLATEMATH = $(NODEJS) $(SCRIPTS)/translate_math.js $(KATEXSRCDIR)/katex.min.js
+
+# Install katex in $(OUTDIR)/katex for reference by all HTML targets
+katexinst: KATEXDIR = katex
+katexinst: $(OUTDIR)/$(KATEXDIR)
+
+$(OUTDIR)/$(KATEXDIR): $(KATEXSRCDIR)
+	$(QUIET)$(MKDIR) $(OUTDIR)
+	$(QUIET)$(RMRF)  $(OUTDIR)/$(KATEXDIR)
+# We currently only need the css and fonts, but copy it whole anyway
+	$(QUIET)$(CP) -rf $(KATEXSRCDIR) $(OUTDIR)
+
+# Spec targets
+# There is some complexity to try and avoid short virtual targets like 'html'
+# causing specs to *always* be regenerated.
+
+CHUNKER = $(CURDIR)/scripts/asciidoctor-chunker/asciidoctor-chunker.js
+CHUNKINDEX = $(CURDIR)/config/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/
+	rm -rf $(CHUNKERVERSION).zip $(CHUNKERVERSION)
+
+html: $(HTMLDIR)/vkspec.html $(SPECSRC) $(COMMONDOCS)
+
+$(HTMLDIR)/vkspec.html: KATEXDIR = ../katex
+$(HTMLDIR)/vkspec.html: $(SPECSRC) $(COMMONDOCS) katexinst
+	$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) -o $@ $(SPECSRC)
+	$(QUIET)$(PYTHON) $(GENANCHORLINKS) $@ $@
+	$(QUIET)$(TRANSLATEMATH) $@
+
+diff_html: $(HTMLDIR)/diff.html $(SPECSRC) $(COMMONDOCS)
+
+$(HTMLDIR)/diff.html: KATEXDIR = ../katex
+$(HTMLDIR)/diff.html: $(SPECSRC) $(COMMONDOCS) katexinst
+	$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) \
+	    -a diff_extensions="$(DIFFEXTENSIONS)" \
+	    -r $(CURDIR)/config/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)rm -rf $(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.txt
+STYLEFILES = $(wildcard style/[A-Za-z]*.txt)
+
+styleguide: $(OUTDIR)/styleguide.html
+
+$(OUTDIR)/styleguide.html: KATEXDIR = katex
+$(OUTDIR)/styleguide.html: $(STYLESRC) $(STYLEFILES) $(GENDEPENDS) katexinst
+	$(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.txt
+
+registry: $(OUTDIR)/registry.html
+
+$(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.asciidoc, $(wildcard $(PROPOSALPATH)/*.asciidoc))
+PROPOSALDOCS	  = $(PROPOSALSOURCES:$(PROPOSALPATH)/%.asciidoc=$(PROPOSALDIR)/%.html)
+proposals: $(PROPOSALDOCS) $(PROPOSALSOURCES)
+
+# Proposal documents are built outside of the main specification
+$(PROPOSALDIR)/%.html: $(PROPOSALPATH)/%.asciidoc
+	$(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)
+
+# Clean generated and output files
+
+clean: clean_html clean_pdf clean_man clean_checks 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)
+
+clean_checks:
+	$(QUIET)$(RMRF) $(CHECKDIR)
+
+# Generated directories and files to remove
+CLEAN_GEN_PATHS = \
+    $(APIPATH) \
+    $(HOSTSYNCPATH) \
+    $(VALIDITYPATH) \
+    $(METAPATH) \
+    $(INTERFACEPATH) \
+    $(SPIRVCAPPATH) \
+    $(REFPATH) \
+    $(GENERATED)/include \
+    $(GENERATED)/__pycache__ \
+    $(PDFMATHDIR) \
+    $(GENERATED)/api.py \
+    $(GENERATED)/api.rb \
+    $(GENERATED)/extDependency.*
+
+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.txt, $(wildcard $(REFPATH)/*.txt))
+
+# 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.txt
+$(REFPATH)/apispec.txt: $(SPECFILES) $(GENREF) $(SCRIPTS)/reflib.py $(GENERATED)/api.py
+	$(QUIET)$(MKDIR) $(REFPATH)
+	$(PYTHON) $(GENREF) -genpath $(GENERATED) -basedir $(REFPATH) \
+	    -log $(LOGFILE) -extpath $(CURDIR)/appendices \
+	    $(EXTOPTIONS) $(SPECFILES)
+
+# These targets are HTML5 refpages
+#
+# The recursive $(MAKE) is an apparently unavoidable hack, since the
+# actual list of man page sources isn't known until after
+# $(REFPATH)/apispec.txt is generated. $(GENDEPENDS) is generated before
+# running the recursive make, so it doesn't 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.txt $(GENDEPENDS)
+	$(QUIET) echo "manhtmlpages: building HTML refpages with these options:"
+	$(QUIET) echo $(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) \
+	    $(ADOCREFOPTS) -d manpage -o REFPAGE.html REFPAGE.txt
+	$(MAKE) $(SUBMAKEOPTIONS) -e buildmanpages
+
+# Build the individual refpages, then the symbolic links from aliases
+MANHTMLDIR  = $(OUTDIR)/man/html
+MANHTML     = $(MANSOURCES:$(REFPATH)/%.txt=$(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
+# don't contain math, so do a quick search for latexmath delimiters.
+$(MANHTMLDIR)/%.html: KATEXDIR = ../../katex
+$(MANHTMLDIR)/%.html: $(REFPATH)/%.txt $(GENDEPENDS) katexinst
+	$(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.txt,
+# and are always generated along with that file. Therefore there's no
+# need for a recursive $(MAKE) or a $(MANHTML) dependency, unlike the
+# manhtmlpages target.
+
+manpdf: $(OUTDIR)/apispec.pdf
+
+$(OUTDIR)/apispec.pdf: $(SPECVERSION) $(REFPATH)/apispec.txt $(SVGFILES) $(GENDEPENDS)
+	$(QUIET)$(MKDIR) $(OUTDIR)
+	$(QUIET)$(MKDIR) $(PDFMATHDIR)
+	$(QUIET)$(ASCIIDOC) -b pdf -a html_spec_relative='html/vkspec.html' \
+	    $(ADOCOPTS) $(ADOCPDFOPTS) -o $@ $(REFPATH)/apispec.txt
+	$(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.txt $(SVGFILES) $(GENDEPENDS) katexinst
+	$(QUIET)$(MKDIR) $(OUTDIR)
+	$(QUIET)$(ASCIIDOC) -b html5 -a html_spec_relative='html/vkspec.html' \
+	    $(ADOCOPTS) $(ADOCHTMLOPTS) -o $@ $(REFPATH)/apispec.txt
+	$(QUIET)$(TRANSLATEMATH) $@
+
+# Create links for refpage aliases
+
+MAKEMANALIASES = $(SCRIPTS)/makemanaliases.py
+manaliases: $(GENERATED)/api.py
+	$(PYTHON) $(MAKEMANALIASES) -genpath $(GENERATED) -refdir $(MANHTMLDIR)
+
+# Targets generated from the XML and registry processing scripts
+#   $(GENERATED)/api.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   = xml
+VKXML	   = $(REGISTRY)/vk.xml
+GENVK	   = $(SCRIPTS)/genvk.py
+GENVKOPTS  = $(VERSIONOPTIONS) $(EXTOPTIONS) $(GENVKEXTRA) -registry $(VKXML)
+GENVKEXTRA =
+
+scriptapi: pyapi rubyapi
+
+pyapi $(GENERATED)/api.py: $(VKXML) $(GENVK)
+	$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(GENERATED) api.py
+
+rubyapi $(GENERATED)/api.rb: $(VKXML) $(GENVK)
+	$(PYTHON) $(GENVK) $(GENVKOPTS) -o $(GENERATED) api.rb
+
+apiinc: $(APIDEPEND)
+
+$(APIDEPEND): $(VKXML) $(GENVK) $(GENERATED)/api.py
+	$(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
+
+# Debugging aid - generate all files from registry XML
+# This leaves out $(GENERATED)/extDependency.sh intentionally as it only
+# needs to be updated when the extension dependencies in vk.xml change.
+
+generated: $(GENERATED)/api.py $(GENDEPENDS)
+
+# Extension dependencies derived from vk.xml
+# Both Bash and Python versions are generated
+
+extDependency: $(GENERATED)/extDependency.stamp
+$(GENERATED)/extDependency.sh: $(GENERATED)/extDependency.stamp
+$(GENERATED)/extDependency.py: $(GENERATED)/extDependency.stamp
+
+DEPSCRIPT = $(SCRIPTS)/make_ext_dependency.py
+$(GENERATED)/extDependency.stamp: $(VKXML) $(DEPSCRIPT)
+	$(QUIET)$(PYTHON) $(DEPSCRIPT) \
+	    -registry $(VKXML) \
+	    -outscript $(GENERATED)/extDependency.sh \
+	    -outpy $(GENERATED)/extDependency.py
+	$(QUIET)touch $@
diff --git a/registry/vulkan/README.adoc b/registry/vulkan/README.adoc
new file mode 100644
index 0000000..6826917
--- /dev/null
+++ b/registry/vulkan/README.adoc
@@ -0,0 +1,111 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::env-github[]
+:note-caption: :information_source:
+endif::[]
+
+= Vulkan^(R)^ API Documentation Project
+
+This repository contains sources for the formal documentation of the Vulkan
+API. This includes:
+
+[options="compact"]
+ * The Vulkan API Specification
+ * Specification of Vulkan 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.
+
+
+== 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.2, 1.1, and 1.0), and incorporating any desired set of
+extensions.
+Each published update is tagged in the form `1.2.*release*` where *release*
+is a constantly incrementing release number and `1.2` is the latest
+published version of the API.
+The last public spec update prior to Vulkan 1.2 is tagged `v1.1.130`.
+
+The last state of the default branch in Khronos' internal gitlab server,
+before 1.2 content was merged into it, is tagged `1.1-archive` (this tag is
+not in github).
+
+
+== Directory Structure
+
+The directory structure is as follows:
+
+```
+README.adoc           This file
+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.txt         Change log summary for each public 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)
+registry.txt          Sources for documentation of the vk.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/registry/vulkan/appendices/VK_AMD_buffer_marker.txt b/registry/vulkan/appendices/VK_AMD_buffer_marker.txt
new file mode 100644
index 0000000..bc7c272
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_buffer_marker.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2018-01-26 (Jaakko Konttinen)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_AMD_device_coherent_memory.txt b/registry/vulkan/appendices/VK_AMD_device_coherent_memory.txt
new file mode 100644
index 0000000..d7a9588
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_device_coherent_memory.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-02-04 (Tobias Hector)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_AMD_display_native_hdr.txt b/registry/vulkan/appendices/VK_AMD_display_native_hdr.txt
new file mode 100644
index 0000000..50912fe
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_display_native_hdr.txt
@@ -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.txt[]
+
+=== 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
+    colorspace.
+    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.txt[]
+
+=== Issues
+
+None.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2018-12-18 (Daniel Rakos)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_AMD_draw_indirect_count.txt b/registry/vulkan/appendices/VK_AMD_draw_indirect_count.txt
new file mode 100644
index 0000000..20761d1
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_draw_indirect_count.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 2, 2016-08-23 (Dominik Witczak)
+   - Minor fixes
+ * Revision 1, 2016-07-21 (Matthaeus Chajdas)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_gcn_shader.txt b/registry/vulkan/appendices/VK_AMD_gcn_shader.txt
new file mode 100644
index 0000000..0fde98b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_gcn_shader.txt
@@ -0,0 +1,33 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_gcn_shader.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== Version History
+
+ * Revision 1, 2016-05-30 (Dominik Witczak)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_gpu_shader_half_float.txt b/registry/vulkan/appendices/VK_AMD_gpu_shader_half_float.txt
new file mode 100644
index 0000000..ee8bab7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_gpu_shader_half_float.txt
@@ -0,0 +1,42 @@
+// 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.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== Version History
+
+ * Revision 2, 2019-04-11 (Tobias Hector)
+   - Marked as deprecated
+ * Revision 1, 2016-09-21 (Dominik Witczak)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_gpu_shader_int16.txt b/registry/vulkan/appendices/VK_AMD_gpu_shader_int16.txt
new file mode 100644
index 0000000..19230c3
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_gpu_shader_int16.txt
@@ -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.txt[]
+
+=== 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`]
+*Contributors*::
+  - Daniel Rakos, AMD
+  - Dominik Witczak, AMD
+  - Matthaeus G. Chajdas, AMD
+  - Rex Xu, AMD
+  - Timothy Lottes, AMD
+  - Zhi Cai, AMD
+*External Dependencies*::
+  - {spirv}/AMD/SPV_AMD_gpu_shader_int16.html[`SPV_AMD_gpu_shader_int16`]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 2, 2019-04-11 (Tobias Hector)
+   - Marked as deprecated
+ * Revision 1, 2017-06-18 (Dominik Witczak)
+   - First version
diff --git a/registry/vulkan/appendices/VK_AMD_memory_overallocation_behavior.txt b/registry/vulkan/appendices/VK_AMD_memory_overallocation_behavior.txt
new file mode 100644
index 0000000..412b221
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_memory_overallocation_behavior.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2018-09-19 (Martin Dinkov)
+    - Initial draft.
diff --git a/registry/vulkan/appendices/VK_AMD_mixed_attachment_samples.txt b/registry/vulkan/appendices/VK_AMD_mixed_attachment_samples.txt
new file mode 100644
index 0000000..fe2ab3c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_mixed_attachment_samples.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+ * Revision 1, 2017-07-24 (Daniel Rakos)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_AMD_negative_viewport_height.txt b/registry/vulkan/appendices/VK_AMD_negative_viewport_height.txt
new file mode 100755
index 0000000..419c4f9
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_negative_viewport_height.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2016-09-02 (Matthaeus Chajdas)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_pipeline_compiler_control.txt b/registry/vulkan/appendices/VK_AMD_pipeline_compiler_control.txt
new file mode 100644
index 0000000..8e242db
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_pipeline_compiler_control.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Issues
+
+None.
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2019-07-26 (Tobias Hector)
+    - Initial revision.
diff --git a/registry/vulkan/appendices/VK_AMD_rasterization_order.txt b/registry/vulkan/appendices/VK_AMD_rasterization_order.txt
new file mode 100644
index 0000000..847c7a7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_rasterization_order.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_AMD_shader_ballot.txt b/registry/vulkan/appendices/VK_AMD_shader_ballot.txt
new file mode 100644
index 0000000..008c1fb
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_shader_ballot.txt
@@ -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_shader_ballot.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== Version History
+
+ * Revision 1, 2016-09-19 (Dominik Witczak)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_shader_core_properties.txt b/registry/vulkan/appendices/VK_AMD_shader_core_properties.txt
new file mode 100644
index 0000000..702e24d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_shader_core_properties.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_AMD_shader_core_properties2.txt b/registry/vulkan/appendices/VK_AMD_shader_core_properties2.txt
new file mode 100644
index 0000000..afaef08
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_shader_core_properties2.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Examples
+
+None.
+
+=== Version History
+
+  * Revision 1, 2019-07-26 (Matthaeus G. Chajdas)
+    - Initial draft.
diff --git a/registry/vulkan/appendices/VK_AMD_shader_explicit_vertex_parameter.txt b/registry/vulkan/appendices/VK_AMD_shader_explicit_vertex_parameter.txt
new file mode 100644
index 0000000..e7bf6b1
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_shader_explicit_vertex_parameter.txt
@@ -0,0 +1,34 @@
+// 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.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== Version History
+
+ * Revision 1, 2016-05-10 (Daniel Rakos)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_shader_fragment_mask.txt b/registry/vulkan/appendices/VK_AMD_shader_fragment_mask.txt
new file mode 100644
index 0000000..b8cfcdf
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_shader_fragment_mask.txt
@@ -0,0 +1,87 @@
+// Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_fragment_mask.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt b/registry/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt
new file mode 100644
index 0000000..65f4de6
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_shader_image_load_store_lod.txt
@@ -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.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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.txt[]
+
+=== Version History
+
+  * Revision 1, 2017-08-21 (Dominik Witczak)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_shader_info.txt b/registry/vulkan/appendices/VK_AMD_shader_info.txt
new file mode 100644
index 0000000..8a34077
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_shader_info.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_AMD_shader_trinary_minmax.txt b/registry/vulkan/appendices/VK_AMD_shader_trinary_minmax.txt
new file mode 100644
index 0000000..a364b6f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_shader_trinary_minmax.txt
@@ -0,0 +1,34 @@
+// Copyright (c) 2016-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_AMD_shader_trinary_minmax.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== Version History
+
+ * Revision 1, 2016-05-10 (Daniel Rakos)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_AMD_texture_gather_bias_lod.txt b/registry/vulkan/appendices/VK_AMD_texture_gather_bias_lod.txt
new file mode 100644
index 0000000..c9c449e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_AMD_texture_gather_bias_lod.txt
@@ -0,0 +1,93 @@
+// 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.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt b/registry/vulkan/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt
new file mode 100644
index 0000000..d704cc4
--- /dev/null
+++ b/registry/vulkan/appendices/VK_ANDROID_external_memory_android_hardware_buffer.txt
@@ -0,0 +1,145 @@
+// Copyright (c) 2018-2020 Google LLC
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_ANDROID_external_memory_android_hardware_buffer.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ray Smith, ARM
+  - Chad 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.txt[]
+
+=== 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
+implementaiton 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 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/registry/vulkan/appendices/VK_EXT_4444_formats.txt b/registry/vulkan/appendices/VK_EXT_4444_formats.txt
new file mode 100644
index 0000000..3a7734b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_4444_formats.txt
@@ -0,0 +1,36 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_4444_formats.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Joshua Ashton, Valve
+  - Jason 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-07-04 (Joshua Ashton)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_acquire_drm_display.txt b/registry/vulkan/appendices/VK_EXT_acquire_drm_display.txt
new file mode 100644
index 0000000..77976f5
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_acquire_drm_display.txt
@@ -0,0 +1,32 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_acquire_drm_display.txt[]
+
+=== 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.txt[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2021-05-11 (Simon Zeni)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_acquire_xlib_display.txt b/registry/vulkan/appendices/VK_EXT_acquire_xlib_display.txt
new file mode 100644
index 0000000..feddb5a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_acquire_xlib_display.txt
@@ -0,0 +1,58 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_acquire_xlib_display.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_astc_decode_mode.txt b/registry/vulkan/appendices/VK_EXT_astc_decode_mode.txt
new file mode 100644
index 0000000..3a77206
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_astc_decode_mode.txt
@@ -0,0 +1,101 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_astc_decode_mode.txt[]
+
+=== 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.txt[]
+
+=== 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 =
+    {
+        VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, // sType
+        NULL, // pNext
+        VK_FORMAT_R8G8B8A8_UNORM // decode mode
+    };
+
+    VkImageViewCreateInfo createInfo =
+    {
+        VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, // sType
+        &decodeMode, // pNext
+        // flags, image, viewType set to application-desired values
+        VK_FORMAT_ASTC_8x8_UNORM_BLOCK, // format
+        // 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/registry/vulkan/appendices/VK_EXT_blend_operation_advanced.txt b/registry/vulkan/appendices/VK_EXT_blend_operation_advanced.txt
new file mode 100644
index 0000000..33d88f3
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_blend_operation_advanced.txt
@@ -0,0 +1,110 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_blend_operation_advanced.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_border_color_swizzle.txt b/registry/vulkan/appendices/VK_EXT_border_color_swizzle.txt
new file mode 100644
index 0000000..2aa1ac8
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_border_color_swizzle.txt
@@ -0,0 +1,46 @@
+// Copyright 2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_border_color_swizzle.txt[]
+
+=== 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.txt[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+  * Revision 1, 2021-10-12 (Piers Daniell)
+    - Internal revisions.
diff --git a/registry/vulkan/appendices/VK_EXT_buffer_device_address.txt b/registry/vulkan/appendices/VK_EXT_buffer_device_address.txt
new file mode 100644
index 0000000..4020279
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_buffer_device_address.txt
@@ -0,0 +1,59 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_buffer_device_address.txt[]
+
+=== 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`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Neil Henning, AMD
+  - Tobias Hector, AMD
+  - Jason 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
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_calibrated_timestamps.txt b/registry/vulkan/appendices/VK_EXT_calibrated_timestamps.txt
new file mode 100644
index 0000000..e6288c7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_calibrated_timestamps.txt
@@ -0,0 +1,112 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_calibrated_timestamps.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== Issues
+
+1) Is the device timestamp value returned in the same time domain as the
+timestamp values written by flink:vkCmdWriteTimestamp?
+
+*RESOLVED*: Yes.
+
+2) What time domain is the host timestamp returned in?
+
+*RESOLVED*: A query is provided to determine the calibrateable time domains.
+The expected host time domain used on Windows is that of
+QueryPerformanceCounter, and on Linux that of CLOCK_MONOTONIC.
+
+3) Should we support other time domain combinations than just one host and
+the device time domain?
+
+*RESOLVED*: Supporting that would need the application to query the set of
+supported time domains, while supporting only one host and the device time
+domain would only need a query for the host time domain type.
+The proposed API chooses the general approach for the sake of extensibility.
+
+4) Should we use CLOCK_MONOTONIC_RAW instead of CLOCK_MONOTONIC?
+
+*RESOLVED*: CLOCK_MONOTONIC is usable in a wider set of situations, however,
+it is subject to NTP adjustments so some use cases may prefer
+CLOCK_MONOTONIC_RAW.
+Thus this extension allows both to be exposed.
+
+5) How can the application extrapolate future device timestamp values from
+the calibrated timestamp value?
+
+*RESOLVED*: slink:VkPhysicalDeviceLimits::pname:timestampPeriod makes it
+possible to calculate future device timestamps as follows:
+
+6) In what queue are timestamp values in time domain
+ename:VK_TIME_DOMAIN_DEVICE_EXT captured by
+flink:vkGetCalibratedTimestampsEXT?
+
+*RESOLVED*: An implementation supporting this extension will have all its
+VkQueue share the same time domain.
+
+[source,c]
+---------------------------------------------------
+futureTimestamp = calibratedTimestamp + deltaNanoseconds / timestampPeriod
+---------------------------------------------------
+
+6) Can the host and device timestamp values drift apart over longer periods
+of time?
+
+*RESOLVED*: 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.
+
+7) Should we add a query for reporting the maximum deviation of the
+timestamp values returned by calibrated timestamp queries?
+
+*RESOLVED*: 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
+---------------------------------------------------
+
+8) Can the maximum deviation reported ever be zero?
+
+*RESOLVED*: Unless the tick of each clock corresponding to the set of time
+domains coincides and all clocks can literally be sampled simutaneously,
+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.
+
+=== 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/registry/vulkan/appendices/VK_EXT_color_write_enable.txt b/registry/vulkan/appendices/VK_EXT_color_write_enable.txt
new file mode 100644
index 0000000..4d6ee46
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_color_write_enable.txt
@@ -0,0 +1,39 @@
+// Copyright (c) 2020 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_color_write_enable.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-01-25 (Sharif Elcott)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_conditional_rendering.txt b/registry/vulkan/appendices/VK_EXT_conditional_rendering.txt
new file mode 100644
index 0000000..83c55a7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_conditional_rendering.txt
@@ -0,0 +1,58 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_conditional_rendering.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_conservative_rasterization.txt b/registry/vulkan/appendices/VK_EXT_conservative_rasterization.txt
new file mode 100644
index 0000000..38f7486
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_conservative_rasterization.txt
@@ -0,0 +1,74 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_conservative_rasterization.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_custom_border_color.txt b/registry/vulkan/appendices/VK_EXT_custom_border_color.txt
new file mode 100644
index 0000000..bd9237e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_custom_border_color.txt
@@ -0,0 +1,136 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_custom_border_color.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_debug_marker.txt b/registry/vulkan/appendices/VK_EXT_debug_marker.txt
new file mode 100644
index 0000000..0e5cc9d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_debug_marker.txt
@@ -0,0 +1,178 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_debug_marker.txt[]
+
+=== 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.txt[]
+
+=== 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 =
+    {
+        VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, // sType
+        NULL,                                           // pNext
+        VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,          // objectType
+        (uint64_t)image,                                // object
+        "Brick Diffuse Texture",                        // pObjectName
+    };
+
+    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 =
+    {
+        VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, // sType
+        NULL,                                           // pNext
+        "Brick House",                                  // pMarkerName
+        { 1.0f, 0.0f, 0.0f, 1.0f },                     // color
+    };
+
+    // Start an annotated group of calls under the 'Brick House' name
+    pfnCmdDebugMarkerBeginEXT(commandBuffer, &houseMarker);
+    {
+        // A mutable structure for each part being rendered
+        VkDebugMarkerMarkerInfoEXT housePartMarker =
+        {
+            VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, // sType
+            NULL,                                           // pNext
+            NULL,                                           // pMarkerName
+            { 0.0f, 0.0f, 0.0f, 0.0f },                     // color
+        };
+
+        // 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/registry/vulkan/appendices/VK_EXT_debug_report.txt b/registry/vulkan/appendices/VK_EXT_debug_report.txt
new file mode 100644
index 0000000..8a2e6fd
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_debug_report.txt
@@ -0,0 +1,213 @@
+// Copyright 2015-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_debug_report.txt[]
+
+=== 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.txt[]
+
+=== 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 = {
+            VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,    // sType
+            NULL,                                                       // pNext
+            VK_DEBUG_REPORT_ERROR_BIT_EXT |                             // flags
+            VK_DEBUG_REPORT_WARNING_BIT_EXT,
+            myOutputDebugString,                                        // pfnCallback
+            NULL                                                        // pUserData
+    };
+    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 = {
+            VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,    // sType
+            NULL,                                                       // pNext
+            VK_DEBUG_REPORT_WARNING_BIT_EXT,                            // flags
+            mystdOutLogger,                                             // pfnCallback
+            NULL                                                        // pUserData
+    };
+    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/registry/vulkan/appendices/VK_EXT_debug_utils.txt b/registry/vulkan/appendices/VK_EXT_debug_utils.txt
new file mode 100644
index 0000000..7107167
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_debug_utils.txt
@@ -0,0 +1,338 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_debug_utils.txt[]
+
+=== 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.txt[]
+
+=== 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 = {
+            VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,  // sType
+            NULL,                                                     // pNext
+            0,                                                        // flags
+            VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT |           // messageSeverity
+            VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
+            VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |             // messageType
+            VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
+            myOutputDebugString,                                      // pfnUserCallback
+            NULL                                                      // pUserData
+    };
+    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 = {
+            VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,  // sType
+            NULL,                                                     // pNext
+            0,                                                        // flags
+            VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,          // messageSeverity
+            VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |             // messageType
+            VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
+            mystdOutLogger,                                           // pfnUserCallback
+            NULL                                                      // pUserData
+    };
+    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 =
+    {
+        VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, // sType
+        NULL,                                               // pNext
+        VK_OBJECT_TYPE_IMAGE,                               // objectType
+        (uint64_t)image,                                    // objectHandle
+        "Brick Diffuse Texture",                            // pObjectName
+    };
+
+    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 =
+    {
+        VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
+        NULL,                                    // pNext
+        "Brick House",                           // pLabelName
+        { 1.0f, 0.0f, 0.0f, 1.0f },              // color
+    };
+
+    // Start an annotated group of calls under the 'Brick House' name
+    pfnCmdBeginDebugUtilsLabelEXT(commandBuffer, &houseLabel);
+    {
+        // A mutable structure for each part being rendered
+        VkDebugUtilsLabelEXT housePartLabel =
+        {
+            VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
+            NULL,                                    // pNext
+            NULL,                                    // pLabelName
+            { 0.0f, 0.0f, 0.0f, 0.0f },              // color
+        };
+
+        // 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 =
+    {
+        VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, // sType
+        NULL,                                    // pNext
+        "Main Render Work",                      // pLabelName
+        { 0.0f, 1.0f, 0.0f, 1.0f },              // color
+    };
+
+    // 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/registry/vulkan/appendices/VK_EXT_depth_clip_enable.txt b/registry/vulkan/appendices/VK_EXT_depth_clip_enable.txt
new file mode 100644
index 0000000..c1e9194
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_depth_clip_enable.txt
@@ -0,0 +1,35 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_depth_clip_enable.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2018-12-20 (Piers Daniell)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_depth_range_unrestricted.txt b/registry/vulkan/appendices/VK_EXT_depth_range_unrestricted.txt
new file mode 100644
index 0000000..eb2a929
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_depth_range_unrestricted.txt
@@ -0,0 +1,52 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_depth_range_unrestricted.txt[]
+
+=== 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.txt[]
+
+=== 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*: The supported range of a fixed-point depth buffer is `0.0` to
+`1.0` and depth fragments are clamped to this range.
+
+=== Version History
+
+  * Revision 1, 2017-06-22 (Piers Daniell)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_descriptor_indexing.txt b/registry/vulkan/appendices/VK_EXT_descriptor_indexing.txt
new file mode 100644
index 0000000..207ada3
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_descriptor_indexing.txt
@@ -0,0 +1,79 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_descriptor_indexing.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-02
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+*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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_device_memory_report.txt b/registry/vulkan/appendices/VK_EXT_device_memory_report.txt
new file mode 100644
index 0000000..17cdebc
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_device_memory_report.txt
@@ -0,0 +1,162 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_device_memory_report.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_direct_mode_display.txt b/registry/vulkan/appendices/VK_EXT_direct_mode_display.txt
new file mode 100644
index 0000000..d91bd29
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_direct_mode_display.txt
@@ -0,0 +1,53 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_direct_mode_display.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_directfb_surface.txt b/registry/vulkan/appendices/VK_EXT_directfb_surface.txt
new file mode 100644
index 0000000..45fa147
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_directfb_surface.txt
@@ -0,0 +1,29 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_directfb_surface.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-06-16 (Nicolas Caramelli)
+   - Initial version
diff --git a/registry/vulkan/appendices/VK_EXT_discard_rectangles.txt b/registry/vulkan/appendices/VK_EXT_discard_rectangles.txt
new file mode 100644
index 0000000..3edbda5
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_discard_rectangles.txt
@@ -0,0 +1,46 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_discard_rectangles.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-12-22
+*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[]
+
+include::{generated}/interfaces/VK_EXT_discard_rectangles.txt[]
+
+=== Version History
+
+  * Revision 1, 2016-12-22 (Piers Daniell)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_display_control.txt b/registry/vulkan/appendices/VK_EXT_display_control.txt
new file mode 100644
index 0000000..9b42d10
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_display_control.txt
@@ -0,0 +1,58 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_display_control.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_display_surface_counter.txt b/registry/vulkan/appendices/VK_EXT_display_surface_counter.txt
new file mode 100644
index 0000000..9840b81
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_display_surface_counter.txt
@@ -0,0 +1,32 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_display_surface_counter.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2016-12-13 (James Jones)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_extended_dynamic_state.txt b/registry/vulkan/appendices/VK_EXT_extended_dynamic_state.txt
new file mode 100644
index 0000000..f20d0e8
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_extended_dynamic_state.txt
@@ -0,0 +1,35 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_extended_dynamic_state.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-12-09
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Dan Ginsburg, Valve Corporation
+  - Graeme Leese, Broadcom
+  - Hans-Kristian Arntzen, Valve Corporation
+  - Jan-Harald Fredriksen, Arm Limited
+  - Jason 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2019-12-09 (Piers Daniell)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_extended_dynamic_state2.txt b/registry/vulkan/appendices/VK_EXT_extended_dynamic_state2.txt
new file mode 100755
index 0000000..fbbfbbd
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_extended_dynamic_state2.txt
@@ -0,0 +1,28 @@
+// Copyright (c) 2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_extended_dynamic_state2.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-04-12
+*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.txt[]
+
+=== Version History
+
+ * Revision 1, 2021-04-12 (Vikram Kushwaha)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_external_memory_dma_buf.txt b/registry/vulkan/appendices/VK_EXT_external_memory_dma_buf.txt
new file mode 100644
index 0000000..440d057
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_external_memory_dma_buf.txt
@@ -0,0 +1,59 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_external_memory_dma_buf.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-10
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Chad Versace, Google
+  - James Jones, NVIDIA
+  - Jason 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.txt[]
+
+=== 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://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
+and
+https://www.khronos.org/registry/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://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
+and
+https://www.khronos.org/registry/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 (Chad Versace)
+    - Squashed internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_external_memory_host.txt b/registry/vulkan/appendices/VK_EXT_external_memory_host.txt
new file mode 100644
index 0000000..0c10b38
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_external_memory_host.txt
@@ -0,0 +1,91 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_external_memory_host.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_filter_cubic.txt b/registry/vulkan/appendices/VK_EXT_filter_cubic.txt
new file mode 100644
index 0000000..4fe1e1c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_filter_cubic.txt
@@ -0,0 +1,43 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_filter_cubic.txt[]
+
+=== 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-Herald Fredericksen, 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_fragment_density_map.txt b/registry/vulkan/appendices/VK_EXT_fragment_density_map.txt
new file mode 100644
index 0000000..3501470
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_fragment_density_map.txt
@@ -0,0 +1,54 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_fragment_density_map.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== 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,FragmentDensityEXT>>
+
+=== 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/registry/vulkan/appendices/VK_EXT_fragment_density_map2.txt b/registry/vulkan/appendices/VK_EXT_fragment_density_map2.txt
new file mode 100644
index 0000000..03caa38
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_fragment_density_map2.txt
@@ -0,0 +1,95 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_fragment_density_map2.txt[]
+
+=== 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_map.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-06-16 (Matthew Netsch)
+   - Initial version
+
+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,fragmentDensityMapDynamic>> feature by
+deferring the start of the locked range to flink:vkEndCommandBuffer.
+
+
+[source,c++]
+----------------------------------------
+// Create view for fragment density map
+VkImageViewCreateInfo createInfo =
+{
+   ​VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+   // ...
+   VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT,
+   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[]
diff --git a/registry/vulkan/appendices/VK_EXT_fragment_shader_interlock.txt b/registry/vulkan/appendices/VK_EXT_fragment_shader_interlock.txt
new file mode 100644
index 0000000..b2adc6a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_fragment_shader_interlock.txt
@@ -0,0 +1,60 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_fragment_shader_interlock.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_fragment_shader_interlock.txt[`GL_ARB_fragment_shader_interlock`]
+*Contributors*::
+  - Daniel Koch, NVIDIA
+  - Graeme Leese, Broadcom
+  - Jan-Harald Fredriksen, Arm
+  - Jason 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.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-FragmentShaderSampleInterlockEXT,FragmentShaderInterlockEXT>>
+  * <<spirvenv-capabilities-table-FragmentShaderPixelInterlockEXT,FragmentShaderPixelInterlockEXT>>
+  * <<spirvenv-capabilities-table-FragmentShaderShadingRateInterlockEXT,FragmentShaderShadingRateInterlockEXT>>
+
+=== Version History
+
+  * Revision 1, 2019-05-24 (Piers Daniell)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_full_screen_exclusive.txt b/registry/vulkan/appendices/VK_EXT_full_screen_exclusive.txt
new file mode 100644
index 0000000..d0333f6
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_full_screen_exclusive.txt
@@ -0,0 +1,117 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_full_screen_exclusive.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_global_priority.txt b/registry/vulkan/appendices/VK_EXT_global_priority.txt
new file mode 100644
index 0000000..1a0feba
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_global_priority.txt
@@ -0,0 +1,57 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_global_priority.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_global_priority_query.txt b/registry/vulkan/appendices/VK_EXT_global_priority_query.txt
new file mode 100644
index 0000000..8c0fc2e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_global_priority_query.txt
@@ -0,0 +1,53 @@
+// Copyright (c) 2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_global_priority_query.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_hdr_metadata.txt b/registry/vulkan/appendices/VK_EXT_hdr_metadata.txt
new file mode 100644
index 0000000..60865bf
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_hdr_metadata.txt
@@ -0,0 +1,59 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_hdr_metadata.txt[]
+
+=== 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 that
+contains 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 general 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_headless_surface.txt b/registry/vulkan/appendices/VK_EXT_headless_surface.txt
new file mode 100644
index 0000000..05d57d8
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_headless_surface.txt
@@ -0,0 +1,43 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_headless_surface.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2019-03-21 (Ray Smith)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_host_query_reset.txt b/registry/vulkan/appendices/VK_EXT_host_query_reset.txt
new file mode 100644
index 0000000..5a99a36
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_host_query_reset.txt
@@ -0,0 +1,37 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_host_query_reset.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-03-12 (Bas Nieuwenhuizen)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_image_drm_format_modifier.txt b/registry/vulkan/appendices/VK_EXT_image_drm_format_modifier.txt
new file mode 100644
index 0000000..b33195e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_image_drm_format_modifier.txt
@@ -0,0 +1,411 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_drm_format_modifier.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Antoine Labour, Google
+  - Bas Nieuwenhuizen, Google
+  - Chad Versace, Google
+  - James Jones, NVIDIA
+  - Jason 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
+colorspace.
+
+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 expressable 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 frambuffer'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.txt[]
+
+=== 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://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
+  . [[VK_EXT_image_drm_format_modifier-fn2]]
+    https://www.khronos.org/registry/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://www.khronos.org/registry/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 (Chad 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/registry/vulkan/appendices/VK_EXT_image_robustness.txt b/registry/vulkan/appendices/VK_EXT_image_robustness.txt
new file mode 100644
index 0000000..fbe5b25
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_image_robustness.txt
@@ -0,0 +1,52 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_image_robustness.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-04-27
+*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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_index_type_uint8.txt b/registry/vulkan/appendices/VK_EXT_index_type_uint8.txt
new file mode 100644
index 0000000..2683fea
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_index_type_uint8.txt
@@ -0,0 +1,26 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_index_type_uint8.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2019-05-02 (Piers Daniell)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_inline_uniform_block.txt b/registry/vulkan/appendices/VK_EXT_inline_uniform_block.txt
new file mode 100644
index 0000000..f13c561
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_inline_uniform_block.txt
@@ -0,0 +1,88 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_inline_uniform_block.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-08-01
+*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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_line_rasterization.txt b/registry/vulkan/appendices/VK_EXT_line_rasterization.txt
new file mode 100644
index 0000000..2a18277
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_line_rasterization.txt
@@ -0,0 +1,42 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_line_rasterization.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-09
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Allen Jensen, NVIDIA
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_load_store_op_none.txt b/registry/vulkan/appendices/VK_EXT_load_store_op_none.txt
new file mode 100644
index 0000000..1408940
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_load_store_op_none.txt
@@ -0,0 +1,37 @@
+// Copyright 2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_load_store_op_none.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_memory_budget.txt b/registry/vulkan/appendices/VK_EXT_memory_budget.txt
new file mode 100644
index 0000000..ceea77b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_memory_budget.txt
@@ -0,0 +1,48 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_memory_budget.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-10-08 (Jeff Bolz)
+   - Initial revision
diff --git a/registry/vulkan/appendices/VK_EXT_memory_priority.txt b/registry/vulkan/appendices/VK_EXT_memory_priority.txt
new file mode 100644
index 0000000..b97a621
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_memory_priority.txt
@@ -0,0 +1,32 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_memory_priority.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-10-08 (Jeff Bolz)
+   - Initial revision
+
diff --git a/registry/vulkan/appendices/VK_EXT_metal_surface.txt b/registry/vulkan/appendices/VK_EXT_metal_surface.txt
new file mode 100644
index 0000000..d96a60b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_metal_surface.txt
@@ -0,0 +1,28 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_metal_surface.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-10-01 (Dzmitry Malyshau)
+   - Initial version
diff --git a/registry/vulkan/appendices/VK_EXT_multi_draw.txt b/registry/vulkan/appendices/VK_EXT_multi_draw.txt
new file mode 100644
index 0000000..7c46d84
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_multi_draw.txt
@@ -0,0 +1,43 @@
+// Copyright 2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_multi_draw.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-05-19
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Mike Blumenkrantz, VALVE
+  - Piers Daniell, NVIDIA
+  - Jason 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.txt[]
+
+=== New or Modified Built-In Variables
+
+  * (modified)code:DrawIndex
+
+=== Version History
+
+  * Revision 1, 2021-01-20 (Mike Blumenkrantz)
+    - Initial version
diff --git a/registry/vulkan/appendices/VK_EXT_pageable_device_local_memory.txt b/registry/vulkan/appendices/VK_EXT_pageable_device_local_memory.txt
new file mode 100644
index 0000000..7e062d5
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_pageable_device_local_memory.txt
@@ -0,0 +1,74 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pageable_device_local_memory.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2021-08-24 (Piers Daniell)
+   - Initial revision
diff --git a/registry/vulkan/appendices/VK_EXT_pci_bus_info.txt b/registry/vulkan/appendices/VK_EXT_pci_bus_info.txt
new file mode 100644
index 0000000..adfca7e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_pci_bus_info.txt
@@ -0,0 +1,40 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pci_bus_info.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_physical_device_drm.txt b/registry/vulkan/appendices/VK_EXT_physical_device_drm.txt
new file mode 100644
index 0000000..e97b44d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_physical_device_drm.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== References
+
+  . [[VK_EXT_physical_device_drm-fn1]]
+    https://www.khronos.org/registry/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/registry/vulkan/appendices/VK_EXT_pipeline_creation_cache_control.txt b/registry/vulkan/appendices/VK_EXT_pipeline_creation_cache_control.txt
new file mode 100644
index 0000000..8c3178a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_pipeline_creation_cache_control.txt
@@ -0,0 +1,111 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pipeline_creation_cache_control.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-03-23
+*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.
+The ICD will return the result ename:VK_PIPELINE_COMPILE_REQUIRED_EXT.
+An ICD may still return a valid sname:VkPipeline object by either re-using
+existing pre-compiled objects such as those from a pipeline cache, or
+derivative pipelines.
+
+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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_pipeline_creation_feedback.txt b/registry/vulkan/appendices/VK_EXT_pipeline_creation_feedback.txt
new file mode 100644
index 0000000..6d10d30
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_pipeline_creation_feedback.txt
@@ -0,0 +1,37 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_pipeline_creation_feedback.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-03-12
+*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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-03-12 (Jean-Francois Roy)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_EXT_post_depth_coverage.txt b/registry/vulkan/appendices/VK_EXT_post_depth_coverage.txt
new file mode 100644
index 0000000..dadd69e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_post_depth_coverage.txt
@@ -0,0 +1,54 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_post_depth_coverage.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_post_depth_coverage.txt[`GL_ARB_post_depth_coverage`]
+    and
+    https://www.khronos.org/registry/OpenGL/extensions/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 <<shaders-fragment-earlytest, 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.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-SampleMaskPostDepthCoverage,SampleMaskPostDepthCoverage>>
+
+=== Version History
+
+  * Revision 1, 2017-07-17 (Daniel Koch)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_primitive_topology_list_restart.txt b/registry/vulkan/appendices/VK_EXT_primitive_topology_list_restart.txt
new file mode 100644
index 0000000..a8b4609
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_primitive_topology_list_restart.txt
@@ -0,0 +1,33 @@
+// Copyright (c) 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_primitive_topology_list_restart.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_private_data.txt b/registry/vulkan/appendices/VK_EXT_private_data.txt
new file mode 100644
index 0000000..ead5f38
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_private_data.txt
@@ -0,0 +1,40 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_private_data.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-03-25
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthew Rusch, NVIDIA
+  - Nuno Subtil, NVIDIA
+  - Piers Daniell, NVIDIA
+  - Jeff Bolz, NVIDIA
+
+=== Description
+
+The 'VK_EXT_private_data' 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.txt[]
+
+=== Examples
+
+  * In progress
+
+=== Version History
+
+ * Revision 1, 2020-01-15 (Matthew Rusch)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_provoking_vertex.txt b/registry/vulkan/appendices/VK_EXT_provoking_vertex.txt
new file mode 100644
index 0000000..7d259e0
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_provoking_vertex.txt
@@ -0,0 +1,85 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_provoking_vertex.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_queue_family_foreign.txt b/registry/vulkan/appendices/VK_EXT_queue_family_foreign.txt
new file mode 100644
index 0000000..ce1ad1e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_queue_family_foreign.txt
@@ -0,0 +1,48 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_queue_family_foreign.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-11-01
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Chad Versace, Google
+  - James Jones, NVIDIA
+  - Jason 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2017-11-01 (Chad Versace)
+    - Squashed internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_rgba10x6_formats.txt b/registry/vulkan/appendices/VK_EXT_rgba10x6_formats.txt
new file mode 100644
index 0000000..444f79f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_rgba10x6_formats.txt
@@ -0,0 +1,48 @@
+// Copyright 2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_rgba10x6_formats.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_robustness2.txt b/registry/vulkan/appendices/VK_EXT_robustness2.txt
new file mode 100644
index 0000000..d37760a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_robustness2.txt
@@ -0,0 +1,63 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_robustness2.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_sample_locations.txt b/registry/vulkan/appendices/VK_EXT_sample_locations.txt
new file mode 100644
index 0000000..7b89491
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_sample_locations.txt
@@ -0,0 +1,59 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_sample_locations.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2017-08-02 (Daniel Rakos)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_sampler_filter_minmax.txt b/registry/vulkan/appendices/VK_EXT_sampler_filter_minmax.txt
new file mode 100644
index 0000000..7d1832d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_sampler_filter_minmax.txt
@@ -0,0 +1,50 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_sampler_filter_minmax.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 2, 2017-05-19 (Piers Daniell)
+   - Renamed to EXT
+
+ * Revision 1, 2017-03-25 (Jeff Bolz)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_scalar_block_layout.txt b/registry/vulkan/appendices/VK_EXT_scalar_block_layout.txt
new file mode 100644
index 0000000..c7e9da6
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_scalar_block_layout.txt
@@ -0,0 +1,41 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_scalar_block_layout.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2018-11-14 (Tobias Hector)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_separate_stencil_usage.txt b/registry/vulkan/appendices/VK_EXT_separate_stencil_usage.txt
new file mode 100644
index 0000000..e29c025
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_separate_stencil_usage.txt
@@ -0,0 +1,36 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_separate_stencil_usage.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2018-11-08 (Daniel Rakos)
+    - Internal revisions.
diff --git a/registry/vulkan/appendices/VK_EXT_shader_atomic_float.txt b/registry/vulkan/appendices/VK_EXT_shader_atomic_float.txt
new file mode 100644
index 0000000..acdb7dd
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_shader_atomic_float.txt
@@ -0,0 +1,44 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_atomic_float.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/tree/master/extensions/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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_shader_atomic_float2.txt b/registry/vulkan/appendices/VK_EXT_shader_atomic_float2.txt
new file mode 100755
index 0000000..905db95
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_shader_atomic_float2.txt
@@ -0,0 +1,66 @@
+// Copyright (c) 2018-2020 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_atomic_float2.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_shader_atomic_float2.txt[`GLSL_EXT_shader_atomic_float2`]
+*Contributors*::
+  - Jason 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.txt[]
+
+=== 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 (Jason Ekstrand)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_EXT_shader_demote_to_helper_invocation.txt b/registry/vulkan/appendices/VK_EXT_shader_demote_to_helper_invocation.txt
new file mode 100644
index 0000000..26346bc
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_shader_demote_to_helper_invocation.txt
@@ -0,0 +1,41 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_demote_to_helper_invocation.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-06-01
+*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`]
+*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.txt[]
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-DemoteToHelperInvocationEXT,DemoteToHelperInvocationEXT>>
+
+=== Version History
+
+ * Revision 1, 2019-06-01 (Jeff Bolz)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_image_atomic_int64.txt b/registry/vulkan/appendices/VK_EXT_shader_image_atomic_int64.txt
new file mode 100644
index 0000000..322a0a7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_shader_image_atomic_int64.txt
@@ -0,0 +1,47 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_image_atomic_int64.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Matthaeus Chajdas, AMD
+  - Graham Wihlidal, Epic Games
+  - Tobias Hector, AMD
+  - Jeff Bolz, Nvidia
+  - Jason Ekstrand, Intel
+*Interactions and External Dependencies*::
+  - This extension requires the
+    {spirv}/EXT/SPV_EXT_shader_image_int64.html[`SPV_EXT_shader_image_int64`]
+    SPIR-V extension.
+  - This extension requires the
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_shader_image_int64.txt[`GLSL_EXT_shader_image_int64`]
+    extension for GLSL source languages.
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-07-14 (Tobias Hector)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_stencil_export.txt b/registry/vulkan/appendices/VK_EXT_shader_stencil_export.txt
new file mode 100644
index 0000000..4b45ac4
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_shader_stencil_export.txt
@@ -0,0 +1,36 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_stencil_export.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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.txt[]
+
+=== Version History
+
+ * Revision 1, 2017-07-19 (Dominik Witczak)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_subgroup_ballot.txt b/registry/vulkan/appendices/VK_EXT_shader_subgroup_ballot.txt
new file mode 100644
index 0000000..9d6d55a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_shader_subgroup_ballot.txt
@@ -0,0 +1,101 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_subgroup_ballot.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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, which contains the subgroup mask of the current
+    subgroup invocation,
+  * code:SubgroupGeMaskKHR, which contains the subgroup mask of the
+    invocations greater than or equal to the current invocation,
+  * code:SubgroupGtMaskKHR, which contains the subgroup mask of the
+    invocations greater than the current invocation,
+  * code:SubgroupLeMaskKHR, which contains the subgroup mask of the
+    invocations less than or equal to the current invocation,
+  * code:SubgroupLtMaskKHR, which contains the subgroup mask of the
+    invocations less than the current invocation,
+  * code:SubgroupLocalInvocationId, which contains the index of an
+    invocation within a subgroup, and
+  * code:SubgroupSize, which contains 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,subgroupBroadcastDynamicId>> feature.
+
+include::{generated}/interfaces/VK_EXT_shader_subgroup_ballot.txt[]
+
+=== 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,SubgroupBallotKHR>>
+
+=== Version History
+
+  * Revision 1, 2016-11-28 (Daniel Koch)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_subgroup_vote.txt b/registry/vulkan/appendices/VK_EXT_shader_subgroup_vote.txt
new file mode 100644
index 0000000..f55c480
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_shader_subgroup_vote.txt
@@ -0,0 +1,117 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_subgroup_vote.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-SubgroupVoteKHR,SubgroupVoteKHR>>
+
+=== Version History
+
+  * Revision 1, 2016-11-28 (Daniel Koch)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt b/registry/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt
new file mode 100644
index 0000000..3b2a581
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_shader_viewport_index_layer.txt
@@ -0,0 +1,90 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_shader_viewport_index_layer.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_viewport_layer_array.txt[`GL_ARB_shader_viewport_layer_array`],
+    https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_layer.txt[`GL_AMD_vertex_shader_layer`],
+    https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_viewport_index.txt[`GL_AMD_vertex_shader_viewport_index`],
+    and
+    https://www.khronos.org/registry/OpenGL/extensions/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,shaderOutputViewportIndex>> and
+<<features-shaderOutputLayer,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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_subgroup_size_control.txt b/registry/vulkan/appendices/VK_EXT_subgroup_size_control.txt
new file mode 100644
index 0000000..dab90f2
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_subgroup_size_control.txt
@@ -0,0 +1,82 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_subgroup_size_control.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-03-05
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Jason 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-min-subgroup-size,minimum>> and
+<<limits-max-subgroup-size,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-required-subgroup-size-stages,
+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-max-subgroups-per-workgroup, 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-03-05 (Neil Henning)
+    - Initial draft
+
+  * Revision 2, 2019-07-26 (Jason Ekstrand)
+    - Add the missing slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
+      for querying subgroup size control features.
diff --git a/registry/vulkan/appendices/VK_EXT_swapchain_colorspace.txt b/registry/vulkan/appendices/VK_EXT_swapchain_colorspace.txt
new file mode 100644
index 0000000..95e1a99
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_swapchain_colorspace.txt
@@ -0,0 +1,58 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_swapchain_colorspace.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-04-26
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Courtney Goeltzenleuchter, Google
+
+=== Description
+
+To be done.
+
+include::{generated}/interfaces/VK_EXT_swapchain_colorspace.txt[]
+
+=== 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
+colorspaces.
+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 colorspace?
+
+*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 colorspace transfer function usage.
+    - Refer to normative definitions in the Data Format Specification.
+    - Clarify DCI-P3 and Display P3 usage.
diff --git a/registry/vulkan/appendices/VK_EXT_texel_buffer_alignment.txt b/registry/vulkan/appendices/VK_EXT_texel_buffer_alignment.txt
new file mode 100644
index 0000000..af5ca5a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_texel_buffer_alignment.txt
@@ -0,0 +1,30 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_texel_buffer_alignment.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-06-06
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+*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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-06-06 (Jeff Bolz)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_texture_compression_astc_hdr.txt b/registry/vulkan/appendices/VK_EXT_texture_compression_astc_hdr.txt
new file mode 100644
index 0000000..441006c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_texture_compression_astc_hdr.txt
@@ -0,0 +1,60 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_texture_compression_astc_hdr.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-28
+*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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_tooling_info.txt b/registry/vulkan/appendices/VK_EXT_tooling_info.txt
new file mode 100644
index 0000000..67eb718
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_tooling_info.txt
@@ -0,0 +1,81 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_tooling_info.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-11-05
+*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.txt[]
+
+=== 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.
+- and so tying this information directly to layers would've been awkward at
+  best.
+
+=== Version History
+
+ * Revision 1, 2018-11-05 (Tobias Hector)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_transform_feedback.txt b/registry/vulkan/appendices/VK_EXT_transform_feedback.txt
new file mode 100644
index 0000000..75f0671
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_transform_feedback.txt
@@ -0,0 +1,99 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_transform_feedback.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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
+<<pipeline-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/registry/vulkan/appendices/VK_EXT_validation_cache.txt b/registry/vulkan/appendices/VK_EXT_validation_cache.txt
new file mode 100644
index 0000000..1c21e91
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_validation_cache.txt
@@ -0,0 +1,35 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_validation_cache.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2017-08-29 (Cort Stratton)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_validation_features.txt b/registry/vulkan/appendices/VK_EXT_validation_features.txt
new file mode 100644
index 0000000..aee0777
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_validation_features.txt
@@ -0,0 +1,54 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_validation_features.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_validation_flags.txt b/registry/vulkan/appendices/VK_EXT_validation_flags.txt
new file mode 100644
index 0000000..522c7a7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_validation_flags.txt
@@ -0,0 +1,37 @@
+// Copyright 2016-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_validation_flags.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 2, 2019-08-19 (Mark Lobodzinski)
+   - Marked as deprecated
+ * Revision 1, 2016-08-26 (Courtney Goeltzenleuchter)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_vertex_attribute_divisor.txt b/registry/vulkan/appendices/VK_EXT_vertex_attribute_divisor.txt
new file mode 100644
index 0000000..9058d7d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_vertex_attribute_divisor.txt
@@ -0,0 +1,89 @@
+// Copyright 2017-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_vertex_attribute_divisor.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-08-03
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Vikram Kushwaha, NVIDIA
+  - Jason 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.txt[]
+
+=== 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 =
+    {
+        0,
+        4
+    };
+
+    const VkPipelineVertexInputDivisorStateCreateInfoEXT divisorInfo =
+    {
+        VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT, // sType
+        NULL,                                                             // pNext
+        1,                                                                // vertexBindingDivisorCount
+        &divisorDesc                                                      // pVertexBindingDivisors
+    }
+
+    const VkVertexInputBindingDescription binding =
+    {
+        0,                                                                // binding
+        sizeof(Vertex),                                                   // stride
+        VK_VERTEX_INPUT_RATE_INSTANCE                                     // inputRate
+    };
+
+    const VkPipelineVertexInputStateCreateInfo viInfo =
+    {
+        VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO,              // sType
+        &divisorInfo,                                                     // pNext
+        ...
+    };
+    //...
+----------------------------------------
+
+=== Version History
+
+  * Revision 1, 2017-12-04 (Vikram Kushwaha)
+    - First Version
+  * Revision 2, 2018-07-16 (Jason 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/registry/vulkan/appendices/VK_EXT_vertex_input_dynamic_state.txt b/registry/vulkan/appendices/VK_EXT_vertex_input_dynamic_state.txt
new file mode 100644
index 0000000..9cae1e9
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_vertex_input_dynamic_state.txt
@@ -0,0 +1,40 @@
+// Copyright (c) 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_vertex_input_dynamic_state.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_EXT_video_decode_h264.txt b/registry/vulkan/appendices/VK_EXT_video_decode_h264.txt
new file mode 100644
index 0000000..bb3c9b8
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_video_decode_h264.txt
@@ -0,0 +1,37 @@
+// Copyright (c) 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_video_decode_h264.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Chunbo Chen, Intel
+  - HoHin Lau, AMD
+  - Jake Beju, AMD
+  - Peter Fang, AMD
+  - Ping Liu, Intel
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+
+include::{generated}/interfaces/VK_EXT_video_decode_h264.txt[]
+
+=== 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.
diff --git a/registry/vulkan/appendices/VK_EXT_video_decode_h265.txt b/registry/vulkan/appendices/VK_EXT_video_decode_h265.txt
new file mode 100644
index 0000000..e13b4ae
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_video_decode_h265.txt
@@ -0,0 +1,28 @@
+// Copyright (c) 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_video_decode_h265.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - HoHin Lau, AMD
+  - Jake Beju, AMD
+  - Peter Fang, AMD
+  - Ping Liu, Intel
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+
+include::{generated}/interfaces/VK_EXT_video_decode_h265.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-6-11 (Peter Fang)
+   - Initial draft
+ * Revision 1.6, March 29 2021 (Tony Zlatinski)
+   - Spec and API updates.
diff --git a/registry/vulkan/appendices/VK_EXT_video_encode_h264.txt b/registry/vulkan/appendices/VK_EXT_video_encode_h264.txt
new file mode 100644
index 0000000..98092b4
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_video_encode_h264.txt
@@ -0,0 +1,42 @@
+// Copyright (c) 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_video_encode_h264.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-29
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - Daniel Rakos, AMD
+  - George Hao, AMD
+  - Jake Beju, AMD
+  - Peter Fang, AMD
+  - Ping Liu, Intel
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Yang Liu, AMD
+
+include::{generated}/interfaces/VK_EXT_video_encode_h264.txt[]
+
+=== 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.
diff --git a/registry/vulkan/appendices/VK_EXT_video_encode_h265.txt b/registry/vulkan/appendices/VK_EXT_video_encode_h265.txt
new file mode 100644
index 0000000..f53b10b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_video_encode_h265.txt
@@ -0,0 +1,39 @@
+// Copyright (c) 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_video_encode_h265.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-01-22
+*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
+
+=== Description
+
+This extension allows applications to compress a raw video sequence by using
+the H.265/HEVC video compression standard.
+
+include::{generated}/interfaces/VK_EXT_video_encode_h265.txt[]
+
+=== 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
diff --git a/registry/vulkan/appendices/VK_EXT_ycbcr_2plane_444_formats.txt b/registry/vulkan/appendices/VK_EXT_ycbcr_2plane_444_formats.txt
new file mode 100644
index 0000000..9a79339
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_ycbcr_2plane_444_formats.txt
@@ -0,0 +1,28 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_ycbcr_2plane_444_formats.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-28
+*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.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-03-08 (Piers Daniell)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_EXT_ycbcr_image_arrays.txt b/registry/vulkan/appendices/VK_EXT_ycbcr_image_arrays.txt
new file mode 100644
index 0000000..9ae0abb
--- /dev/null
+++ b/registry/vulkan/appendices/VK_EXT_ycbcr_image_arrays.txt
@@ -0,0 +1,26 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_ycbcr_image_arrays.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2019-01-15 (Piers Daniell)
+   - Initial revision
+
diff --git a/registry/vulkan/appendices/VK_FUCHSIA_buffer_collection.txt b/registry/vulkan/appendices/VK_FUCHSIA_buffer_collection.txt
new file mode 100644
index 0000000..99862ad
--- /dev/null
+++ b/registry/vulkan/appendices/VK_FUCHSIA_buffer_collection.txt
@@ -0,0 +1,62 @@
+// Copyright 2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_FUCHSIA_buffer_collection.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_FUCHSIA_external_memory.txt b/registry/vulkan/appendices/VK_FUCHSIA_external_memory.txt
new file mode 100644
index 0000000..053d944
--- /dev/null
+++ b/registry/vulkan/appendices/VK_FUCHSIA_external_memory.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_FUCHSIA_external_semaphore.txt b/registry/vulkan/appendices/VK_FUCHSIA_external_semaphore.txt
new file mode 100644
index 0000000..d3c8740
--- /dev/null
+++ b/registry/vulkan/appendices/VK_FUCHSIA_external_semaphore.txt
@@ -0,0 +1,43 @@
+// Copyright 2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_FUCHSIA_external_semaphore.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_FUCHSIA_imagepipe_surface.txt b/registry/vulkan/appendices/VK_FUCHSIA_imagepipe_surface.txt
new file mode 100644
index 0000000..9519f2f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_FUCHSIA_imagepipe_surface.txt
@@ -0,0 +1,30 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_FUCHSIA_imagepipe_surface.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-07-27 (Craig Stout)
+   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_GGP_frame_token.txt b/registry/vulkan/appendices/VK_GGP_frame_token.txt
new file mode 100644
index 0000000..e7a7f81
--- /dev/null
+++ b/registry/vulkan/appendices/VK_GGP_frame_token.txt
@@ -0,0 +1,29 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GGP_frame_token.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-11-26 (Jean-Francois Roy)
+   - Initial revision.
diff --git a/registry/vulkan/appendices/VK_GGP_stream_descriptor_surface.txt b/registry/vulkan/appendices/VK_GGP_stream_descriptor_surface.txt
new file mode 100644
index 0000000..9fbeb80
--- /dev/null
+++ b/registry/vulkan/appendices/VK_GGP_stream_descriptor_surface.txt
@@ -0,0 +1,42 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GGP_stream_descriptor_surface.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-11-26 (Jean-Francois Roy)
+   - Initial revision.
diff --git a/registry/vulkan/appendices/VK_GOOGLE_decorate_string.txt b/registry/vulkan/appendices/VK_GOOGLE_decorate_string.txt
new file mode 100644
index 0000000..f6777a6
--- /dev/null
+++ b/registry/vulkan/appendices/VK_GOOGLE_decorate_string.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2018-07-09 (Neil Henning)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_GOOGLE_display_timing.txt b/registry/vulkan/appendices/VK_GOOGLE_display_timing.txt
new file mode 100644
index 0000000..046000b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_GOOGLE_display_timing.txt
@@ -0,0 +1,58 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_GOOGLE_display_timing.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_GOOGLE_hlsl_functionality1.txt b/registry/vulkan/appendices/VK_GOOGLE_hlsl_functionality1.txt
new file mode 100644
index 0000000..c8774b7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_GOOGLE_hlsl_functionality1.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2018-07-09 (Neil Henning)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_GOOGLE_user_type.txt b/registry/vulkan/appendices/VK_GOOGLE_user_type.txt
new file mode 100644
index 0000000..bfb6333
--- /dev/null
+++ b/registry/vulkan/appendices/VK_GOOGLE_user_type.txt
@@ -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.txt[]
+
+=== 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.asciidoc[`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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-09-07 (Kaye Mason)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_HUAWEI_invocation_mask.txt b/registry/vulkan/appendices/VK_HUAWEI_invocation_mask.txt
new file mode 100644
index 0000000..a822892
--- /dev/null
+++ b/registry/vulkan/appendices/VK_HUAWEI_invocation_mask.txt
@@ -0,0 +1,71 @@
+// Copyright (c) 2021 Huawei Technologies Co. Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_HUAWEI_invocation_mask.txt[]
+
+=== 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, 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_HUAWEI_subpass_shading.txt b/registry/vulkan/appendices/VK_HUAWEI_subpass_shading.txt
new file mode 100644
index 0000000..26d3047
--- /dev/null
+++ b/registry/vulkan/appendices/VK_HUAWEI_subpass_shading.txt
@@ -0,0 +1,260 @@
+// Copyright (c) 2020-2024 Huawei Technologies Co. Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_HUAWEI_subpass_shading.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-01
+*Interactions and External Dependencies*::
+  - This extension requires
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/huawei/GLSL_HUAWEI_subpass_shading.txt[`GL_HUAWEI_subpass_shading`].
+  - This extension requires
+    {spirv}/HUAWEI/SPV_HUAWEI_subpass_shading.html[`SPV_HUAWEI_subpass_shading`].
+*Contributors*::
+  - Hueilong Wang
+
+=== 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::code: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::code: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.txt[]
+
+
+=== 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_SHADING_BIT_HUAWEI, VK_ACCESS_INPUT_ATTACHMENT_READ_BIT
+};
+
+VkMemoryBarrier2KHR subpassShadingToFragment = {
+  VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, NULL,
+  VK_PIPELINE_STAGE_2_SUBPASS_SHADING_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 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/registry/vulkan/appendices/VK_IMG_filter_cubic.txt b/registry/vulkan/appendices/VK_IMG_filter_cubic.txt
new file mode 100644
index 0000000..f1747c3
--- /dev/null
+++ b/registry/vulkan/appendices/VK_IMG_filter_cubic.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Example
+
+Creating a sampler with the new filter for both magnification and
+minification
+
+[source,c++]
+----------------------------------------
+    VkSamplerCreateInfo createInfo =
+    {
+        VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO // sType
+        // 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/registry/vulkan/appendices/VK_IMG_format_pvrtc.txt b/registry/vulkan/appendices/VK_IMG_format_pvrtc.txt
new file mode 100644
index 0000000..a6e504e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_IMG_format_pvrtc.txt
@@ -0,0 +1,28 @@
+// Copyright (c) 2019-2020 Imagination Technologies Limited
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_IMG_format_pvrtc.txt[]
+
+=== 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).
+
+include::{generated}/interfaces/VK_IMG_format_pvrtc.txt[]
+
+=== Version History
+
+ * Revision 1, 2019-09-02 (Stuart Smith)
+   - Initial version
+
diff --git a/registry/vulkan/appendices/VK_INTEL_performance_query.txt b/registry/vulkan/appendices/VK_INTEL_performance_query.txt
new file mode 100644
index 0000000..723710f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_INTEL_performance_query.txt
@@ -0,0 +1,176 @@
+// Copyright (c) 2018-2020 Intel Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_INTEL_performance_query.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_INTEL_shader_integer_functions2.txt b/registry/vulkan/appendices/VK_INTEL_shader_integer_functions2.txt
new file mode 100644
index 0000000..1a5f53e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_INTEL_shader_integer_functions2.txt
@@ -0,0 +1,38 @@
+// Copyright (c) 2019-2020 Intel Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_INTEL_shader_integer_functions2.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-04-30
+*IP Status*::
+    No known IP claims.
+*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_functions`]
+SPIR-V extension and can be used with the GL_INTEL_shader_integer_functions2
+GLSL extension.
+
+include::{generated}/interfaces/VK_INTEL_shader_integer_functions2.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-IntegerFunctions2INTEL,IntegerFunctions2INTEL>>
+
+=== Version History
+
+ * Revision 1, 2019-04-30 (Ian Romanick)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_16bit_storage.txt b/registry/vulkan/appendices/VK_KHR_16bit_storage.txt
new file mode 100644
index 0000000..bce8665
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_16bit_storage.txt
@@ -0,0 +1,66 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_16bit_storage.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_8bit_storage.txt b/registry/vulkan/appendices/VK_KHR_8bit_storage.txt
new file mode 100644
index 0000000..44f84d3
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_8bit_storage.txt
@@ -0,0 +1,58 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_8bit_storage.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_acceleration_structure.txt b/registry/vulkan/appendices/VK_KHR_acceleration_structure.txt
new file mode 100644
index 0000000..a911305
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_acceleration_structure.txt
@@ -0,0 +1,545 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_acceleration_structure.txt[]
+
+=== 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.txt[]
+
+
+=== 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 comparision of differences and similarities
+between VK_NV_ray_tracing and VK_KHR_acceleration_structure?
+--
+*DISCUSSION*:
+
+The following is a more detailed comparision 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,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/registry/vulkan/appendices/VK_KHR_android_surface.txt b/registry/vulkan/appendices/VK_KHR_android_surface.txt
new file mode 100644
index 0000000..e99cd78
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_android_surface.txt
@@ -0,0 +1,74 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_android_surface.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2016-01-14
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_bind_memory2.txt b/registry/vulkan/appendices/VK_KHR_bind_memory2.txt
new file mode 100644
index 0000000..ab37b8a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_bind_memory2.txt
@@ -0,0 +1,41 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_bind_memory2.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2017-05-19 (Tobias Hector)
+   - Pulled bind memory functions into their own extension
diff --git a/registry/vulkan/appendices/VK_KHR_buffer_device_address.txt b/registry/vulkan/appendices/VK_KHR_buffer_device_address.txt
new file mode 100644
index 0000000..6698fd1
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_buffer_device_address.txt
@@ -0,0 +1,125 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_buffer_device_address.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
+    and
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference2.txt[`GL_EXT_buffer_reference2`]
+    and
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference_uvec2.txt[`GL_EXT_buffer_reference_uvec2`]
+*Contributors*::
+  - Jeff Bolz, NVIDIA
+  - Neil Henning, AMD
+  - Tobias Hector, AMD
+  - Jason 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
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.
+
+There are various use cases this extension is designed for.
+It is required for ray tracing, useful for DX12 portability, and by allowing
+buffer addresses to be stored in memory it enables more complex data
+structures to be created.
+
+This extension can also be used to hardcode a dedicated debug channel into
+all shaders by querying a pointer at startup and pushing that into shaders
+as a run-time constant (e.g. specialization constant) that avoids impacting
+other descriptor limits.
+
+There are examples of usage in the
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/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
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference2.txt[`GL_EXT_buffer_reference2`]
+and
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference_uvec2.txt[`GL_EXT_buffer_reference_uvec2`]
+extensions were also added to help cover a few additional edge cases.
+
+=== 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 capability is optional.
+The original type, enum and command names are still available as aliases of
+the core functionality.
+
+include::{generated}/interfaces/VK_KHR_buffer_device_address.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-PhysicalStorageBufferAddresses,code:PhysicalStorageBufferAddresses>>
+
+=== Version History
+
+ * Revision 1, 2019-06-24 (Jan-Harald Fredriksen)
+   - Internal revisions based on VK_EXT_buffer_device_address
+
+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
+strcutures).
+
+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
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/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
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference2.txt[`GL_EXT_buffer_reference2`]
+and
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/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`.
+
+It is important to also be aware that the capture/replay mechanisms are
+meant for capture/replay tools, and should not be used general application
+usage.
+
+endif::isrefpage[]
diff --git a/registry/vulkan/appendices/VK_KHR_copy_commands2.txt b/registry/vulkan/appendices/VK_KHR_copy_commands2.txt
new file mode 100644
index 0000000..55fe09e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_copy_commands2.txt
@@ -0,0 +1,42 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_copy_commands2.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-07-06
+*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 that describe each region to be copied are also
+extended with ptext:sType/ptext:pNext members.
+
+include::{generated}/interfaces/VK_KHR_copy_commands2.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-07-06 (Jeff Leger)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_create_renderpass2.txt b/registry/vulkan/appendices/VK_KHR_create_renderpass2.txt
new file mode 100644
index 0000000..3328aa2
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_create_renderpass2.txt
@@ -0,0 +1,58 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_create_renderpass2.txt[]
+
+=== 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 description in
+    slink:VkAttachmentDescription2KHR::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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-02-07 (Tobias Hector)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_dedicated_allocation.txt b/registry/vulkan/appendices/VK_KHR_dedicated_allocation.txt
new file mode 100644
index 0000000..2d04e17
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_dedicated_allocation.txt
@@ -0,0 +1,148 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_dedicated_allocation.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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 =
+    {
+        VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR,
+        NULL,                               // pNext
+    };
+
+    VkMemoryRequirements2 memoryRequirements =
+    {
+        VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
+        &dedicatedRequirements,             // pNext
+    };
+
+    const VkImageMemoryRequirementsInfo2 imageRequirementsInfo =
+    {
+        VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
+        NULL,                               // pNext
+        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 =
+        {
+            VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,   // sType
+            NULL,                                                   // pNext
+            image,                                                  // image
+            VK_NULL_HANDLE,                                         // buffer
+        };
+
+        VkMemoryAllocateInfo memoryAllocateInfo =
+        {
+            VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,                 // sType
+            &dedicatedInfo,                                         // pNext
+            memoryRequirements.size,                                // allocationSize
+            FindMemoryTypeIndex(memoryRequirements.memoryTypeBits), // memoryTypeIndex
+        };
+
+        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 (Jason Ekstrand)
+   - Rework the extension to be query-based
+
+ * Revision 3, 2017-07-31 (Jason Ekstrand)
+   - Clarify that memory objects allocated with
+     VkMemoryDedicatedAllocateInfoKHR can only have the specified resource
+     bound and no others.
diff --git a/registry/vulkan/appendices/VK_KHR_deferred_host_operations.txt b/registry/vulkan/appendices/VK_KHR_deferred_host_operations.txt
new file mode 100644
index 0000000..dc2220f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_deferred_host_operations.txt
@@ -0,0 +1,192 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_deferred_host_operations.txt[]
+
+=== 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.txt[]
+
+=== Code Examples
+
+The following examples will illustrate the concept of deferrable operations
+using a hypothetical example.
+The command ftext:vkDoSomethingExpensiveEXT denotes a deferrable command.
+The structure stext:VkExpensiveOperationArgsEXT represents the arguments
+which it would normally accept.
+
+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/registry/vulkan/appendices/VK_KHR_depth_stencil_resolve.txt b/registry/vulkan/appendices/VK_KHR_depth_stencil_resolve.txt
new file mode 100644
index 0000000..93cd81a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_depth_stencil_resolve.txt
@@ -0,0 +1,72 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_depth_stencil_resolve.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-04-09 (Jan-Harald Fredriksen)
+   - Initial revision
+
+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[]
diff --git a/registry/vulkan/appendices/VK_KHR_descriptor_update_template.txt b/registry/vulkan/appendices/VK_KHR_descriptor_update_template.txt
new file mode 100644
index 0000000..be62b3b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_descriptor_update_template.txt
@@ -0,0 +1,50 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_descriptor_update_template.txt[]
+
+=== 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 initializaton 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2016-01-11 (Markus Tavenrath)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_device_group.txt b/registry/vulkan/appendices/VK_KHR_device_group.txt
new file mode 100644
index 0000000..6ed300f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_device_group.txt
@@ -0,0 +1,87 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_device_group.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-10-10
+*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 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_device_group_creation.txt b/registry/vulkan/appendices/VK_KHR_device_group_creation.txt
new file mode 100644
index 0000000..d52c036
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_device_group_creation.txt
@@ -0,0 +1,73 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_device_group_creation.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_display.txt b/registry/vulkan/appendices/VK_KHR_display.txt
new file mode 100644
index 0000000..4d3882f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_display.txt
@@ -0,0 +1,352 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_display.txt[]
+
+=== 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.txt[]
+
+=== 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.
+
+=== 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).
+====
+
+=== 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.
+   - Re-used 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/registry/vulkan/appendices/VK_KHR_display_swapchain.txt b/registry/vulkan/appendices/VK_KHR_display_swapchain.txt
new file mode 100644
index 0000000..9874016
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_display_swapchain.txt
@@ -0,0 +1,127 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_display_swapchain.txt[]
+
+=== 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.txt[]
+
+=== 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.
+
+=== 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).
+====
+
+=== 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 swap chains 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/registry/vulkan/appendices/VK_KHR_draw_indirect_count.txt b/registry/vulkan/appendices/VK_KHR_draw_indirect_count.txt
new file mode 100644
index 0000000..e5426cc
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_draw_indirect_count.txt
@@ -0,0 +1,50 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_draw_indirect_count.txt[]
+
+=== 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 draw 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2017-08-25 (Piers Daniell)
+   - Initial draft based off VK_AMD_draw_indirect_count
diff --git a/registry/vulkan/appendices/VK_KHR_driver_properties.txt b/registry/vulkan/appendices/VK_KHR_driver_properties.txt
new file mode 100644
index 0000000..36fea9f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_driver_properties.txt
@@ -0,0 +1,43 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_driver_properties.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-04-11 (Daniel Rakos)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_dynamic_rendering.txt b/registry/vulkan/appendices/VK_KHR_dynamic_rendering.txt
new file mode 100644
index 0000000..77ebe3e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_dynamic_rendering.txt
@@ -0,0 +1,43 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_dynamic_rendering.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-10-06
+*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
+<<VK_QCOM_render_pass_store_ops,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.txt[]
+
+=== Version History
+
+  * Revision 1, 2021-10-06 (Tobias Hector)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_fence.txt b/registry/vulkan/appendices/VK_KHR_external_fence.txt
new file mode 100644
index 0000000..68e639e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_fence.txt
@@ -0,0 +1,48 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_fence.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_fence_capabilities.txt b/registry/vulkan/appendices/VK_KHR_external_fence_capabilities.txt
new file mode 100644
index 0000000..fe8480b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_fence_capabilities.txt
@@ -0,0 +1,43 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_fence_capabilities.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2017-05-08 (Jesse Hall)
+   - Initial version
diff --git a/registry/vulkan/appendices/VK_KHR_external_fence_fd.txt b/registry/vulkan/appendices/VK_KHR_external_fence_fd.txt
new file mode 100644
index 0000000..a043733
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_fence_fd.txt
@@ -0,0 +1,38 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_fence_fd.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_fence_win32.txt b/registry/vulkan/appendices/VK_KHR_external_fence_win32.txt
new file mode 100644
index 0000000..5c88d74
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_fence_win32.txt
@@ -0,0 +1,51 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_fence_win32.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_memory.txt b/registry/vulkan/appendices/VK_KHR_external_memory.txt
new file mode 100644
index 0000000..3020529
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_memory.txt
@@ -0,0 +1,248 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_memory.txt[]
+
+=== 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*::
+  - Jason Ekstrand, Intel
+  - Ian Elliot, 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
+  - Chad 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_memory_capabilities.txt b/registry/vulkan/appendices/VK_KHR_external_memory_capabilities.txt
new file mode 100644
index 0000000..22c4931
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_memory_capabilities.txt
@@ -0,0 +1,107 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_memory_capabilities.txt[]
+
+=== 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 Elliot, 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_memory_fd.txt b/registry/vulkan/appendices/VK_KHR_external_memory_fd.txt
new file mode 100644
index 0000000..46122ac
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_memory_fd.txt
@@ -0,0 +1,59 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_memory_fd.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_memory_win32.txt b/registry/vulkan/appendices/VK_KHR_external_memory_win32.txt
new file mode 100644
index 0000000..aadb741
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_memory_win32.txt
@@ -0,0 +1,72 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_memory_win32.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_semaphore.txt b/registry/vulkan/appendices/VK_KHR_external_semaphore.txt
new file mode 100644
index 0000000..8df6c1d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_semaphore.txt
@@ -0,0 +1,68 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_semaphore.txt[]
+
+=== 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*::
+  - Jason Ekstrand, Intel
+  - Jesse Hall, Google
+  - Tobias Hector, Imagination Technologies
+  - James Jones, NVIDIA
+  - Jeff Juliano, NVIDIA
+  - Matthew Netsch, Qualcomm Technologies, Inc.
+  - Ray Smith, ARM
+  - Chad 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_semaphore_capabilities.txt b/registry/vulkan/appendices/VK_KHR_external_semaphore_capabilities.txt
new file mode 100644
index 0000000..94f9fc3
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_semaphore_capabilities.txt
@@ -0,0 +1,41 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_capabilities.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2016-10-20 (James Jones)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_external_semaphore_fd.txt b/registry/vulkan/appendices/VK_KHR_external_semaphore_fd.txt
new file mode 100644
index 0000000..34d89c2
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_semaphore_fd.txt
@@ -0,0 +1,44 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_fd.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_external_semaphore_win32.txt b/registry/vulkan/appendices/VK_KHR_external_semaphore_win32.txt
new file mode 100644
index 0000000..780c3f0
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_external_semaphore_win32.txt
@@ -0,0 +1,72 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_external_semaphore_win32.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_format_feature_flags2.txt b/registry/vulkan/appendices/VK_KHR_format_feature_flags2.txt
new file mode 100644
index 0000000..2e39b6b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_format_feature_flags2.txt
@@ -0,0 +1,56 @@
+// Copyright (c) 2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_format_feature_flags2.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-07-01
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Lionel Landwerlin, Intel
+  - Jason 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.
+
+include::{generated}/interfaces/VK_KHR_format_feature_flags2.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-07-21 (Lionel Landwerlin)
+   - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_fragment_shading_rate.txt b/registry/vulkan/appendices/VK_KHR_fragment_shading_rate.txt
new file mode 100644
index 0000000..2b23e3f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_fragment_shading_rate.txt
@@ -0,0 +1,65 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_fragment_shading_rate.txt[]
+
+=== 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`].
+*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
+  - 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_get_display_properties2.txt b/registry/vulkan/appendices/VK_KHR_get_display_properties2.txt
new file mode 100644
index 0000000..afe6365
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_get_display_properties2.txt
@@ -0,0 +1,63 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_get_display_properties2.txt[]
+
+=== 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 entry points to query device display properties
+and capabilities in a way that can be easily extended by other extensions,
+without introducing any further entry points.
+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.txt[]
+
+=== 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 wouldn't make sense.
+  * flink:vkGetDisplayModeProperties2KHR: No.
+    The only current inputs are a slink:VkPhysicalDevice and a
+    slink:VkDisplayModeKHR.
+    Other inputs wouldn't 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/registry/vulkan/appendices/VK_KHR_get_memory_requirements2.txt b/registry/vulkan/appendices/VK_KHR_get_memory_requirements2.txt
new file mode 100644
index 0000000..d3f9494
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_get_memory_requirements2.txt
@@ -0,0 +1,46 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_get_memory_requirements2.txt[]
+
+=== 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*::
+  - Jason Ekstrand, Intel
+  - Jeff Bolz, NVIDIA
+  - Jesse Hall, Google
+
+=== Description
+
+This extension provides new entry points to query memory requirements of
+images and buffers in a way 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2017-03-23 (Jason Ekstrand)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_get_physical_device_properties2.txt b/registry/vulkan/appendices/VK_KHR_get_physical_device_properties2.txt
new file mode 100644
index 0000000..d8a75fc
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_get_physical_device_properties2.txt
@@ -0,0 +1,106 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_get_physical_device_properties2.txt[]
+
+=== 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 entry points to query device features, device
+properties, and format properties in a way that can be easily extended by
+other extensions, without introducing any further entry points.
+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.txt[]
+
+=== Examples
+
+[source,c++]
+----------------------------------------
+
+    // Get features with a hypothetical future extension.
+    VkHypotheticalExtensionFeaturesKHR hypotheticalFeatures =
+    {
+        VK_STRUCTURE_TYPE_HYPOTHETICAL_FEATURES_KHR,                // sType
+        NULL,                                                       // pNext
+    };
+
+    VkPhysicalDeviceFeatures2KHR features =
+    {
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,           // sType
+        &hypotheticalFeatures,                                      // pNext
+    };
+
+    // 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 =
+    {
+        VK_STRUCTURE_TYPE_HYPOTHETICAL_FEATURES_KHR,                // sType
+        NULL,                                                       // pNext
+    };
+
+    VkPhysicalDeviceFeatures2KHR enabledFeatures =
+    {
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,           // sType
+        &enabledHypotheticalFeatures,                               // pNext
+    };
+
+    enabledFeatures.features.xyz = VK_TRUE;
+    enabledHypotheticalFeatures.abc = VK_TRUE;
+
+    VkDeviceCreateInfo deviceCreateInfo =
+    {
+        VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,                       // sType
+        &enabledFeatures,                                           // pNext
+        ...
+        NULL,                                                       // pEnabledFeatures
+    };
+
+    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/registry/vulkan/appendices/VK_KHR_get_surface_capabilities2.txt b/registry/vulkan/appendices/VK_KHR_get_surface_capabilities2.txt
new file mode 100644
index 0000000..0b04af4
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_get_surface_capabilities2.txt
@@ -0,0 +1,66 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_get_surface_capabilities2.txt[]
+
+=== 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 entry points to query device surface
+capabilities in a way that can be easily extended by other extensions,
+without introducing any further entry points.
+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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_image_format_list.txt b/registry/vulkan/appendices/VK_KHR_image_format_list.txt
new file mode 100644
index 0000000..df1ce39
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_image_format_list.txt
@@ -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.txt[]
+
+=== 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*::
+  - Jason 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2017-03-20 (Jason Ekstrand)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_imageless_framebuffer.txt b/registry/vulkan/appendices/VK_KHR_imageless_framebuffer.txt
new file mode 100644
index 0000000..2a4a6ee
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_imageless_framebuffer.txt
@@ -0,0 +1,41 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_imageless_framebuffer.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-12-14 (Tobias Hector)
+   - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_incremental_present.txt b/registry/vulkan/appendices/VK_KHR_incremental_present.txt
new file mode 100644
index 0000000..7766cbd
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_incremental_present.txt
@@ -0,0 +1,97 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_incremental_present.txt[]
+
+=== 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.txt[]
+
+=== 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 tranformed.
+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/registry/vulkan/appendices/VK_KHR_maintenance1.txt b/registry/vulkan/appendices/VK_KHR_maintenance1.txt
new file mode 100644
index 0000000..3656b01
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_maintenance1.txt
@@ -0,0 +1,89 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance1.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_maintenance2.txt b/registry/vulkan/appendices/VK_KHR_maintenance2.txt
new file mode 100644
index 0000000..e07767e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_maintenance2.txt
@@ -0,0 +1,112 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance2.txt[]
+
+=== 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 combined 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_maintenance3.txt b/registry/vulkan/appendices/VK_KHR_maintenance3.txt
new file mode 100644
index 0000000..71f6fea
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_maintenance3.txt
@@ -0,0 +1,42 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance3.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2017-08-22
diff --git a/registry/vulkan/appendices/VK_KHR_maintenance4.txt b/registry/vulkan/appendices/VK_KHR_maintenance4.txt
new file mode 100644
index 0000000..04d4944
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_maintenance4.txt
@@ -0,0 +1,62 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_maintenance4.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-08-18
+*Interactions and External Dependencies*::
+  - Requires SPIR-V 1.2 for code:LocalSizeId
+*Contributors*::
+  - Lionel Duc, NVIDIA
+  - Jason Ekstrand, Intel
+  - Spencer Fricke, Samsung
+  - Tobias Hector, AMD
+  - Lionel Landwerlin, Intel
+  - Graeme Leese, Broadcom
+  - Tom Olson, Arm
+  - Stu Smith, AMD
+
+=== 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.
+  
+include::{generated}/interfaces/VK_KHR_maintenance4.txt[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+ * Revision 1, 2021-08-18 (Piers Daniell)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_multiview.txt b/registry/vulkan/appendices/VK_KHR_multiview.txt
new file mode 100644
index 0000000..6775cf0
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_multiview.txt
@@ -0,0 +1,77 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_multiview.txt[]
+
+=== 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
+    https://raw.githubusercontent.com/KhronosGroup/GLSL/master/extensions/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
+https://raw.githubusercontent.com/KhronosGroup/GLSL/master/extensions/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.txt[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-viewindex,code:ViewIndex>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-MultiView,code:MultiView>>
+
+=== Version History
+
+ * Revision 1, 2016-10-28 (Jeff Bolz)
+   - Internal revisions
+
+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[]
diff --git a/registry/vulkan/appendices/VK_KHR_performance_query.txt b/registry/vulkan/appendices/VK_KHR_performance_query.txt
new file mode 100644
index 0000000..f632dd8
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_performance_query.txt
@@ -0,0 +1,328 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_performance_query.txt[]
+
+=== 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.txt[]
+
+=== 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 = {
+  VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR,
+  NULL,
+
+  // Specify the queue family that this performance query is performed on
+  queueFamilyIndex,
+
+  // The number of counters to enable
+  enabledCounterCount,
+
+  // The array of indices of counters to enable
+  enabledCounters
+};
+
+
+// Get the number of passes our counters will require.
+uint32_t numPasses;
+
+vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
+  physicalDevice,
+  &performanceQueryCreateInfo,
+  &numPasses);
+
+VkQueryPoolCreateInfo queryPoolCreateInfo = {
+  VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO,
+  &performanceQueryCreateInfo,
+  0,
+
+  // Using our new query type here
+  VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR,
+
+  1,
+
+  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 = {
+  VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+  NULL,
+  0,
+  NULL
+};
+
+VkAcquireProfilingLockInfoKHR lockInfo = {
+  VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR,
+  NULL,
+  0,
+  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),
+  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/registry/vulkan/appendices/VK_KHR_pipeline_executable_properties.txt b/registry/vulkan/appendices/VK_KHR_pipeline_executable_properties.txt
new file mode 100644
index 0000000..0ffbf2e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_pipeline_executable_properties.txt
@@ -0,0 +1,57 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_pipeline_executable_properties.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-05-28
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+*Contributors*::
+  - Jason 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.txt[]
+
+=== 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 (Jason Ekstrand)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_pipeline_library.txt b/registry/vulkan/appendices/VK_KHR_pipeline_library.txt
new file mode 100644
index 0000000..5498224
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_pipeline_library.txt
@@ -0,0 +1,30 @@
+// Copyright 2020-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_pipeline_library.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-01-08 (Christoph Kubisch)
+   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_KHR_portability_subset.txt b/registry/vulkan/appendices/VK_KHR_portability_subset.txt
new file mode 100644
index 0000000..3a68360
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_portability_subset.txt
@@ -0,0 +1,65 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_portability_subset.txt[]
+
+=== 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 `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 capabilies,
+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.txt[]
+
+=== Issues
+
+None.
+
+=== Version History
+
+ * Revision 1, 2020-07-21 (Bill Hollings)
+   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_KHR_present_id.txt b/registry/vulkan/appendices/VK_KHR_present_id.txt
new file mode 100644
index 0000000..debbbe7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_present_id.txt
@@ -0,0 +1,37 @@
+// Copyright 2019-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_present_id.txt[]
+
+=== 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.txt[]
+
+=== Issues
+
+None.
+
+=== Examples
+
+=== Version History
+
+ * Revision 1, 2019-05-15 (Keith Packard)
+   - Initial version
diff --git a/registry/vulkan/appendices/VK_KHR_present_wait.txt b/registry/vulkan/appendices/VK_KHR_present_wait.txt
new file mode 100644
index 0000000..2f4df88
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_present_wait.txt
@@ -0,0 +1,84 @@
+// Copyright 2019-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_present_wait.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_push_descriptor.txt b/registry/vulkan/appendices/VK_KHR_push_descriptor.txt
new file mode 100644
index 0000000..7e17fdd
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_push_descriptor.txt
@@ -0,0 +1,32 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_push_descriptor.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_ray_query.txt b/registry/vulkan/appendices/VK_KHR_ray_query.txt
new file mode 100644
index 0000000..f5d9ad8
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_ray_query.txt
@@ -0,0 +1,139 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_ray_query.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-11-12
+*Interactions and External Dependencies*::
+  - This extension requires
+    https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_query.html[`SPV_KHR_ray_query`]
+  - This extension provides API support for
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-RayQueryKHR,RayQueryKHR>>
+  * <<spirvenv-capabilities-table-RayTraversalPrimitiveCullingKHR,RayTraversalPrimitiveCullingKHR>>
+
+
+=== Sample Code
+
+Example of ray query in a GLSL shader
+
+[source,c]
+---------------------------------------------------
+rayQueryEXT rq;
+
+rayQueryInitializeEXT(rq, accStruct, gl_RayFlagsNoneEXT, 0, origin, tMin, direction, tMax);
+
+while(rayQueryProceedEXT(rq)) {
+    if (rayQueryGetIntersectionTypeEXT(rq, false) == gl_RayQueryCandidateIntersectionTriangleEXT) {
+        //...
+        rayQueryConfirmIntersectionEXT(rq);
+    }
+}
+
+if (rayQueryGetIntersectionTypeEXT(rq, true) == gl_RayQueryCommittedIntersectionNoneEXT) {
+    //...
+}
+---------------------------------------------------
+
+=== 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/registry/vulkan/appendices/VK_KHR_ray_tracing_pipeline.txt b/registry/vulkan/appendices/VK_KHR_ray_tracing_pipeline.txt
new file mode 100644
index 0000000..45f0432
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_ray_tracing_pipeline.txt
@@ -0,0 +1,383 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_ray_tracing_pipeline.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-11-12
+*Interactions and External Dependencies*::
+  - This extension requires
+    https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/KHR/SPV_KHR_ray_tracing.html[`SPV_KHR_ray_tracing`]
+  - This extension provides API support for
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== 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,RayTracingKHR>>
+  * <<spirvenv-capabilities-table-RayTraversalPrimitiveCullingKHR,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 <<pipeline-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 comparision of differences and similarities
+between VK_NV_ray_tracing and VK_KHR_ray_tracing_pipeline?
+--
+*DISCUSSION*:
+
+The following is a more detailed comparision 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.
+--
+
+=== 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 queriable 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/registry/vulkan/appendices/VK_KHR_relaxed_block_layout.txt b/registry/vulkan/appendices/VK_KHR_relaxed_block_layout.txt
new file mode 100644
index 0000000..ab3bf98
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_relaxed_block_layout.txt
@@ -0,0 +1,38 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_relaxed_block_layout.txt[]
+
+=== 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.txt[]
+
+=== Version History
+  * Revision 1, 2017-03-26 (JohnK)
diff --git a/registry/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt b/registry/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt
new file mode 100644
index 0000000..ddec972
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_sampler_mirror_clamp_to_edge.txt
@@ -0,0 +1,91 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_sampler_mirror_clamp_to_edge.txt[]
+
+=== 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.txt[]
+
+=== Example
+
+Creating a sampler with the new address mode in each dimension
+
+
+[source,c++]
+----------------------------------------
+    VkSamplerCreateInfo createInfo =
+    {
+        VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO // sType
+        // 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/registry/vulkan/appendices/VK_KHR_sampler_ycbcr_conversion.txt b/registry/vulkan/appendices/VK_KHR_sampler_ycbcr_conversion.txt
new file mode 100644
index 0000000..3df219b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_sampler_ycbcr_conversion.txt
@@ -0,0 +1,88 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_sampler_ycbcr_conversion.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_separate_depth_stencil_layouts.txt b/registry/vulkan/appendices/VK_KHR_separate_depth_stencil_layouts.txt
new file mode 100644
index 0000000..dda24e0
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_separate_depth_stencil_layouts.txt
@@ -0,0 +1,41 @@
+// Copyright 2019-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_separate_depth_stencil_layouts.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-06-25 (Piers Daniell)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_shader_atomic_int64.txt b/registry/vulkan/appendices/VK_KHR_shader_atomic_int64.txt
new file mode 100644
index 0000000..68fd623
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_atomic_int64.txt
@@ -0,0 +1,51 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_atomic_int64.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-05
+*Interactions and External Dependencies*::
+  - Promoted to Vulkan 1.2 Core
+  - This extension enables
+    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_gpu_shader_int64.txt[`GL_ARB_gpu_shader_int64`]
+    and
+    https://raw.githubusercontent.com/KhronosGroup/GLSL/master/extensions/ext/GL_EXT_shader_atomic_int64.txt[`GL_EXT_shader_atomic_int64`]
+    for GLSL source languages.
+*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.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-Int64Atomics,Int64Atomics>>
+
+=== Version History
+
+  * Revision 1, 2018-07-05 (Aaron Hagan)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_KHR_shader_clock.txt b/registry/vulkan/appendices/VK_KHR_shader_clock.txt
new file mode 100644
index 0000000..8134373
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_clock.txt
@@ -0,0 +1,46 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_clock.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_clock.txt[`ARB_shader_clock`]
+    and
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-ShaderClockKHR,ShaderClockKHR>>
+
+=== Version History
+
+  * Revision 1, 2019-4-25 (Aaron Hagan)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_shader_draw_parameters.txt b/registry/vulkan/appendices/VK_KHR_shader_draw_parameters.txt
new file mode 100644
index 0000000..ef04bbd
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_draw_parameters.txt
@@ -0,0 +1,93 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_draw_parameters.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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, which contains the pname:firstInstance parameter
+    passed to drawing commands,
+  * code:BaseVertex, which contains the pname:firstVertex or
+    pname:vertexOffset parameter passed to drawing commands, and
+  * code:DrawIndex, which contains the index of the draw call currently
+    being processed from an indirect draw 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
+a <<features-shaderDrawParameters,feature bit was added>> to distinguish
+whether it is actually available or not.
+
+include::{generated}/interfaces/VK_KHR_shader_draw_parameters.txt[]
+
+=== 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,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/registry/vulkan/appendices/VK_KHR_shader_float16_int8.txt b/registry/vulkan/appendices/VK_KHR_shader_float16_int8.txt
new file mode 100644
index 0000000..7217cc7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_float16_int8.txt
@@ -0,0 +1,56 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_float16_int8.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== Version History
+  * Revision 1, 2018-03-07 (Alexander Galazin)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_shader_float_controls.txt b/registry/vulkan/appendices/VK_KHR_shader_float_controls.txt
new file mode 100644
index 0000000..50fefb1
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_float_controls.txt
@@ -0,0 +1,134 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_float_controls.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_shader_integer_dot_product.txt b/registry/vulkan/appendices/VK_KHR_shader_integer_dot_product.txt
new file mode 100644
index 0000000..6b01cd8
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_integer_dot_product.txt
@@ -0,0 +1,54 @@
+// Copyright (c) 2019-2020 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_integer_dot_product.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-06-16
+*Interactions and External Dependencies*::
+  - 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.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-DotProductInputAllKHR,DotProductInputAllKHR>>
+  * <<spirvenv-capabilities-table-DotProductInput4x8BitKHR,DotProductInput4x8BitKHR>>
+  * <<spirvenv-capabilities-table-DotProductInput4x8BitPackedKHR,DotProductInput4x8BitPackedKHR>>
+  * <<spirvenv-capabilities-table-DotProductKHR,DotProductKHR>>
+
+=== Version History
+
+  * Revision 1, 2021-06-16 (Kévin Petit)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_shader_non_semantic_info.txt b/registry/vulkan/appendices/VK_KHR_shader_non_semantic_info.txt
new file mode 100644
index 0000000..9531ad2
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_non_semantic_info.txt
@@ -0,0 +1,29 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_non_semantic_info.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2019-10-16
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - This extension requires
+    {spirv}/KHR/SPV_KHR_non_semantic_info.html[`SPV_KHR_non_semantic_info`]
+*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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-10-16 (Baldur Karlsson)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_shader_subgroup_extended_types.txt b/registry/vulkan/appendices/VK_KHR_shader_subgroup_extended_types.txt
new file mode 100644
index 0000000..7f13247
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_subgroup_extended_types.txt
@@ -0,0 +1,45 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_extended_types.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-01-08 (Neil Henning)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_shader_subgroup_uniform_control_flow.txt b/registry/vulkan/appendices/VK_KHR_shader_subgroup_uniform_control_flow.txt
new file mode 100644
index 0000000..2d97a64
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_subgroup_uniform_control_flow.txt
@@ -0,0 +1,39 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_uniform_control_flow.txt[]
+
+=== 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`]
+*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.txt[]
+
+=== Version History
+
+  * Revision 1, 2020-08-27 (Alan Baker)
+    - Internal draft version
diff --git a/registry/vulkan/appendices/VK_KHR_shader_terminate_invocation.txt b/registry/vulkan/appendices/VK_KHR_shader_terminate_invocation.txt
new file mode 100644
index 0000000..b3b724c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shader_terminate_invocation.txt
@@ -0,0 +1,46 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shader_terminate_invocation.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-08-11
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+  - Requires the
+    {spirv}/KHR/SPV_KHR_terminate_invocation.html[`SPV_KHR_terminate_invocation`]
+    SPIR-V extension.
+*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.txt[]
+
+=== Version History
+
+  * Revision 1, 2020-08-11 (Jesse Hall)
diff --git a/registry/vulkan/appendices/VK_KHR_shared_presentable_image.txt b/registry/vulkan/appendices/VK_KHR_shared_presentable_image.txt
new file mode 100644
index 0000000..ea5b522
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_shared_presentable_image.txt
@@ -0,0 +1,127 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_shared_presentable_image.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_spirv_1_4.txt b/registry/vulkan/appendices/VK_KHR_spirv_1_4.txt
new file mode 100644
index 0000000..a33f517
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_spirv_1_4.txt
@@ -0,0 +1,119 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_spirv_1_4.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_storage_buffer_storage_class.txt b/registry/vulkan/appendices/VK_KHR_storage_buffer_storage_class.txt
new file mode 100644
index 0000000..f5762e7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_storage_buffer_storage_class.txt
@@ -0,0 +1,40 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_storage_buffer_storage_class.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2017-03-23 (Alexander Galazin)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_surface.txt b/registry/vulkan/appendices/VK_KHR_surface.txt
new file mode 100644
index 0000000..bac3657
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_surface.txt
@@ -0,0 +1,226 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_surface.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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).
+====
+
+=== 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/registry/vulkan/appendices/VK_KHR_surface_protected_capabilities.txt b/registry/vulkan/appendices/VK_KHR_surface_protected_capabilities.txt
new file mode 100644
index 0000000..9e78018
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_surface_protected_capabilities.txt
@@ -0,0 +1,44 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_surface_protected_capabilities.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2018-12-18 (Sandeep Shinde, Daniel Koch)
+   - Internal revisions.
diff --git a/registry/vulkan/appendices/VK_KHR_swapchain.txt b/registry/vulkan/appendices/VK_KHR_swapchain.txt
new file mode 100644
index 0000000..f489872
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_swapchain.txt
@@ -0,0 +1,774 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_swapchain.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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.
+
+=== 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).
+====
+
+=== 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 (Jason Ekstrand)
+    - Merged the VkRotationFlagBitsKHR and VkMirrorFlagBitsKHR enums into a
+      single VkSurfaceTransformFlagBitsKHR enum.
+
+  * Revision 36, 2015-06-26 (Jason 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 (Jason 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/registry/vulkan/appendices/VK_KHR_swapchain_mutable_format.txt b/registry/vulkan/appendices/VK_KHR_swapchain_mutable_format.txt
new file mode 100644
index 0000000..338bebe
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_swapchain_mutable_format.txt
@@ -0,0 +1,63 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_swapchain_mutable_format.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-03-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_synchronization2.txt b/registry/vulkan/appendices/VK_KHR_synchronization2.txt
new file mode 100644
index 0000000..1b3282c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_synchronization2.txt
@@ -0,0 +1,96 @@
+// Copyright (c) 2020 Khronos Group.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_synchronization2.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-12-03
+*Interactions and External Dependencies*::
+  - 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_timeline_semaphore.txt b/registry/vulkan/appendices/VK_KHR_timeline_semaphore.txt
new file mode 100644
index 0000000..dfdaa64
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_timeline_semaphore.txt
@@ -0,0 +1,150 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_timeline_semaphore.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== 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
+sychronization 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 (Jason Ekstrand)
+   - Initial version
+
+ * Revision 2, 2019-06-12 (Jason Ekstrand)
+   - Added an initialValue parameter to timeline semaphore creation
diff --git a/registry/vulkan/appendices/VK_KHR_uniform_buffer_standard_layout.txt b/registry/vulkan/appendices/VK_KHR_uniform_buffer_standard_layout.txt
new file mode 100644
index 0000000..d5bb36f
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_uniform_buffer_standard_layout.txt
@@ -0,0 +1,43 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_uniform_buffer_standard_layout.txt[]
+
+=== 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
+  - Jason 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://www.khronos.org/registry/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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-01-25 (Graeme Leese)
+    - Initial draft
diff --git a/registry/vulkan/appendices/VK_KHR_variable_pointers.txt b/registry/vulkan/appendices/VK_KHR_variable_pointers.txt
new file mode 100644
index 0000000..a21be10
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_variable_pointers.txt
@@ -0,0 +1,83 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_variable_pointers.txt[]
+
+=== 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
+  - Jason 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.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-VariablePointers,VariablePointers>>
+  * <<spirvenv-capabilities-table-VariablePointersStorageBuffer,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/registry/vulkan/appendices/VK_KHR_video_decode_queue.txt b/registry/vulkan/appendices/VK_KHR_video_decode_queue.txt
new file mode 100644
index 0000000..2efad80
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_video_decode_queue.txt
@@ -0,0 +1,34 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_decode_queue.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Jake Beju, AMD
+  - Olivier Lapicque, NVIDIA
+  - Peter Fang, AMD
+  - Piers Daniell, NVIDIA
+  - Srinath Kumarapuram, NVIDIA
+  - Tony Zlatinski, NVIDIA
+
+include::{generated}/interfaces/VK_KHR_video_decode_queue.txt[]
+
+=== 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`
diff --git a/registry/vulkan/appendices/VK_KHR_video_encode_queue.txt b/registry/vulkan/appendices/VK_KHR_video_encode_queue.txt
new file mode 100644
index 0000000..424ca83
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_video_encode_queue.txt
@@ -0,0 +1,40 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_encode_queue.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-09-30
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Ahmed Abdelkhalek, AMD
+  - Damien Kessler, NVIDIA
+  - Daniel Rakos, AMD
+  - George Hao, AMD
+  - Jake Beju, AMD
+  - Peter Fang, AMD
+  - Piers Daniell, NVIDIA
+  - Srinath Kumarapuram, NVIDIA
+  - Thomas J. Meier, NVIDIA
+  - Tony Zlatinski, NVIDIA
+  - Yang Liu, AMD
+
+include::{generated}/interfaces/VK_KHR_video_encode_queue.txt[]
+
+=== 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`
diff --git a/registry/vulkan/appendices/VK_KHR_video_queue.txt b/registry/vulkan/appendices/VK_KHR_video_queue.txt
new file mode 100755
index 0000000..da78bd6
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_video_queue.txt
@@ -0,0 +1,36 @@
+// Copyright (c) 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_video_queue.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-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
+
+include::{generated}/interfaces/VK_KHR_video_queue.txt[]
+
+=== 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.
diff --git a/registry/vulkan/appendices/VK_KHR_vulkan_memory_model.txt b/registry/vulkan/appendices/VK_KHR_vulkan_memory_model.txt
new file mode 100644
index 0000000..7916099
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_vulkan_memory_model.txt
@@ -0,0 +1,62 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_vulkan_memory_model.txt[]
+
+=== 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 `VK_KHR_vulkan_memory_model` extension allows use of the
+<<memory-model,Vulkan Memory Model>>, which 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_wayland_surface.txt b/registry/vulkan/appendices/VK_KHR_wayland_surface.txt
new file mode 100644
index 0000000..0ff529a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_wayland_surface.txt
@@ -0,0 +1,92 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_wayland_surface.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2015-11-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Jason 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.txt[]
+
+=== 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 (Jason 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/registry/vulkan/appendices/VK_KHR_win32_keyed_mutex.txt b/registry/vulkan/appendices/VK_KHR_win32_keyed_mutex.txt
new file mode 100644
index 0000000..deddfe7
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_win32_keyed_mutex.txt
@@ -0,0 +1,32 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_win32_keyed_mutex.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2016-10-21 (James Jones)
+    - Initial revision
diff --git a/registry/vulkan/appendices/VK_KHR_win32_surface.txt b/registry/vulkan/appendices/VK_KHR_win32_surface.txt
new file mode 100644
index 0000000..5e62473
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_win32_surface.txt
@@ -0,0 +1,122 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_win32_surface.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2017-04-24
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_workgroup_memory_explicit_layout.txt b/registry/vulkan/appendices/VK_KHR_workgroup_memory_explicit_layout.txt
new file mode 100644
index 0000000..f9c3075
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_workgroup_memory_explicit_layout.txt
@@ -0,0 +1,54 @@
+// Copyright 2016-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_workgroup_memory_explicit_layout.txt[]
+
+=== 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`]
+*Contributors*::
+ - Caio Marcelo de Oliveira Filho, Intel
+ - Jeff Bolz, NVIDIA
+ - Graeme Leese, Broadcom
+ - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_xcb_surface.txt b/registry/vulkan/appendices/VK_KHR_xcb_surface.txt
new file mode 100644
index 0000000..8849e25
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_xcb_surface.txt
@@ -0,0 +1,78 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_xcb_surface.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2015-11-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_xlib_surface.txt b/registry/vulkan/appendices/VK_KHR_xlib_surface.txt
new file mode 100644
index 0000000..4db3f96
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_xlib_surface.txt
@@ -0,0 +1,78 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_xlib_surface.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2015-11-28
+*IP Status*::
+    No known IP claims.
+*Contributors*::
+  - Patrick Doane, Blizzard
+  - Jason 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_KHR_zero_initialize_workgroup_memory.txt b/registry/vulkan/appendices/VK_KHR_zero_initialize_workgroup_memory.txt
new file mode 100644
index 0000000..dd4ddf1
--- /dev/null
+++ b/registry/vulkan/appendices/VK_KHR_zero_initialize_workgroup_memory.txt
@@ -0,0 +1,34 @@
+// Copyright 2020-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_KHR_zero_initialize_workgroup_memory.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-11-18
+*IP Status*::
+    No known IP claims.
+*Interactions and External Dependencies*::
+    None
+*Contributors*::
+  - Alan Baker, Google
+  - Jeff Bolz, Nvidia
+  - Jason 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2020-11-18 (Alan Baker)
+    - Internal draft version
+
diff --git a/registry/vulkan/appendices/VK_MVK_ios_surface.txt b/registry/vulkan/appendices/VK_MVK_ios_surface.txt
new file mode 100644
index 0000000..19ad1ae
--- /dev/null
+++ b/registry/vulkan/appendices/VK_MVK_ios_surface.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_MVK_macos_surface.txt b/registry/vulkan/appendices/VK_MVK_macos_surface.txt
new file mode 100644
index 0000000..ab56253
--- /dev/null
+++ b/registry/vulkan/appendices/VK_MVK_macos_surface.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NN_vi_surface.txt b/registry/vulkan/appendices/VK_NN_vi_surface.txt
new file mode 100644
index 0000000..fcd167d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NN_vi_surface.txt
@@ -0,0 +1,52 @@
+// Copyright (c) 2016-2020 Nintendo
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NN_vi_surface.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NVX_binary_import.txt b/registry/vulkan/appendices/VK_NVX_binary_import.txt
new file mode 100644
index 0000000..df14a57
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NVX_binary_import.txt
@@ -0,0 +1,41 @@
+// Copyright (c) 2018-2021 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NVX_binary_import.txt[]
+
+=== 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.
+
+ifdef::EXTENSION_UNDEFINED[]
+include::{generated}/interfaces/VK_NVX_binary_import.txt[]
+endif::EXTENSION_UNDEFINED[]
+
+ifndef::EXTENSION_UNDEFINED[]
+// The anchor is added here as a landing place for a reference from
+// the autogenerated section of the features chapter, until spec
+// language is written.
+[[vkCmdCuLaunchKernelNVX]]
+[NOTE]
+.Note
+====
+There is currently no specification language written for this extension, so
+although it appears in the Vulkan headers, its interfaces are not summarized
+here.
+====
+endif::EXTENSION_UNDEFINED[]
+
+=== Version History
+
+  * Revision 1, 2021-04-09 (Eric Werness)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NVX_image_view_handle.txt b/registry/vulkan/appendices/VK_NVX_image_view_handle.txt
new file mode 100644
index 0000000..16497a9
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NVX_image_view_handle.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 2, 2020-04-03 (Piers Daniell)
+    - Add flink:vkGetImageViewAddressNVX
+
+  * Revision 1, 2018-12-07 (Eric Werness)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NVX_multiview_per_view_attributes.txt b/registry/vulkan/appendices/VK_NVX_multiview_per_view_attributes.txt
new file mode 100644
index 0000000..376e07b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NVX_multiview_per_view_attributes.txt
@@ -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.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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
+<<pipeline-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
+<<pipeline-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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_acquire_winrt_display.txt b/registry/vulkan/appendices/VK_NV_acquire_winrt_display.txt
new file mode 100644
index 0000000..4cf58fa
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_acquire_winrt_display.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_clip_space_w_scaling.txt b/registry/vulkan/appendices/VK_NV_clip_space_w_scaling.txt
new file mode 100644
index 0000000..3f8cd26
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_clip_space_w_scaling.txt
@@ -0,0 +1,156 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_clip_space_w_scaling.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_compute_shader_derivatives.txt b/registry/vulkan/appendices/VK_NV_compute_shader_derivatives.txt
new file mode 100644
index 0000000..668c4f0
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_compute_shader_derivatives.txt
@@ -0,0 +1,62 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_compute_shader_derivatives.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-ComputeDerivativeGroupQuadsNV,ComputeDerivativeGroupQuadsNV>>
+  * <<spirvenv-capabilities-table-ComputeDerivativeGroupLinearNV,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/registry/vulkan/appendices/VK_NV_cooperative_matrix.txt b/registry/vulkan/appendices/VK_NV_cooperative_matrix.txt
new file mode 100644
index 0000000..dbae959
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_cooperative_matrix.txt
@@ -0,0 +1,62 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_cooperative_matrix.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-CooperativeMatrixNV,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/registry/vulkan/appendices/VK_NV_corner_sampled_image.txt b/registry/vulkan/appendices/VK_NV_corner_sampled_image.txt
new file mode 100644
index 0000000..551e132
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_corner_sampled_image.txt
@@ -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.txt[]
+
+=== 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-miplevel-sizing,Image Miplevel Sizing>>.
+  * The minimum level size is 2x2 for 2D images and 2x2x2 for 3D images.
+    See <<resources-image-miplevel-sizing,Image Miplevel 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 level-of-detail values.
+
+include::{generated}/interfaces/VK_NV_corner_sampled_image.txt[]
+
+=== 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*: Probaby, but later.
+--
+
+=== Version History
+
+  * Revision 1, 2018-08-14 (Daniel Koch)
+    - Internal revisions
+  * Revision 2, 2018-08-14 (Daniel Koch)
+    - ???
diff --git a/registry/vulkan/appendices/VK_NV_coverage_reduction_mode.txt b/registry/vulkan/appendices/VK_NV_coverage_reduction_mode.txt
new file mode 100644
index 0000000..99f481c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_coverage_reduction_mode.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-01-29 (Kedarnath Thangudu)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_dedicated_allocation.txt b/registry/vulkan/appendices/VK_NV_dedicated_allocation.txt
new file mode 100644
index 0000000..943a96a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_dedicated_allocation.txt
@@ -0,0 +1,110 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_dedicated_allocation.txt[]
+
+=== 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.txt[]
+
+=== Examples
+
+[source,c++]
+--------------------------------------
+
+    // Create an image with
+    // VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation
+    // set to VK_TRUE
+
+    VkDedicatedAllocationImageCreateInfoNV dedicatedImageInfo =
+    {
+        VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,            // sType
+        NULL,                                                                   // pNext
+        VK_TRUE,                                                                // dedicatedAllocation
+    };
+
+    VkImageCreateInfo imageCreateInfo =
+    {
+        VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,    // sType
+        &dedicatedImageInfo                     // pNext
+        // 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 =
+    {
+        VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,             // sType
+        NULL,                                                                       // pNext
+        image,                                                                      // image
+        VK_NULL_HANDLE,                                                             // buffer
+    };
+
+    VkMemoryAllocateInfo memoryAllocateInfo =
+    {
+        VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,                 // sType
+        &dedicatedInfo,                                         // pNext
+        memoryRequirements.size,                                // allocationSize
+        FindMemoryTypeIndex(memoryRequirements.memoryTypeBits), // memoryTypeIndex
+    };
+
+    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/registry/vulkan/appendices/VK_NV_dedicated_allocation_image_aliasing.txt b/registry/vulkan/appendices/VK_NV_dedicated_allocation_image_aliasing.txt
new file mode 100644
index 0000000..be89c9c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_dedicated_allocation_image_aliasing.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-01-04 (Nuno Subtil)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_device_diagnostic_checkpoints.txt b/registry/vulkan/appendices/VK_NV_device_diagnostic_checkpoints.txt
new file mode 100644
index 0000000..5153f1d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_device_diagnostic_checkpoints.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2018-07-16 (Nuno Subtil)
+    - Internal revisions
+  * Revision 2, 2018-07-16 (Nuno Subtil)
+    - ???
diff --git a/registry/vulkan/appendices/VK_NV_device_diagnostics_config.txt b/registry/vulkan/appendices/VK_NV_device_diagnostics_config.txt
new file mode 100644
index 0000000..1bd1d1c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_device_diagnostics_config.txt
@@ -0,0 +1,26 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_device_diagnostics_config.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+  2019-12-15
+*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.
+
+include::{generated}/interfaces/VK_NV_device_diagnostics_config.txt[]
+
+=== Version History
+
+  * Revision 1, 2019-11-21 (Kedarnath Thangudu)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_device_generated_commands.txt b/registry/vulkan/appendices/VK_NV_device_generated_commands.txt
new file mode 100644
index 0000000..101ff2e
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_device_generated_commands.txt
@@ -0,0 +1,326 @@
+// Copyright (c) 2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_device_generated_commands.txt[]
+
+=== 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.txt[]
+
+=== 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 desireable.
+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/registry/vulkan/appendices/VK_NV_external_memory.txt b/registry/vulkan/appendices/VK_NV_external_memory.txt
new file mode 100644
index 0000000..d7db4fe
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_external_memory.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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 applictions 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/registry/vulkan/appendices/VK_NV_external_memory_capabilities.txt b/registry/vulkan/appendices/VK_NV_external_memory_capabilities.txt
new file mode 100644
index 0000000..bd9629d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_external_memory_capabilities.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_external_memory_rdma.txt b/registry/vulkan/appendices/VK_NV_external_memory_rdma.txt
new file mode 100644
index 0000000..761d7e5
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_external_memory_rdma.txt
@@ -0,0 +1,100 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_memory_rdma.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_external_memory_win32.txt b/registry/vulkan/appendices/VK_NV_external_memory_win32.txt
new file mode 100644
index 0000000..febfc34
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_external_memory_win32.txt
@@ -0,0 +1,215 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_external_memory_win32.txt[]
+
+=== 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.txt[]
+
+=== 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 applictions 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/registry/vulkan/appendices/VK_NV_fill_rectangle.txt b/registry/vulkan/appendices/VK_NV_fill_rectangle.txt
new file mode 100644
index 0000000..ebc978a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_fill_rectangle.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2017-05-22 (Jeff Bolz)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_fragment_coverage_to_color.txt b/registry/vulkan/appendices/VK_NV_fragment_coverage_to_color.txt
new file mode 100644
index 0000000..1fd7254
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_fragment_coverage_to_color.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2017-05-21 (Jeff Bolz)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_fragment_shader_barycentric.txt b/registry/vulkan/appendices/VK_NV_fragment_shader_barycentric.txt
new file mode 100644
index 0000000..b66d16b
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_fragment_shader_barycentric.txt
@@ -0,0 +1,118 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_fragment_shader_barycentric.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.
+
+include::{generated}/interfaces/VK_NV_fragment_shader_barycentric.txt[]
+
+=== New Built-In Variables
+
+  * <<interfaces-builtin-variables-barycoordnv,code:BaryCoordNV>>
+  * <<interfaces-builtin-variables-barycoordnoperspnv,code:BaryCoordNoPerspNV>>
+
+=== New SPIR-V Decorations
+
+  * <<shaders-interpolation-decorations-pervertexnv,code:PerVertexNV>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-FragmentBarycentricNV,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/registry/vulkan/appendices/VK_NV_fragment_shading_rate_enums.txt b/registry/vulkan/appendices/VK_NV_fragment_shading_rate_enums.txt
new file mode 100644
index 0000000..7469ece
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_fragment_shading_rate_enums.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_framebuffer_mixed_samples.txt b/registry/vulkan/appendices/VK_NV_framebuffer_mixed_samples.txt
new file mode 100644
index 0000000..12927a1
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_framebuffer_mixed_samples.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2017-06-04 (Jeff Bolz)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_geometry_shader_passthrough.txt b/registry/vulkan/appendices/VK_NV_geometry_shader_passthrough.txt
new file mode 100644
index 0000000..efb6654
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_geometry_shader_passthrough.txt
@@ -0,0 +1,168 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_geometry_shader_passthrough.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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.txt[]
+
+=== New Variable Decoration
+
+  * <<geometry-passthrough-passthrough,code:PassthroughNV>> in
+    <<geometry-passthrough,Geometry Shader Passthrough>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-GeometryShaderPassthroughNV,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 varables 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/registry/vulkan/appendices/VK_NV_glsl_shader.txt b/registry/vulkan/appendices/VK_NV_glsl_shader.txt
new file mode 100644
index 0000000..1e32997
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_glsl_shader.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_inherited_viewport_scissor.txt b/registry/vulkan/appendices/VK_NV_inherited_viewport_scissor.txt
new file mode 100644
index 0000000..06bef17
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_inherited_viewport_scissor.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_mesh_shader.txt b/registry/vulkan/appendices/VK_NV_mesh_shader.txt
new file mode 100644
index 0000000..8b0c408
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_mesh_shader.txt
@@ -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.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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
+<<pipeline-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.txt[]
+
+=== 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,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/registry/vulkan/appendices/VK_NV_ray_tracing.txt b/registry/vulkan/appendices/VK_NV_ray_tracing.txt
new file mode 100644
index 0000000..f6ba2b4
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_ray_tracing.txt
@@ -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.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== 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,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/registry/vulkan/appendices/VK_NV_ray_tracing_motion_blur.txt b/registry/vulkan/appendices/VK_NV_ray_tracing_motion_blur.txt
new file mode 100755
index 0000000..3dd8d66
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_ray_tracing_motion_blur.txt
@@ -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.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_representative_fragment_test.txt b/registry/vulkan/appendices/VK_NV_representative_fragment_test.txt
new file mode 100644
index 0000000..52aca2a
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_representative_fragment_test.txt
@@ -0,0 +1,101 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_representative_fragment_test.txt[]
+
+=== 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.txt[]
+
+=== 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 level of detail computations
+work with the representative fragment test enabled?
+
+*RESOLVED*: If a fragment shader uses derivative functions or texture
+lookups using automatic level of detail 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/registry/vulkan/appendices/VK_NV_sample_mask_override_coverage.txt b/registry/vulkan/appendices/VK_NV_sample_mask_override_coverage.txt
new file mode 100644
index 0000000..33a424c
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_sample_mask_override_coverage.txt
@@ -0,0 +1,56 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_sample_mask_override_coverage.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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.txt[]
+
+=== New Variable Decoration
+
+  * <<interfaces-builtin-variables-samplemask,OverrideCoverageNV in
+    SampleMask>>
+
+=== New SPIR-V Capabilities
+
+  * <<spirvenv-capabilities-table-SampleMaskOverrideCoverageNV,SampleMaskOverrideCoverageNV>>
+
+=== Version History
+
+  * Revision 1, 2016-12-08 (Piers Daniell)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_scissor_exclusive.txt b/registry/vulkan/appendices/VK_NV_scissor_exclusive.txt
new file mode 100644
index 0000000..73ea920
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_scissor_exclusive.txt
@@ -0,0 +1,48 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_scissor_exclusive.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2018-07-31
+*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.
+
+include::{generated}/interfaces/VK_NV_scissor_exclusive.txt[]
+
+=== 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 1, 2018-07-31 (Pat Brown)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_shader_image_footprint.txt b/registry/vulkan/appendices/VK_NV_shader_image_footprint.txt
new file mode 100644
index 0000000..48feca9
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_shader_image_footprint.txt
@@ -0,0 +1,218 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_shader_image_footprint.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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 visbility), 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.txt[]
+
+=== New SPIR-V Capability
+
+  * <<spirvenv-capabilities-table-ImageFootprintNV,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 level of detail 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/registry/vulkan/appendices/VK_NV_shader_sm_builtins.txt b/registry/vulkan/appendices/VK_NV_shader_sm_builtins.txt
new file mode 100644
index 0000000..09e1ff1
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_shader_sm_builtins.txt
@@ -0,0 +1,68 @@
+// Copyright (c) 2019-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_shader_sm_builtins.txt[]
+
+=== 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 enables
+   https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_shader_sm_builtins.txt[`GL_NV_shader_sm_builtins`]
+   for GLSL source languages.
+*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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_shader_subgroup_partitioned.txt b/registry/vulkan/appendices/VK_NV_shader_subgroup_partitioned.txt
new file mode 100644
index 0000000..a056356
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_shader_subgroup_partitioned.txt
@@ -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.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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
+https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== Version History
+
+  * Revision 1, 2018-03-17 (Jeff Bolz)
+    - Internal revisions
diff --git a/registry/vulkan/appendices/VK_NV_shading_rate_image.txt b/registry/vulkan/appendices/VK_NV_shading_rate_image.txt
new file mode 100644
index 0000000..dceb828
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_shading_rate_image.txt
@@ -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.txt[]
+
+=== 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
+    https://github.com/KhronosGroup/GLSL/blob/master/extensions/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.txt[]
+
+=== 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 aplications 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
+<<pipeline-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/registry/vulkan/appendices/VK_NV_viewport_array2.txt b/registry/vulkan/appendices/VK_NV_viewport_array2.txt
new file mode 100644
index 0000000..1f74abf
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_viewport_array2.txt
@@ -0,0 +1,88 @@
+// Copyright (c) 2017-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_viewport_array2.txt[]
+
+=== 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
+    https://www.khronos.org/registry/OpenGL/extensions/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
+specificiation.
+
+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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_viewport_swizzle.txt b/registry/vulkan/appendices/VK_NV_viewport_swizzle.txt
new file mode 100644
index 0000000..d1b414d
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_viewport_swizzle.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_NV_win32_keyed_mutex.txt b/registry/vulkan/appendices/VK_NV_win32_keyed_mutex.txt
new file mode 100644
index 0000000..549f914
--- /dev/null
+++ b/registry/vulkan/appendices/VK_NV_win32_keyed_mutex.txt
@@ -0,0 +1,173 @@
+// Copyright (c) 2016-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_NV_win32_keyed_mutex.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_QCOM_render_pass_shader_resolve.txt b/registry/vulkan/appendices/VK_QCOM_render_pass_shader_resolve.txt
new file mode 100644
index 0000000..12f5727
--- /dev/null
+++ b/registry/vulkan/appendices/VK_QCOM_render_pass_shader_resolve.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== 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/registry/vulkan/appendices/VK_QCOM_render_pass_store_ops.txt b/registry/vulkan/appendices/VK_QCOM_render_pass_store_ops.txt
new file mode 100644
index 0000000..4097a43
--- /dev/null
+++ b/registry/vulkan/appendices/VK_QCOM_render_pass_store_ops.txt
@@ -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.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2020-03-25
+*Contributors*::
+  - Bill Licea-Kane, Qualcomm Technologies, Inc.
+
+=== Description
+
+Renderpass 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 which specifies 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2019-12-20 (wwlk)
+   - Initial version
+ * Revision 2, 2020-03-25 (wwlk)
+   - Minor renaming
diff --git a/registry/vulkan/appendices/VK_QCOM_render_pass_transform.txt b/registry/vulkan/appendices/VK_QCOM_render_pass_transform.txt
new file mode 100644
index 0000000..11c8624
--- /dev/null
+++ b/registry/vulkan/appendices/VK_QCOM_render_pass_transform.txt
@@ -0,0 +1,174 @@
+// Copyright (c) 2020 Qualcomm Technologies, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QCOM_render_pass_transform.txt[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+    2021-03-09
+*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`
+*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) doesnt 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.
+
+include::{generated}/interfaces/VK_QCOM_render_pass_transform.txt[]
+
+=== 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
diff --git a/registry/vulkan/appendices/VK_QCOM_rotated_copy_commands.txt b/registry/vulkan/appendices/VK_QCOM_rotated_copy_commands.txt
new file mode 100644
index 0000000..b65d2b3
--- /dev/null
+++ b/registry/vulkan/appendices/VK_QCOM_rotated_copy_commands.txt
@@ -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.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+  * Revision 1, 2020-09-19 (Jeff Leger)
diff --git a/registry/vulkan/appendices/VK_QNX_screen_surface.txt b/registry/vulkan/appendices/VK_QNX_screen_surface.txt
new file mode 100644
index 0000000..3241b58
--- /dev/null
+++ b/registry/vulkan/appendices/VK_QNX_screen_surface.txt
@@ -0,0 +1,29 @@
+// Copyright (c) 2021 BlackBerry Limited.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_QNX_screen_surface.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2021-01-11 (Mike Gorchak)
+   - Initial draft.
diff --git a/registry/vulkan/appendices/VK_VALVE_mutable_descriptor_type.txt b/registry/vulkan/appendices/VK_VALVE_mutable_descriptor_type.txt
new file mode 100644
index 0000000..3aa1cb3
--- /dev/null
+++ b/registry/vulkan/appendices/VK_VALVE_mutable_descriptor_type.txt
@@ -0,0 +1,45 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_VALVE_mutable_descriptor_type.txt[]
+
+=== 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.txt[]
+
+=== Version History
+
+ * Revision 1, 2020-12-01 (Joshua Ashton, Hans-Kristian Arntzen)
+   - Initial specification, squashed from public draft.
diff --git a/registry/vulkan/appendices/boilerplate.txt b/registry/vulkan/appendices/boilerplate.txt
new file mode 100644
index 0000000..fb11c8a
--- /dev/null
+++ b/registry/vulkan/appendices/boilerplate.txt
@@ -0,0 +1,418 @@
+// Copyright 2016-2021 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
+https://www.khronos.org/registry/vulkan/#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.
+
+
+
+
+
+==== 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.txt[]
+--
+
+[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.txt[]
+--
+
+[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.txt[]
+--
+
+
+==== 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.txt[]
+
+  * 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.txt[]
+
+  * 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
+dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE and dname:VK_NULL_HANDLE definitions
+to be overridden by the application.
+If dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE is already defined when
+`{core_header}` is compiled, the default definitions for
+dname:VK_DEFINE_NON_DISPATCHABLE_HANDLE and dname: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.txt[]
+--
+
+[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.txt[]
+
+[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.
+====
+
+--
+
+[[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 systems must: be included at compile time, or
+platform-specific types must: be forward-declared.
+The Vulkan header files cannot 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 should 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`,
+ifdef::VK_NV_external_memory_win32[]
+  `apiext:VK_NV_external_memory_win32`,
+endif::VK_NV_external_memory_win32[]
+ifdef::VK_NV_win32_keyed_mutex[]
+  `apiext:VK_NV_win32_keyed_mutex`
+endif::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
+ifdef::VK_EXT_directfb_surface[]
+| `apiext:VK_EXT_directfb_surface`      | DirectFB               | `vulkan_directfb.h`      | `<directfb/directfb.h>`        | dname:VK_USE_PLATFORM_DIRECTFB_EXT
+endif::VK_EXT_directfb_surface[]
+ifdef::VK_EXT_acquire_xlib_display[]
+| `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
+endif::VK_EXT_acquire_xlib_display[]
+ifdef::VK_GGP_stream_descriptor_surface[]
+| `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
+endif::VK_GGP_stream_descriptor_surface[]
+ifdef::VK_MVK_ios_surface[]
+| `apiext:VK_MVK_ios_surface`           | iOS                    | `vulkan_ios.h`           | None                           | dname:VK_USE_PLATFORM_IOS_MVK
+endif::VK_MVK_ios_surface[]
+ifdef::VK_MVK_macos_surface[]
+| `apiext:VK_MVK_macos_surface`         | macOS                  | `vulkan_macos.h`         | None                           | dname:VK_USE_PLATFORM_MACOS_MVK
+endif::VK_MVK_macos_surface[]
+ifdef::VK_NN_vi_surface[]
+| `apiext:VK_NN_vi_surface`             | VI                     | `vulkan_vi.h`            | None                           | dname:VK_USE_PLATFORM_VI_NN
+endif::VK_NN_vi_surface[]
+ifdef::VK_FUCHSIA_imagepipe_surface[]
+| `apiext:VK_FUCHSIA_imagepipe_surface` | Fuchsia                | `vulkan_fuchsia.h`       | `<zircon/types.h>`             | dname:VK_USE_PLATFORM_FUCHSIA
+endif::VK_FUCHSIA_imagepipe_surface[]
+ifdef::VK_EXT_metal_surface[]
+| `apiext:VK_EXT_metal_surface`         | Metal on CoreAnimation | `vulkan_metal.h`         | None                           | dname:VK_USE_PLATFORM_METAL_EXT
+endif::VK_EXT_metal_surface[]
+ifdef::VK_QNX_screen_surface[]
+| `apiext:VK_QNX_screen_surface`        | QNX Screen             | `vulkan_screen.h`        | `<screen/screen.h>`            | dname:VK_USE_PLATFORM_SCREEN_QNX
+endif::VK_QNX_screen_surface[]
+|====
+
+[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.
+====
+--
diff --git a/registry/vulkan/appendices/compressedtex.txt b/registry/vulkan/appendices/compressedtex.txt
new file mode 100644
index 0000000..89e51e8
--- /dev/null
+++ b/registry/vulkan/appendices/compressedtex.txt
@@ -0,0 +1,213 @@
+// Copyright 2015-2021 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_EXT_texture_compression_astc_hdr[]
+| ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT   ^|[eq]#4 {times} 4#   ^|HDR
+| ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT   ^|[eq]#5 {times} 4#   ^|HDR
+| ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT   ^|[eq]#5 {times} 5#   ^|HDR
+| ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT   ^|[eq]#6 {times} 5#   ^|HDR
+| ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT   ^|[eq]#6 {times} 6#   ^|HDR
+| ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT   ^|[eq]#8 {times} 5#   ^|HDR
+| ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT   ^|[eq]#8 {times} 6#   ^|HDR
+| ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT   ^|[eq]#8 {times} 8#   ^|HDR
+| ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT  ^|[eq]#10 {times} 5#  ^|HDR
+| ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT  ^|[eq]#10 {times} 6#  ^|HDR
+| ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT  ^|[eq]#10 {times} 8#  ^|HDR
+| ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT ^|[eq]#10 {times} 10# ^|HDR
+| ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT ^|[eq]#12 {times} 10# ^|HDR
+| ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT ^|[eq]#12 {times} 12# ^|HDR
+endif::VK_EXT_texture_compression_astc_hdr[]
+|====
+
+ifndef::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_EXT_texture_compression_astc_hdr[]
+ifdef::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_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/registry/vulkan/appendices/credits.txt b/registry/vulkan/appendices/credits.txt
new file mode 100644
index 0000000..17d41bb
--- /dev/null
+++ b/registry/vulkan/appendices/credits.txt
@@ -0,0 +1,293 @@
+// Copyright 2015-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[credits]]
+= Credits (Informative)
+
+Vulkan 1.2 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.
+
+
+== 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)
+  * Aidan Fabius, Core Avionics & Industrial Inc.
+    (version 1.2)
+  * Alan Baker, Google (versions 1.1, 1.2)
+  * 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 (version 1.2)
+  * Alex Walters, Imagination Technologies (version 1.2)
+  * Alexander Galazin, Arm (versions 1.0, 1.1, 1.2)
+  * Allen Hux, Intel (version 1.0)
+  * Alon Or-bach, Samsung Electronics (versions 1.0, 1.1, 1.2) (WSI
+    technical sub-group chair)
+  * Anastasia Stulova, Arm (version 1.2)
+  * Andreas Vasilakis, Think Silicon (version 1.2)
+  * Andres Gomez, Igalia (version 1.1)
+  * Andrew Cox, Samsung Electronics (version 1.0)
+  * Andrew Garrard, Samsung Electronics (versions 1.0, 1.1, 1.2) (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 (version 1.2)
+  * Antoine Labour, Google (versions 1.0, 1.1)
+  * Aras Pranckevičius, Unity Technologies (version 1.0)
+  * Ashwin Kolhe, NVIDIA (version 1.0)
+  * Baldur Karlsson, Independent (versions 1.1, 1.2)
+  * 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)
+  * Bill Licea-Kane, Qualcomm Technologies, Inc.
+    (versions 1.0, 1.1)
+  * Blaine Kohl, Khronos (version 1.2)
+  * Boris Zanin, Mobica (version 1.2)
+  * Brent E. Insko, Intel (version 1.0)
+  * Brian Ellis, Qualcomm Technologies, Inc.
+    (version 1.0)
+  * Brian Paul, VMware (version 1.2)
+  * Caio Marcelo de Oliveira Filho, Intel (version 1.2)
+  * Cass Everitt, Oculus VR (versions 1.0, 1.1)
+  * Cemil Azizoglu, Canonical (version 1.0)
+  * Chad Versace, Google (versions 1.0, 1.1, 1.2)
+  * Chang-Hyo Yu, Samsung Electronics (version 1.0)
+  * Chia-I Wu, LunarG (version 1.0)
+  * Chris Frascati, Qualcomm Technologies, Inc.
+    (version 1.0)
+  * 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)
+  * 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)
+  * Daniel Johnston, Intel (versions 1.0, 1.1)
+  * Daniel Koch, NVIDIA (versions 1.0, 1.1, 1.2)
+  * Daniel Rakos, AMD (versions 1.0, 1.1, 1.2)
+  * 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)
+  * 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)
+  * David Wilkinson, AMD (version 1.2)
+  * David Yu, Pixar (version 1.0)
+  * Dejan Mircevski, Google (version 1.1)
+  * Dominik Witczak, AMD (versions 1.0, 1.1)
+  * Donald Scorgie, Imagination Technologies (version 1.2)
+  * Dzmitry Malyshau, Mozilla (versions 1.1, 1.2)
+  * Ed Hutchins, Oculus (version 1.2)
+  * Emily Stearns, Khronos (version 1.2)
+  * 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)
+  * Graham Connor, Imagination Technologies (version 1.0)
+  * Graham Sellers, AMD (versions 1.0, 1.1)
+  * Greg Fischer, LunarG (version 1.1)
+  * Hai Nguyen, Google (version 1.2)
+  * Hans-Kristian Arntzen, Arm (versions 1.1, 1.2)
+  * Henri Verbeet, Codeweavers (version 1.2)
+  * 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)
+  * James Hughes, Oculus VR (version 1.0)
+  * James Jones, NVIDIA (versions 1.0, 1.1, 1.2)
+  * James Riordon, Khronos (version 1.2)
+  * Jan Hermes, Continental Corporation (versions 1.0, 1.1)
+  * Jan-Harald Fredriksen, Arm (versions 1.0, 1.1, 1.2)
+  * Jason Ekstrand, Intel (versions 1.0, 1.1, 1.2)
+  * Jean-François Roy, Google (versions 1.1, 1.2)
+  * Jeff Bolz, NVIDIA (versions 1.0, 1.1, 1.2)
+  * Jeff Juliano, NVIDIA (versions 1.0, 1.1, 1.2)
+  * Jeff Leger, Qualcomm Technologies, Inc.
+    (version 1.1)
+  * Jeff Vigil, Samsung Electronics (versions 1.0, 1.1, 1.2)
+  * 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)
+  * Jesse Hall, Google (versions 1.0, 1.1, 1.2)
+  * Joe Davis, Samsung Electronics (version 1.1)
+  * Johannes van Waveren, Oculus VR (versions 1.0, 1.1)
+  * John Kessenich, Google (versions 1.0, 1.1, 1.2) (SPIR-V and GLSL for
+    Vulkan specification author)
+  * John McDonald, Valve Software (versions 1.0, 1.1, 1.2)
+  * John Zulauf, LunarG (versions 1.1, 1.2)
+  * Jon Ashburn, LunarG (version 1.0)
+  * Jon Leech, Independent (versions 1.0, 1.1, 1.2) (XML toolchain,
+    normative language, release wrangler)
+  * Jonas Gustavsson, Samsung Electronics (versions 1.0, 1.1)
+  * Jonas Meyer, Epic Games (version 1.2)
+  * Jonathan Hamilton, Imagination Technologies (version 1.0)
+  * Jordan Justen, Intel (version 1.1)
+  * 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)
+  * 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)
+  * Kris Rose, Khronos (version 1.2)
+  * Kristian Kristensen, Intel (versions 1.0, 1.1)
+  * Krzysztof Iwanicki, Samsung Electronics (version 1.0)
+  * Larry Seiler, Intel (version 1.0)
+  * Lauri Ilola, Nokia (version 1.1)
+  * Lei Zhang, Google (version 1.2)
+  * Lenny Komow, LunarG (versions 1.1, 1.2)
+  * Lionel Landwerlin, Intel (versions 1.1, 1.2)
+  * Liz Maitral, Khronos (version 1.2)
+  * Lutz Latta, Lucasfilm (version 1.0)
+  * Maciej Jesionowski, AMD (version 1.1)
+  * Mais Alnasser, AMD (version 1.1)
+  * Marcin Rogucki, Mobica (version 1.1)
+  * Maria Rovatsou, Codeplay Software Ltd.
+    (version 1.0)
+  * Mark Callow, Independent (versions 1.0, 1.1, 1.2)
+  * Mark Kilgard, NVIDIA (versions 1.1, 1.2)
+  * Mark Lobodzinski, LunarG (versions 1.0, 1.1, 1.2)
+  * Mark Young, LunarG (version 1.1)
+  * Markus Tavenrath, NVIDIA (version 1.1)
+  * Mateusz Przybylski, Intel (version 1.0)
+  * Mathias Heyer, NVIDIA (versions 1.0, 1.1)
+  * Mathias Schott, NVIDIA (versions 1.0, 1.1)
+  * Matt Netsch, Qualcomm Technologies, Inc.
+    (version 1.1)
+  * Matthäus Chajdas, AMD (versions 1.1, 1.2)
+  * Maurice Ribble, Qualcomm Technologies, Inc.
+    (versions 1.0, 1.1)
+  * Maxim Lukyanov, Samsung Electronics (version 1.0)
+  * 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 (version 1.0)
+  * 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)
+  * Minyoung Son, Samsung Electronics (version 1.0)
+  * Mitch Singer, AMD (versions 1.0, 1.1, 1.2)
+  * Mythri Venugopal, Samsung Electronics (version 1.0)
+  * Naveen Leekha, Google (version 1.0)
+  * Neil Henning, AMD (versions 1.0, 1.1, 1.2)
+  * Neil Hickey, Arm (version 1.2)
+  * Neil Trevett, NVIDIA (versions 1.0, 1.1, 1.2)
+  * 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)
+  * 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)
+  * Pierre Boudier, NVIDIA (versions 1.0, 1.1, 1.2)
+  * Pierre-Loup Griffais, Valve Software (versions 1.0, 1.1, 1.2)
+  * Piers Daniell, NVIDIA (versions 1.0, 1.1, 1.2)
+  * Piotr Bialecki, Intel (version 1.0)
+  * Prabindh Sundareson, Samsung Electronics (version 1.0)
+  * Pyry Haulos, Google (versions 1.0, 1.1) (Vulkan conformance test
+    subcommittee chair)
+  * Rajeev Rao, Qualcomm (version 1.2)
+  * Ralph Potter, Codeplay Software Ltd.
+    (versions 1.1, 1.2)
+  * Ray Smith, Arm (versions 1.0, 1.1, 1.2)
+  * Richard Huddy, Samsung Electronics (version 1.2)
+  * Rob Barris, NVIDIA (version 1.1)
+  * Rob Stepinski, Transgaming (version 1.0)
+  * Robert Simpson, Qualcomm Technologies, Inc.
+    (versions 1.0, 1.1)
+  * Rolando Caloca Olivares, Epic Games (versions 1.0, 1.1, 1.2)
+  * Roy Ju, Mediatek (version 1.0)
+  * Rufus Hamade, Imagination Technologies (version 1.0)
+  * Ruihao Zhang, Qualcomm Technologies, Inc.
+    (versions 1.1, 1.2)
+  * 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)
+  * Slawomir Cygan, Intel (versions 1.0, 1.1)
+  * Slawomir Grajewski, Intel (versions 1.0, 1.1)
+  * Sorel Bosan, AMD (version 1.1)
+  * Spencer Fricke, Samsung Electronics (version 1.2)
+  * 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)
+  * Stuart Smith, Imagination Technologies (versions 1.0, 1.1, 1.2)
+  * Tilmann Scheller, Samsung Electronics (version 1.1)
+  * Tim Foley, Intel (version 1.0)
+  * Timo Suoranta, AMD (version 1.0)
+  * Timothy Lottes, AMD (versions 1.0, 1.1)
+  * Tobias Hector, AMD (versions 1.0, 1.1, 1.2) (validity language and
+    toolchain)
+  * Tobin Ehlis, LunarG (version 1.0)
+  * Tom Olson, Arm (versions 1.0, 1.1, 1.2) (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)
+  * Victor Eruhimov, Unknown (version 1.1)
+  * Vincent Hindriksen, StreamHPC (version 1.2)
+  * Wayne Lister, Imagination Technologies (version 1.0)
+  * Wolfgang Engel, Unknown (version 1.1)
+  * Yanjun Zhang, VeriSilicon (versions 1.0, 1.1, 1.2)
+
+
+== 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 and 1.2 was
+provided by Khronos staff including Angela Cheng, Ann Thorsnes, Blaine Kohl,
+Dominic Agoro-Ombaka, Emily Stearns, Jeff Phillips, Lisie Aartsen, and Liz
+Maitral; and by Alex Crabb 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, webmaster of Khronos.org
+and OpenGL.org.
+
diff --git a/registry/vulkan/appendices/extensions.txt b/registry/vulkan/appendices/extensions.txt
new file mode 100644
index 0000000..449b054
--- /dev/null
+++ b/registry/vulkan/appendices/extensions.txt
@@ -0,0 +1,63 @@
+// Copyright 2015-2021 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 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
+
+https://www.khronos.org/registry/vulkan/
+
+and allows generating versions of the Specification incorporating different
+extensions.
+
+Most of the content previously in this appendix does not specify *use* of
+specific Vulkan extensions and layers, but rather specifies the processes by
+which extensions and layers are created.
+As of version 1.0.21 of the Vulkan Specification, this content has been
+migrated to the <<vulkan-styleguide, Vulkan Documentation and Extensions>>
+document.
+Authors creating extensions and layers must: follow the mandatory procedures
+in that document.
+
+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.
+  * Core API + all registered and published Khronos (`KHR`) extensions.
+  * 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.
+
+[NOTE]
+.Note
+====
+As of the initial Vulkan 1.1 public release, the `KHX` author ID is no
+longer used.
+All `KHX` extensions have been promoted to `KHR` status.
+Previously, this author ID was used to indicate that an extension was
+experimental, and is being considered for standardization in future `KHR` or
+core Vulkan API versions.
+We no longer use this mechanism for exposing experimental functionality.
+
+Some vendors may use an alternate author ID ending in `X` for some of their
+extensions.
+The exact meaning of such an author ID is defined by each vendor, and may
+not be equivalent to `KHX`, but it is likely to indicate a lesser degree of
+interface stability than a non-`X` extension from the same vendor.
+====
+
+include::{generated}/meta/current_extensions_appendix.txt[]
+include::{generated}/meta/provisional_extensions_appendix.txt[]
+include::{generated}/meta/deprecated_extensions_appendix.txt[]
diff --git a/registry/vulkan/appendices/glossary.txt b/registry/vulkan/appendices/glossary.txt
new file mode 100644
index 0000000..9a5d1b6
--- /dev/null
+++ b/registry/vulkan/appendices/glossary.txt
@@ -0,0 +1,1838 @@
+// Copyright 2015-2021 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_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_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
+    <<pipeline-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)::
+    An image may: contain multiple kinds, or 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 may: 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, using the flink:vkBindImageMemory
+    command for non-sparse image objects, 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 that
+    controls 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 that contains only variables decorated with
+    built-in decorations, and is used to match against other shader stages.
+
+Clip Coordinates::
+    The homogeneous coordinate space that vertex positions (code:Position
+    decoration) are written in by
+    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>>.
+
+Clip Distance::
+    A built-in output from
+    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>> that defines 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_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.
+
+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 miplevels that can be provided for an image, from the
+    largest application specified miplevel size down to the _minimum
+    miplevel size_.
+    See <<resources-image-miplevel-sizing, Image Miplevel 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 that define 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[]
+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[]
+
+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
+    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>> that defines 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.
+
+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 that defines 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.
+
+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[]
+    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[]
+    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>>.
+
+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.
+
+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.
+
+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[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.
+
+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 and layer 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 that controls how the contents are interpreted.
+    Represented by a slink:VkImageView object.
+
+Immutable Sampler::
+    A sampler descriptor provided at descriptor set layout creation time,
+    and that is used for that binding in all descriptor sets allocated from
+    the layout, and 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[]
+    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[]
+    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_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_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[]
+
+[[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[]
+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.
+endif::VK_NV_mesh_shader[]
+
+ifdef::VK_NV_mesh_shader[]
+Mesh Tasks Drawing Commands::
+    _Drawing commands_ which create shader invocations organized in
+    workgroups for drawing mesh tasks.
+    Includes flink:vkCmdDrawMeshTasksNV, flink:vkCmdDrawMeshTasksIndirectNV,
+    and flink:vkCmdDrawMeshTasksIndirectCountNV.
+endif::VK_NV_mesh_shader[]
+
+Minimum Miplevel Size::
+    The smallest size that is permitted for a miplevel.
+    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-miplevel-sizing, Image Miplevel 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[]
+
+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 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,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 that controls 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.
+
+Pipeline Layout::
+    An object that defines 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 <<pipeline-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::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 required 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 accessed in 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,external
+    formats>> the elink:VkFormatFeatureFlagBits is provided by the
+    implementation.
+endif::VK_ANDROID_external_memory_android_hardware_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[]
+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[]
+
+Primitive Topology::
+    State that controls 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 that specifies 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[]
+
+Recording State (Command Buffer)::
+    A command buffer that is ready to record commands.
+    See also Initial State and Executable State.
+
+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 that controls 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 which
+    contains 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::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 that define 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.
+    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) that
+    define how texel coordinates are interpreted in an image or a specific
+    mipmap level of an 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
+    <<pipeline-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[]
+
+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_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
+
+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
+
+
+[[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/registry/vulkan/appendices/invariance.txt b/registry/vulkan/appendices/invariance.txt
new file mode 100644
index 0000000..647a5f9
--- /dev/null
+++ b/registry/vulkan/appendices/invariance.txt
@@ -0,0 +1,241 @@
+// Copyright 2015-2021 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/registry/vulkan/appendices/memorymodel.txt b/registry/vulkan/appendices/memorymodel.txt
new file mode 100644
index 0000000..d67ab3d
--- /dev/null
+++ b/registry/vulkan/appendices/memorymodel.txt
@@ -0,0 +1,1207 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[memory-model]]
+= 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://www.khronos.org/registry/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.
+Non-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 operatons, 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
+
+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 signalled by that
+queue, and the wait happens-before the call to flink:vkFreeMemory on the
+host.
+====
+
+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/registry/vulkan/appendices/spirvenv.txt b/registry/vulkan/appendices/spirvenv.txt
new file mode 100755
index 0000000..b259bf1
--- /dev/null
+++ b/registry/vulkan/appendices/spirvenv.txt
@@ -0,0 +1,1775 @@
+// Copyright 2015-2021 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
+
+A Vulkan
+ifdef::VK_VERSION_1_2[]
+1.2 implementation must: support the 1.0, 1.1, 1.2, 1.3, 1.4, and 1.5
+versions
+endif::VK_VERSION_1_2[]
+ifndef::VK_VERSION_1_2[]
+ifdef::VK_VERSION_1_1[]
+1.1 implementation must: support the 1.0, 1.1, 1.2, and 1.3 versions
+endif::VK_VERSION_1_1[]
+ifndef::VK_VERSION_1_1[]
+1.0 implementation must: support the 1.0 version
+endif::VK_VERSION_1_1[]
+endif::VK_VERSION_1_2[]
+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 passed into flink:vkCreateShaderModule 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.
+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:
+
+* 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.txt[]
+|====
+
+The application must: not pass a SPIR-V module containing any of the
+following to flink:vkCreateShaderModule:
+
+  * 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.
+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:
+
+* 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.txt[]
+|====
+
+
+[[spirvenv-module-validation]]
+== Validation Rules within a Module
+
+A SPIR-V module passed to flink:vkCreateShaderModule must: conform to the
+following rules:
+
+
+[[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 *Logical* or *PhysicalStorageBuffer64* addressing model must: be
+    selected
+  * [[VUID-{refpage}-None-04636]]
+    *Scope* for execution must: be limited to *Workgroup* or *Subgroup*
+  * [[VUID-{refpage}-None-04637]]
+    If the *Scope* for execution is *Workgroup*, then it must: only be used
+    in the task, mesh, tessellation control, or compute execution models
+  * [[VUID-{refpage}-None-04638]]
+    *Scope* for memory must: be limited to *Device*, *QueueFamily*,
+    *Workgroup*, *ShaderCallKHR*, *Subgroup*, or *Invocation*
+  * [[VUID-{refpage}-None-04639]]
+    If the *Scope* for memory is *Workgroup*, then it must: only be used in
+    the task, mesh, or compute execution models
+  * [[VUID-{refpage}-None-04640]]
+    If the *Scope* for memory is *ShaderCallKHR*, then it must: only be used
+    in ray generation, intersection, closest hit, any-hit, miss, and
+    callable execution models
+  * [[VUID-{refpage}-None-04641]]
+    If the *Scope* for memory is *Invocation*, then memory semantics must:
+    be *None*
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-None-04642]]
+    *Scope* for <<shaders-group-operations,group operations>> must: be
+    limited to *Subgroup*
+endif::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-None-04643]]
+    *Storage Class* must: be limited to *UniformConstant*, *Input*,
+    *Uniform*, *Output*, *Workgroup*, *Private*, *Function*, *PushConstant*,
+    *Image*, *StorageBuffer*, *RayPayloadKHR*, *IncomingRayPayloadKHR*,
+    *HitAttributeKHR*, *CallableDataKHR*, *IncomingCallableDataKHR*,
+    *ShaderRecordBufferKHR*, or *PhysicalStorageBuffer*
+  * [[VUID-{refpage}-None-04644]]
+    If the *Storage Class* is *Output*, then it must: not be used in the
+    *GlCompute*, *RayGenerationKHR*, *IntersectionKHR*, *AnyHitKHR*,
+    *ClosestHitKHR*, *MissKHR*, or *CallableKHR* execution models
+  * [[VUID-{refpage}-None-04645]]
+    If the *Storage Class* is *Workgroup*, then it must: only be used in the
+    task, mesh, or compute execution models
+  * [[VUID-{refpage}-OpAtomicStore-04730]]
+    code:OpAtomicStore must: not use *Acquire*, *AcquireRelease*, or
+    *SequentiallyConsistent* memory semantics
+  * [[VUID-{refpage}-OpAtomicLoad-04731]]
+    code:OpAtomicLoad must: not use *Release*, *AcquireRelease*, or
+    *SequentiallyConsistent* memory semantics
+  * [[VUID-{refpage}-OpMemoryBarrier-04732]]
+    code:OpMemoryBarrier must: use one of *Acquire*, *Release*,
+    *AcquireRelease*, or *SequentiallyConsistent* memory semantics
+  * [[VUID-{refpage}-OpMemoryBarrier-04733]]
+    code:OpMemoryBarrier must: include at least one storage class
+  * [[VUID-{refpage}-OpControlBarrier-04650]]
+    If the semantics for code:OpControlBarrier includes one of *Acquire*,
+    *Release*, *AcquireRelease*, or *SequentiallyConsistent* memory
+    semantics, then it must: include at least one storage class
+  * [[VUID-{refpage}-OpVariable-04651]]
+    Any code:OpVariable with an code:Initializer operand must: have
+    *Output*, *Private*, *Function*, or *Workgroup* as its *Storage Class*
+    operand
+  * [[VUID-{refpage}-OpVariable-04734]]
+    Any code:OpVariable with an code:Initializer operand and *Workgroup* as
+    its *Storage Class* operand must: use code:OpConstantNull as the
+    initializer
+  * [[VUID-{refpage}-OpReadClockKHR-04652]]
+    *Scope* for code:OpReadClockKHR must: be limited to *Subgroup* or
+    *Device*
+  * [[VUID-{refpage}-OriginLowerLeft-04653]]
+    The code:OriginLowerLeft execution mode must: not be used; fragment
+    entry points must: declare code:OriginUpperLeft
+  * [[VUID-{refpage}-PixelCenterInteger-04654]]
+    The code:PixelCenterInteger execution mode must: not be used (pixels are
+    always centered at half-integer coordinates)
+  * [[VUID-{refpage}-UniformConstant-04655]]
+    Any variable in the code:UniformConstant storage class must: be typed as
+    either code:OpTypeImage, code:OpTypeSampler, code:OpTypeSampledImage,
+    code:OpTypeAccelerationStructureKHR, or an array of one of these types
+  * [[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}-Image-04965]]
+    The converted bit width, signedness, and numeric 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-04661]]
+    Objects of types code:OpTypeImage, code:OpTypeSampler,
+    code:OpTypeSampledImage, and arrays of these types must: not be stored
+    to or modified
+  * [[VUID-{refpage}-Offset-04662]]
+    Any image operation must: use at most one of the code:Offset,
+    code:ConstOffset, and code:ConstOffsets image operands
+  * [[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 must: not consume an image whose `Dim` is 3D
+  * [[VUID-{refpage}-OpTypeAccelerationStructureKHR-04665]]
+     Objects of types code:OpTypeAccelerationStructureKHR and arrays of this
+     type must: not be stored to or modified
+  * [[VUID-{refpage}-OpReportIntersectionKHR-04666]]
+    The value of the "`Hit Kind`" operand of code:OpReportIntersectionKHR
+    must: be in the range [eq]#[0,127]#
+  * [[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-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]]
+    The code:Location decorations must: be used on an code:OpVariable with a
+    structure type that is not a block
+  * [[VUID-{refpage}-Location-04918]]
+    The code:Location decorations must: not be used on the members of
+    code:OpVariable with a structure type that is decorated with
+    code:Location
+  * [[VUID-{refpage}-Location-04919]]
+    The code:Location decorations must: be used on each member of
+    code:OpVariable with a structure type that is a block not decorated with
+    code:Location
+  * [[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 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 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 used with any type that is not
+    a scalar or vector
+  * [[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 storage class
+  * [[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}-Flat-04744]]
+    Any variable with integer or double-precision floating-point type and
+    with code:Input storage class 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
+    <<pipeline-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}-FPRoundingMode-04676]]
+    The code:FPRoundingMode decoration must: only be used for a width-only
+    conversion instruction whose only uses are code:Object operands of
+    code:OpStore instructions storing through a pointer to a 16-bit
+    floating-point object in the code:StorageBuffer,
+    code:PhysicalStorageBuffer, code:Uniform, or code:Output storage class
+  * [[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 storage class, code:Invariant used on an
+    code:Input storage class 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 an
+     code:OpTypeStruct that is in the code:StorageBuffer or
+     code:PhysicalStorageBuffer storage class decorated as code:Block, or
+     that is in the code:Uniform storage class decorated as code:BufferBlock
+  * [[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 storage classes, c) _V_ is a non-Block
+    variable in the code:Workgroup storage class, 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 execution mode, 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 *Reduce*, *InclusiveScan*, or *ExclusiveScan*
+  * [[VUID-{refpage}-None-04686]]
+    The _Pointer_ operand of all atomic instructions must: have a *Storage
+    Class* limited to *Uniform*, *Workgroup*, *Image*, *StorageBuffer*, or
+    *PhysicalStorageBuffer*
+  * [[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 that specifies 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 storage class must: only be used in ray generation,
+    closest hit or miss shaders
+  * [[VUID-{refpage}-IncomingRayPayloadKHR-04699]]
+    code:IncomingRayPayloadKHR storage class 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
+    storage class in the input interface of an entry point
+  * [[VUID-{refpage}-HitAttributeKHR-04701]]
+    code:HitAttributeKHR storage class 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
+    storage class in the input interface of an entry point
+  * [[VUID-{refpage}-HitAttributeKHR-04703]]
+    A variable with code:HitAttributeKHR storage class must: only be written
+    to in an intersection shader
+  * [[VUID-{refpage}-CallableDataKHR-04704]]
+    code:CallableDataKHR storage class must: only be used in ray generation,
+    closest hit, miss, and callable shaders
+  * [[VUID-{refpage}-IncomingCallableDataKHR-04705]]
+    code:IncomingCallableDataKHR storage class must: only be used in
+    callable shaders
+  * [[VUID-{refpage}-IncomingCallableDataKHR-04706]]
+    There must: be at most one variable with the
+    code:IncomingCallableDataKHR storage class in the input interface of an
+    entry point
+  * [[VUID-{refpage}-Base-04707]]
+    The code:Base operand of code:OpPtrAccessChain must: point to one of the
+    following: *Workgroup*, if code:VariablePointers is enabled;
+    *StorageBuffer*, if code:VariablePointers or
+    code:VariablePointersStorageBuffer is enabled; *PhysicalStorageBuffer*,
+    if the code:PhysicalStorageBuffer64 addressing model is enabled
+  * [[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 storage class of
+    code:PhysicalStorageBuffer
+  * [[VUID-{refpage}-None-04745]]
+    All variables with a storage class of *PushConstant* declared as an
+    array must: only be accessed by dynamically uniform indices
+  * [[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
+****
+--
+
+[[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, *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, *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_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-OpTypeImage-06269]]
+    If
+    <<features-shaderStorageImageWriteWithoutFormat,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,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.
+  * [[VUID-{refpage}-BuiltIn-06271]]
+    Any code:BuiltIn decoration that corresponds only to Vulkan features or
+endif::VK_KHR_format_feature_flags2[]
+    extensions that have not been enabled must: not be used.
+  * [[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}-Fragment-06427]]
+    When blending is enabled and one of the dual source blend modes is in
+    use, the maximum number of output attachments written to in the
+    code:Fragment {ExecutionModel} must: be less than or equal to
+    <<limits-maxFragmentDualSrcAttachments,pname:maxFragmentDualSrcAttachments>>
+  * [[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}-OpTypeRuntimeArray-06273]]
+    code:OpTypeRuntimeArray must: only be used for an array of variables
+    with storage class code:Uniform, code:StorageBuffer, or
+    code:UniformConstant, or for the outermost dimension of an array of
+    arrays of such variables if the
+    <<features-runtimeDescriptorArray,runtimeDescriptorArray>> feature is
+    enabled,
+  * [[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,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,code: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,code: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,shaderBufferInt64Atomics>> must: be
+    enabled for 64-bit integer atomic operations to be supported on a
+    _Pointer_ with a *Storage Class* of *StorageBuffer* or *Uniform*.
+  * [[VUID-{refpage}-None-06279]]
+    <<features-shaderSharedInt64Atomics,shaderSharedInt64Atomics>> must: be
+    enabled for 64-bit integer atomic operations to be supported on a
+    _Pointer_ with a *Storage Class* of *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,shaderBufferFloat32Atomics>>, or
+    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
+    or <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>,
+    or
+    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>
+    must: be enabled for floating-point atomic operations to be supported on
+    a _Pointer_ with a *Storage Class* of *StorageBuffer*.
+  * [[VUID-{refpage}-None-06281]]
+    <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>, or
+    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
+    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
+    or
+    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>
+    must: be enabled for floating-point atomic operations to be supported on
+    a _Pointer_ with a *Storage Class* of *Workgroup*.
+  * [[VUID-{refpage}-None-06282]]
+    <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>> or
+    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>
+    must: be enabled for 32-bit floating-point atomic operations to be
+    supported on a _Pointer_ with a *Storage Class* of *Image*.
+  * [[VUID-{refpage}-None-06283]]
+    <<features-sparseImageFloat32Atomics,sparseImageFloat32Atomics>> or
+    <<features-sparseImageFloat32AtomicAdd,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,shaderBufferFloat32Atomics>>, or
+    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
+    or <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>,
+    or
+    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
+    or
+    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16Atomics>>,
+    or
+    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicAdd>>,
+    or
+    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicMinMax>>,
+    or
+    <<features-shaderBufferFloat32AtomicMinMax,shaderBufferFloat32AtomicMinMax>>,
+    or
+    <<features-shaderBufferFloat64AtomicMinMax,shaderBufferFloat64AtomicMinMax>>
+    must: be enabled for floating-point atomic operations to be supported on
+    a _Pointer_ with a *Storage Class* of *StorageBuffer*.
+  * [[VUID-{refpage}-None-06285]]
+    <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>, or
+    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
+    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
+    or
+    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>,
+    or
+    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16Atomics>>,
+    or
+    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16AtomicAdd>>,
+    or
+    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16AtomicMinMax>>,
+    or
+    <<features-shaderSharedFloat32AtomicMinMax,shaderSharedFloat32AtomicMinMax>>,
+    or
+    <<features-shaderSharedFloat64AtomicMinMax,shaderSharedFloat64AtomicMinMax>>
+    must: be enabled for floating-point atomic operations to be supported on
+    a _Pointer_ with a *Storage Class* of *Workgroup*.
+  * [[VUID-{refpage}-None-06286]]
+    <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
+    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>, or
+    <<features-shaderImageFloat32AtomicMinMax,shaderImageFloat32AtomicMinMax>>
+    must: be enabled for 32-bit floating-point atomic operations to be
+    supported on a _Pointer_ with a *Storage Class* of *Image*.
+  * [[VUID-{refpage}-None-06287]]
+    <<features-sparseImageFloat32Atomics,sparseImageFloat32Atomics>>, or
+    <<features-sparseImageFloat32AtomicAdd,sparseImageFloat32AtomicAdd>>, or
+    <<features-sparseImageFloat32AtomicMinMax,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,shaderImageInt64Atomics>> must: be
+    enabled for 64-bit integer atomic operations to be supported on a
+    _Pointer_ with a *Storage Class* of *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 execution mode 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 execution mode 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 execution mode 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 execution mode 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
+    sname: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
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreamDataSize
+  * [[VUID-{refpage}-OpEmitStreamVertex-06310]]
+    The Stream value to code:OpEmitStreamVertex and
+    code:OpEndStreamPrimitive must: be less than
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-{refpage}-transformFeedbackStreamsLinesTriangles-06311]]
+    If the geometry shader emits to more than one vertex stream and
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackStreamsLinesTriangles
+    is ename:VK_FALSE, then execution mode must: be code:OutputPoints
+  * [[VUID-{refpage}-Stream-06312]]
+    The stream number value to code:Stream must: be less than
+    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
+  * [[VUID-{refpage}-XfbStride-06313]]
+    The XFB Stride value to code:XfbStride must: be less than or equal to
+    sname: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[]
+  * [[VUID-{refpage}-DescriptorSet-06323]]
+    code:DescriptorSet and code:Binding decorations must: obey the
+    constraints on storage class, 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_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 storage class of *StorageBuffer*, *ShaderRecordBufferKHR*, or
+    *PhysicalStorageBuffer*.
+  * [[VUID-{refpage}-uniformAndStorageBuffer8BitAccess-06329]]
+    If
+    <<features-uniformAndStorageBuffer8BitAccess,pname:uniformAndStorageBuffer8BitAccess>>
+    is ename:VK_FALSE, then objects in the *Uniform* storage class with the
+    *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 storage class of *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 storage class of *StorageBuffer*,
+    *ShaderRecordBufferKHR*, or *PhysicalStorageBuffer*.
+  * [[VUID-{refpage}-uniformAndStorageBuffer16BitAccess-06332]]
+    If
+    <<features-uniformAndStorageBuffer16BitAccess,pname:uniformAndStorageBuffer16BitAccess>>
+    is ename:VK_FALSE, then objects in the *Uniform* storage class with the
+    *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 storage class of *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 storage class of *Input* or
+    *Output*.
+endif::VK_KHR_16bit_storage[]
+ifdef::VK_EXT_shader_atomic_float[]
+ifndef::VK_EXT_shader_atomic_float2[]
+  * [[VUID-{refpage}-None-06335]]
+    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
+    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
+    or <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>,
+    or
+    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
+    or <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
+    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>
+    must: be enabled for 32-bit floating point atomic operations
+  * [[VUID-{refpage}-None-06336]]
+    <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>, or
+    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
+    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
+    or
+    <<features-shaderSharedFloat64AtomicAdd,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,shaderBufferFloat16Atomics>>, or
+    <<features-shaderBufferFloat16AtomicAdd,shaderBufferFloat16AtomicAdd>>,
+    or
+    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicMinMax>>,
+    or <<features-shaderSharedFloat16Atomics,shaderSharedFloat16Atomics>>,
+    or
+    <<features-shaderSharedFloat16AtomicAdd,shaderSharedFloat16AtomicAdd>>,
+    or
+    <<features-shaderSharedFloat16AtomicMinMax,shaderSharedFloat16AtomicMinMax>>
+    must: be enabled for 16-bit floating point atomic operations
+  * [[VUID-{refpage}-None-06338]]
+    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
+    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
+    or <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>,
+    or
+    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
+    or <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
+    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>> or
+    <<features-shaderBufferFloat32AtomicMinMax,shaderBufferFloat32AtomicMinMax>>,
+    or
+    <<features-shaderSharedFloat32AtomicMinMax,shaderSharedFloat32AtomicMinMax>>,
+    or
+    <<features-shaderImageFloat32AtomicMinMax,shaderImageFloat32AtomicMinMax>>
+    must: be enabled for 32-bit floating point atomic operations
+  * [[VUID-{refpage}-None-06339]]
+    <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>, or
+    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
+    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
+    or
+    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>,
+    or
+    <<features-shaderBufferFloat64AtomicMinMax,shaderBufferFloat64AtomicMinMax>>,
+    or
+    <<features-shaderSharedFloat64AtomicMinMax,shaderSharedFloat64AtomicMinMax>>,
+    must: be enabled for 64-bit floating point atomic operations
+endif::VK_EXT_shader_atomic_float2[]
+  * [[VUID-{refpage}-NonWritable-06340]]
+    If <<features-fragmentStoresAndAtomics, 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,
+    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.
+  * [[VUID-{refpage}-None-06342]]
+    If <<limits-subgroupQuadOperationsInAllStages,
+    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,
+    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:
+    {empty}:: [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:
+    {empty}:: [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:
+    {empty}:: [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:
+    {empty}:: [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}-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[]
+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-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>>.
+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[]
+  * [[VUID-{refpage}-x-06429]]
+    The pname:x size in code:LocalSize or code:LocalSizeId must: be less
+    than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]
+  * [[VUID-{refpage}-y-06430]]
+    The pname:y size in code:LocalSize or code:LocalSizeId must: be less
+    than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]
+  * [[VUID-{refpage}-z-06431]]
+    The pname:z size in code:LocalSize or code:LocalSizeId must: be less
+    than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]
+  * [[VUID-{refpage}-x-06432]]
+    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
+    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupInvocations
+ifndef::VK_KHR_maintenance4[]
+  * [[VUID-{refpage}-LocalSizeId-06433]]
+    The execution mode code:LocalSizeId must: not be used
+endif::VK_KHR_maintenance4[]
+ifdef::VK_KHR_maintenance4[]
+  * [[VUID-{refpage}-LocalSizeId-06434]]
+    if execution mode code:LocalSizeId is used, <<features-maintenance4,
+    pname:maintenance4>> must: be enabled
+endif::VK_KHR_maintenance4[]
+ifdef::VK_KHR_zero_initialize_workgroup_memory[]
+  * [[VUID-{refpage}-shaderZeroInitializeWorkgroupMemory-06372]]
+    If
+    <<features-shaderZeroInitializeWorkgroupMemory,pname:shaderZeroInitializeWorkgroupMemory>>
+    is not enabled, any code:OpVariable with *Workgroup* as its *Storage
+    Class* must: not have an code:Initializer operand
+endif::VK_KHR_zero_initialize_workgroup_memory[]
+ifndef::VK_KHR_zero_initialize_workgroup_memory[]
+  * [[VUID-{refpage}-OpVariable-06373]]
+    Any code:OpVariable with *Workgroup* as its *Storage Class* must: not
+    have an code:Initializer operand
+endif::VK_KHR_zero_initialize_workgroup_memory[]
+ifdef::VK_KHR_workgroup_memory_explicit_layout[]
+  * [[VUID-{refpage}-workgroupMemoryExplicitLayout8BitAccess-06374]]
+    If
+    <<features-workgroupMemoryExplicitLayout8BitAccess,pname:workgroupMemoryExplicitLayout8BitAccess>>
+    is ename:VK_FALSE, objects in the code:Workgroup storage class with the
+    code:Block decoration must: not contain 8-bit integer members.
+  * [[VUID-{refpage}-workgroupMemoryExplicitLayout16BitAccess-06375]]
+    If
+    <<features-workgroupMemoryExplicitLayout16BitAccess,pname:workgroupMemoryExplicitLayout16BitAccess>>
+    is ename:VK_FALSE, objects in the code:Workgroup storage class with the
+    code:Block decoration must: not contain 16-bit integer or 16-bit
+    floating-point members.
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+  * [[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,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,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,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,maxTexelOffset>>
+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 execution mode 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[]
+****
+--
+
+[[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
+    execution mode, then NaNs, infinities, and the sign of zero must: not be
+    ignored.
+  ** The following core SPIR-V instructions must: respect the
+     code:SignedZeroInfNanPreserve execution mode: 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 execution mode must: also be respected by code:OpLoad except for
+     loads from the code:Input storage class in the fragment shader stage
+     with the floating-point result type.
+     Other SPIR-V instructions may: also respect the
+     code:SignedZeroInfNanPreserve execution mode.
+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
+     execution mode then for the affected instuctions 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 execution mode: 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 execution mode: 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 operations is defined either in terms of rounding, 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 execution mode.
+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 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 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 execution mode,
+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 \frac{\pi}{180}].
+| code:degrees(x)
+2+a| Inherited from latexmath:[x \times \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:[\frac{x}{length(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[]
+
+[[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                 | 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
+|===
+
+[[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
+|code:Unknown           |Any
+|code:Rgba32f           |ename:VK_FORMAT_R32G32B32A32_SFLOAT
+|code:Rgba16f           |ename:VK_FORMAT_R16G16B16A16_SFLOAT
+|code:R32f              |ename:VK_FORMAT_R32_SFLOAT
+|code:Rgba8             |ename:VK_FORMAT_R8G8B8A8_UNORM
+|code:Rgba8Snorm        |ename:VK_FORMAT_R8G8B8A8_SNORM
+|code:Rg32f             |ename:VK_FORMAT_R32G32_SFLOAT
+|code:Rg16f             |ename:VK_FORMAT_R16G16_SFLOAT
+|code:R11fG11fB10f      |ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
+|code:R16f              |ename:VK_FORMAT_R16_SFLOAT
+|code:Rgba16            |ename:VK_FORMAT_R16G16B16A16_UNORM
+|code:Rgb10A2           |ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
+|code:Rg16              |ename:VK_FORMAT_R16G16_UNORM
+|code:Rg8               |ename:VK_FORMAT_R8G8_UNORM
+|code:R16               |ename:VK_FORMAT_R16_UNORM
+|code:R8                |ename:VK_FORMAT_R8_UNORM
+|code:Rgba16Snorm       |ename:VK_FORMAT_R16G16B16A16_SNORM
+|code:Rg16Snorm         |ename:VK_FORMAT_R16G16_SNORM
+|code:Rg8Snorm          |ename:VK_FORMAT_R8G8_SNORM
+|code:R16Snorm          |ename:VK_FORMAT_R16_SNORM
+|code:R8Snorm           |ename:VK_FORMAT_R8_SNORM
+|code:Rgba32i           |ename:VK_FORMAT_R32G32B32A32_SINT
+|code:Rgba16i           |ename:VK_FORMAT_R16G16B16A16_SINT
+|code:Rgba8i            |ename:VK_FORMAT_R8G8B8A8_SINT
+|code:R32i              |ename:VK_FORMAT_R32_SINT
+|code:Rg32i             |ename:VK_FORMAT_R32G32_SINT
+|code:Rg16i             |ename:VK_FORMAT_R16G16_SINT
+|code:Rg8i              |ename:VK_FORMAT_R8G8_SINT
+|code:R16i              |ename:VK_FORMAT_R16_SINT
+|code:R8i               |ename:VK_FORMAT_R8_SINT
+|code:Rgba32ui          |ename:VK_FORMAT_R32G32B32A32_UINT
+|code:Rgba16ui          |ename:VK_FORMAT_R16G16B16A16_UINT
+|code:Rgba8ui           |ename:VK_FORMAT_R8G8B8A8_UINT
+|code:R32ui             |ename:VK_FORMAT_R32_UINT
+|code:Rgb10a2ui         |ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
+|code:Rg32ui            |ename:VK_FORMAT_R32G32_UINT
+|code:Rg16ui            |ename:VK_FORMAT_R16G16_UINT
+|code:Rg8ui             |ename:VK_FORMAT_R8G8_UINT
+|code:R16ui             |ename:VK_FORMAT_R16_UINT
+|code:R8ui              |ename:VK_FORMAT_R8_UINT
+|code:R64i              |ename:VK_FORMAT_R64_SINT
+|code:R64ui             |ename:VK_FORMAT_R64_UINT
+|====
diff --git a/registry/vulkan/appendices/versions.txt b/registry/vulkan/appendices/versions.txt
new file mode 100644
index 0000000..14ffc87
--- /dev/null
+++ b/registry/vulkan/appendices/versions.txt
@@ -0,0 +1,311 @@
+// Copyright 2015-2021 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[]
+
+
+ifdef::VK_VERSION_1_2[]
+[[versions-1.2]]
+== Version 1.2
+
+// Unfortunately we can't 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']
+--
+Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a
+number of key extensions into the core API:
+
+include::{generated}/meta/promoted_extensions_VK_VERSION_1_2.txt[]
+
+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.txt[]
+--
+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::{generated}/meta/promoted_extensions_VK_VERSION_1_2.txt[]
+
+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,
+code: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,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,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`
+
+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,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,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,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,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,shaderOutputViewportIndex>>
+    feature which indicates that the
+    <<spirvenv-capabilities-table-ShaderViewportIndex,code:ShaderViewportIndex>>
+    capability can be used.
+  * The <<features-shaderOutputLayer,shaderOutputLayer>> feature which
+    indicates that the
+    <<spirvenv-capabilities-table-ShaderLayer,code:ShaderLayer>> capability
+    can be used.
+  * The <<features-subgroupBroadcastDynamicId,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,drawIndirectCount>> feature which
+    indicates whether the flink:vkCmdDrawIndirectCount and
+    flink:vkCmdDrawIndexedIndirectCount functions can be used.
+  * The <<features-descriptorIndexing,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,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,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.txt[]
+
+endif::VK_VERSION_1_2[]
+
+
+ifdef::VK_VERSION_1_1[]
+[[versions-1.1]]
+== Version 1.1
+
+// Unfortunately we can't 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']
+--
+Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a
+number of key extensions into the core API:
+
+include::{generated}/meta/promoted_extensions_VK_VERSION_1_1.txt[]
+
+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.txt[]
+--
+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::{generated}/meta/promoted_extensions_VK_VERSION_1_1.txt[]
+
+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.txt[]
+
+endif::VK_VERSION_1_1[]
+
+
+[[versions-1.0]]
+== Version 1.0
+
+[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']
+--
+Vulkan Version 1.0 was the initial release of the Vulkan API.
+
+include::{generated}/interfaces/VK_VERSION_1_0.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_AMD_buffer_marker/copies.txt b/registry/vulkan/chapters/VK_AMD_buffer_marker/copies.txt
new file mode 100644
index 0000000..bf4011e
--- /dev/null
+++ b/registry/vulkan/chapters/VK_AMD_buffer_marker/copies.txt
@@ -0,0 +1,158 @@
+// Copyright (c) 2018-2020 Advanced Micro Devices, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[copies-buffer-markers]]
+== Buffer Markers
+
+ifdef::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.txt[]
+
+  * 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:vkCmdWriteTimestamp2KHR, 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.txt[]
+  * [[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.txt[]
+--
+endif::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.txt[]
+
+  * 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.txt[]
+  * [[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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_AMD_pipeline_compiler_control.txt b/registry/vulkan/chapters/VK_AMD_pipeline_compiler_control.txt
new file mode 100644
index 0000000..2edf1e4
--- /dev/null
+++ b/registry/vulkan/chapters/VK_AMD_pipeline_compiler_control.txt
@@ -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.txt)
+
+[[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+--
+
+[open,refpage='VkPipelineCompilerControlFlagsAMD',desc='Bitmask of VkPipelineCompilerControlFlagBitsAMD',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCompilerControlFlagsAMD.txt[]
+
+tname:VkPipelineCompilerControlFlagsAMD is a bitmask type for setting a mask
+of zero or more elink:VkPipelineCompilerControlFlagBitsAMD.
+--
diff --git a/registry/vulkan/chapters/VK_AMD_shader_info.txt b/registry/vulkan/chapters/VK_AMD_shader_info.txt
new file mode 100644
index 0000000..527db55
--- /dev/null
+++ b/registry/vulkan/chapters/VK_AMD_shader_info.txt
@@ -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.txt)
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+    dissassembly 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.txt b/registry/vulkan/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.txt
new file mode 100644
index 0000000..2df66f1
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_acquire_drm_display/acquire_drm_display.txt
@@ -0,0 +1,62 @@
+// Copyright 2018-2021 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.txt b/registry/vulkan/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.txt
new file mode 100644
index 0000000..535547e
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_acquire_xlib_display/acquire_xlib_display.txt
@@ -0,0 +1,61 @@
+// Copyright 2018-2021 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.txt[]
+
+  * 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 approriate 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt b/registry/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt
new file mode 100644
index 0000000..9182914
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_blend_operation_advanced/advanced_blend.txt
@@ -0,0 +1,819 @@
+// Copyright 2018-2021 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+  * 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/registry/vulkan/chapters/VK_EXT_debug_marker.txt b/registry/vulkan/chapters/VK_EXT_debug_marker.txt
new file mode 100644
index 0000000..105da2c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_debug_marker.txt
@@ -0,0 +1,224 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the Debugging chapter (debugging.txt)
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_debug_report.txt b/registry/vulkan/chapters/VK_EXT_debug_report.txt
new file mode 100644
index 0000000..7d507dc
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_debug_report.txt
@@ -0,0 +1,297 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the Debugging chapter (debugging.txt)
+
+[[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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='vkDestroyDebugReportCallbackEXT',desc='Destroy a debug report callback object',type='protos']
+--
+To destroy a sname:VkDebugReportCallbackEXT object, call:
+
+include::{generated}/api/protos/vkDestroyDebugReportCallbackEXT.txt[]
+
+  * 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.
+
+.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`
+****
+
+include::{generated}/validity/protos/vkDestroyDebugReportCallbackEXT.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_debug_utils.txt b/registry/vulkan/chapters/VK_EXT_debug_utils.txt
new file mode 100644
index 0000000..b3f7ba3
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_debug_utils.txt
@@ -0,0 +1,722 @@
+// Copyright 2018-2021 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.
+
+
+[[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.txt[]
+
+  * pname:device is the device that created the object.
+  * 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
+****
+
+include::{generated}/validity/protos/vkSetDebugUtilsObjectNameEXT.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+
+.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.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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.
+
+include::{generated}/validity/protos/vkSetDebugUtilsObjectTagEXT.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkDebugUtilsLabelEXT',desc='Specify parameters of a label region',type='structs']
+--
+The sname:VkDebugUtilsLabelEXT structure is defined as:
+
+include::{generated}/api/structs/VkDebugUtilsLabelEXT.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+
+[[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.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkDebugUtilsMessengerCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDebugUtilsMessengerCreateFlagsEXT.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * 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.
+--
+
+[open,refpage='VkDebugUtilsMessageTypeFlagsEXT',desc='Bitmask of VkDebugUtilsMessageTypeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkDebugUtilsMessageTypeFlagsEXT.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkDebugUtilsMessengerCallbackDataFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDebugUtilsMessengerCallbackDataFlagsEXT.txt[]
+
+tname:VkDebugUtilsMessengerCallbackDataFlagsEXT is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='vkDestroyDebugUtilsMessengerEXT',desc='Destroy a debug messenger object',type='protos']
+--
+To destroy a sname:VkDebugUtilsMessengerEXT object, call:
+
+include::{generated}/api/protos/vkDestroyDebugUtilsMessengerEXT.txt[]
+
+  * 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.
+
+.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`
+****
+
+include::{generated}/validity/protos/vkDestroyDebugUtilsMessengerEXT.txt[]
+
+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/registry/vulkan/chapters/VK_EXT_direct_mode_display/acquire_release_displays.txt b/registry/vulkan/chapters/VK_EXT_direct_mode_display/acquire_release_displays.txt
new file mode 100644
index 0000000..932254c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_direct_mode_display/acquire_release_displays.txt
@@ -0,0 +1,35 @@
+// Copyright 2018-2021 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.txt[]
+endif::VK_EXT_acquire_xlib_display[]
+
+ifdef::VK_NV_acquire_winrt_display[]
+include::{chapters}/VK_NV_acquire_winrt_display/acquire_winrt_display.txt[]
+endif::VK_NV_acquire_winrt_display[]
+
+ifdef::VK_EXT_acquire_drm_display[]
+include::{chapters}/VK_EXT_acquire_drm_display/acquire_drm_display.txt[]
+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.txt[]
+
+  * pname:physicalDevice The physical device the display is on.
+  * pname:display The display to release control of.
+
+include::{generated}/validity/protos/vkReleaseDisplayEXT.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.txt b/registry/vulkan/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.txt
new file mode 100644
index 0000000..5b2188a
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_directfb_surface/platformCreateSurface_directfb.txt
@@ -0,0 +1,61 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_directfb,platformCreateSurface_directfb]]
+
+=== DirectFB Platform
+
+[open,refpage='vkCreateDirectFBSurfaceEXT',desc='Create a slink:VkSurfaceKHR object for a DirectFB surface',type='protos']
+--
+To create a sname:VkSurfaceKHR object for a DirectFB surface, call:
+
+include::{generated}/api/protos/vkCreateDirectFBSurfaceEXT.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+tname:VkDirectFBSurfaceCreateFlagsEXT is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.txt b/registry/vulkan/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.txt
new file mode 100644
index 0000000..1e1ddb3
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_directfb_surface/platformQuerySupport_directfb.txt
@@ -0,0 +1,32 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_directfb,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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_display_control/display_control.txt b/registry/vulkan/chapters/VK_EXT_display_control/display_control.txt
new file mode 100644
index 0000000..3fb7bf8
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_display_control/display_control.txt
@@ -0,0 +1,53 @@
+// Copyright 2018-2021 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']
+--
+To set the power state of a display, call:
+
+include::{generated}/api/protos/vkDisplayPowerControlEXT.txt[]
+
+  * 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::{generated}/validity/protos/vkDisplayPowerControlEXT.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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/registry/vulkan/chapters/VK_EXT_display_control/fence_events.txt b/registry/vulkan/chapters/VK_EXT_display_control/fence_events.txt
new file mode 100644
index 0000000..1c82ad7
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_display_control/fence_events.txt
@@ -0,0 +1,102 @@
+// Copyright 2018-2021 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']
+--
+To create a fence that will be signaled when an event occurs on a device,
+call:
+
+include::{generated}/api/protos/vkRegisterDeviceEventEXT.txt[]
+
+  * 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::{generated}/validity/protos/vkRegisterDeviceEventEXT.txt[]
+--
+
+[open,refpage='VkDeviceEventInfoEXT',desc='Describe a device event to create',type='structs']
+--
+The sname:VkDeviceEventInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDeviceEventInfoEXT.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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']
+--
+To create a fence that will be signaled when an event occurs on a
+slink:VkDisplayKHR object, call:
+
+include::{generated}/api/protos/vkRegisterDisplayEventEXT.txt[]
+
+  * 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::{generated}/validity/protos/vkRegisterDisplayEventEXT.txt[]
+--
+
+[open,refpage='VkDisplayEventInfoEXT',desc='Describe a display event to create',type='structs']
+--
+The sname:VkDisplayEventInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDisplayEventInfoEXT.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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/registry/vulkan/chapters/VK_EXT_display_control/swapchain_counters.txt b/registry/vulkan/chapters/VK_EXT_display_control/swapchain_counters.txt
new file mode 100644
index 0000000..0c37461
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_display_control/swapchain_counters.txt
@@ -0,0 +1,56 @@
+// Copyright 2018-2021 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='vkGetSwapchainCounterEXT',desc='Query the current value of a surface counter',type='protos']
+--
+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.txt[]
+
+  * 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.
+
+.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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt b/registry/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt
new file mode 100644
index 0000000..da45577
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_display_surface_counter/surface_capabilities.txt
@@ -0,0 +1,78 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[open,refpage='vkGetPhysicalDeviceSurfaceCapabilities2EXT',desc='Query surface capabilities',type='protos']
+--
+To query the basic capabilities of a surface, needed in order to create a
+swapchain, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2EXT.txt[]
+--
+
+[open,refpage='VkSurfaceCapabilities2EXT',desc='Structure describing capabilities of a surface',type='structs']
+--
+The sname:VkSurfaceCapabilities2EXT structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceCapabilities2EXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+include::{chapters}/VK_KHR_surface/wsi.txt[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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+tname:VkSurfaceCounterFlagsEXT is a bitmask type for setting a mask of zero
+or more elink:VkSurfaceCounterFlagBitsEXT.
+--
+
diff --git a/registry/vulkan/chapters/VK_EXT_hdr_metadata.txt b/registry/vulkan/chapters/VK_EXT_hdr_metadata.txt
new file mode 100644
index 0000000..d90103f
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_hdr_metadata.txt
@@ -0,0 +1,79 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside VK_KHR_swapchain
+
+== Hdr Metadata
+
+To improve color reproduction of content it is useful to have information
+that can be used to better reproduce the colors as seen on the reference
+monitor.
+That information can be provided to an implementation by calling
+fname:vkSetHdrMetadataEXT.
+The metadata will be applied to the specified sname:VkSwapchainKHR objects
+at the next fname:vkQueuePresentKHR call using that sname:VkSwapchainKHR
+object.
+The metadata will persist until a subsequent fname:vkSetHdrMetadataEXT
+changes it.
+The definitions below are from the associated SMPTE 2086, CTA 861.3 and CIE
+15:2004 specifications.
+
+The definition of fname:vkSetHdrMetadataEXT is:
+
+[open,refpage='vkSetHdrMetadataEXT',desc='Set Hdr metadata',type='protos']
+--
+include::{generated}/api/protos/vkSetHdrMetadataEXT.txt[]
+
+  * 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.
+
+include::{generated}/validity/protos/vkSetHdrMetadataEXT.txt[]
+--
+
+[open,refpage='VkXYColorEXT',desc='Specify X,Y chromaticity coordinates',type='structs']
+--
+include::{generated}/api/structs/VkXYColorEXT.txt[]
+Chromaticity coordinates x and y 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.
+
+--
+
+[open,refpage='VkHdrMetadataEXT',desc='Specify Hdr metadata',type='structs']
+--
+include::{generated}/api/structs/VkHdrMetadataEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:displayPrimaryRed is the reference monitor's red primary in
+    chromaticity coordinates
+  * pname:displayPrimaryGreen is the reference monitor's green primary in
+    chromaticity coordinates
+  * pname:displayPrimaryBlue is the reference monitor's blue primary in
+    chromaticity coordinates
+  * pname:whitePoint is 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.txt[]
+
+[NOTE]
+.Note
+====
+The validity and use of this data is outside the scope of Vulkan.
+====
+
+--
diff --git a/registry/vulkan/chapters/VK_EXT_headless_surface/headless.txt b/registry/vulkan/chapters/VK_EXT_headless_surface/headless.txt
new file mode 100644
index 0000000..0f8aa60
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_headless_surface/headless.txt
@@ -0,0 +1,71 @@
+// Copyright 2017-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[headless,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']
+--
+To create a headless sname:VkSurfaceKHR object, call:
+
+include::{generated}/api/protos/vkCreateHeadlessSurfaceEXT.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+tname:VkHeadlessSurfaceCreateFlagsEXT is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.txt b/registry/vulkan/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.txt
new file mode 100644
index 0000000..d7309a6
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_metal_surface/platformCreateSurface_metal.txt
@@ -0,0 +1,61 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_metal,platformCreateSurface_metal]]
+
+=== Metal Platform
+
+[open,refpage='vkCreateMetalSurfaceEXT',desc='Create a VkSurfaceKHR object for CAMetalLayer',type='protos']
+--
+To create a sname:VkSurfaceKHR object for a basetype:CAMetalLayer, call:
+
+include::{generated}/api/protos/vkCreateMetalSurfaceEXT.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+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.txt[]
+
+tname:VkMetalSurfaceCreateFlagsEXT is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.txt b/registry/vulkan/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.txt
new file mode 100644
index 0000000..a7a2271
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_metal_surface/platformQuerySupport_metal.txt
@@ -0,0 +1,11 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_metal,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/registry/vulkan/chapters/VK_EXT_pipeline_creation_feedback/pipelines.txt b/registry/vulkan/chapters/VK_EXT_pipeline_creation_feedback/pipelines.txt
new file mode 100644
index 0000000..1aca88d
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_pipeline_creation_feedback/pipelines.txt
@@ -0,0 +1,174 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+// This section is included inside the Pipelines chapter (pipelines.txt)
+
+[[pipelines-creation-feedback]]
+== Pipeline Creation Feedback
+
+[open,refpage='VkPipelineCreationFeedbackCreateInfoEXT',desc='Request for feedback about the creation of a pipeline',type='structs',xrefs='VkGraphicsPipelineCreateInfo VkComputePipelineCreateInfo VkRayTracingPipelineCreateInfoNV VkRayTracingPipelineCreateInfoKHR VkPipelineCreationFeedbackEXT']
+--
+Feedback about the creation of a particular pipeline object can: be obtained
+by adding a sname:VkPipelineCreationFeedbackCreateInfoEXT 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:VkPipelineCreationFeedbackCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkPipelineCreationFeedbackCreateInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pPipelineCreationFeedback is a pointer to a
+    slink:VkPipelineCreationFeedbackEXT structure.
+  * pname:pipelineStageCreationFeedbackCount is the number of elements in
+    pname:pPipelineStageCreationFeedbacks.
+  * pname:pPipelineStageCreationFeedbacks is a pointer to an array of
+    pname:pipelineStageCreationFeedbackCount
+    slink:VkPipelineCreationFeedbackEXT 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_EXT in
+slink:VkPipelineCreationFeedbackEXT::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_EXT
+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.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02668]]
+    When chained to slink:VkGraphicsPipelineCreateInfo,
+    slink:VkPipelineCreationFeedbackEXT::pname:pipelineStageCreationFeedbackCount
+    must: equal slink:VkGraphicsPipelineCreateInfo::pname:stageCount
+  * [[VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02669]]
+    When chained to slink:VkComputePipelineCreateInfo,
+    slink:VkPipelineCreationFeedbackEXT::pname:pipelineStageCreationFeedbackCount
+    must: equal 1
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02670]]
+    When chained to slink:VkRayTracingPipelineCreateInfoKHR,
+    slink:VkPipelineCreationFeedbackEXT::pname:pipelineStageCreationFeedbackCount
+    must: equal slink:VkRayTracingPipelineCreateInfoKHR::pname:stageCount
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_NV_ray_tracing[]
+  * [[VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02969]]
+    When chained to slink:VkRayTracingPipelineCreateInfoNV,
+    slink:VkPipelineCreationFeedbackEXT::pname:pipelineStageCreationFeedbackCount
+    must: equal slink:VkRayTracingPipelineCreateInfoNV::pname:stageCount
+endif::VK_NV_ray_tracing[]
+****
+
+include::{generated}/validity/structs/VkPipelineCreationFeedbackCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkPipelineCreationFeedbackEXT',desc='Feedback about the creation of a pipeline or pipeline stage',type='structs',xrefs='VkPipelineCreationFeedbackCreateInfoEXT VkPipelineCreationFeedbackFlagBitsEXT']
+--
+The sname:VkPipelineCreationFeedbackEXT structure is defined as:
+
+include::{generated}/api/structs/VkPipelineCreationFeedbackEXT.txt[]
+
+  * pname:flags is a bitmask of elink:VkPipelineCreationFeedbackFlagBitsEXT
+    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_EXT is not set in
+pname:flags, an implementation must: not set any other bits in pname:flags,
+and the values of all other sname:VkPipelineCreationFeedbackEXT data members
+are undefined:.
+
+include::{generated}/validity/structs/VkPipelineCreationFeedbackEXT.txt[]
+--
+
+[open,refpage='VkPipelineCreationFeedbackFlagBitsEXT',desc='Bitmask specifying pipeline or pipeline stage creation feedback',type='enums',xrefs='VkPipelineCreationFeedbackCreateInfoEXT VkPipelineCreationFeedbackEXT']
+--
+Possible values of the pname:flags member of
+slink:VkPipelineCreationFeedbackEXT are:
+
+include::{generated}/api/enums/VkPipelineCreationFeedbackFlagBitsEXT.txt[]
+
+  * ename:VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT indicates that the
+    feedback information is valid.
+  * ename:VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT
+    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_EXT
+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_EXT
+    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_EXT 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='VkPipelineCreationFeedbackFlagsEXT',desc='Bitmask of VkPipelineCreationFeedbackFlagBitsEXT',type='flags',xrefs='VkPipelineCreationFeedbackEXT VkPipelineCreationFeedbackFlagBitsEXT']
+--
+include::{generated}/api/flags/VkPipelineCreationFeedbackFlagsEXT.txt[]
+
+tname:VkPipelineCreationFeedbackFlagsEXT is a bitmask type for providing
+zero or more elink:VkPipelineCreationFeedbackFlagBitsEXT.
+--
diff --git a/registry/vulkan/chapters/VK_EXT_private_data.txt b/registry/vulkan/chapters/VK_EXT_private_data.txt
new file mode 100644
index 0000000..9b012dc
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_private_data.txt
@@ -0,0 +1,171 @@
+// Copyright 2020-2021 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.
+
+An application can: reserve private data slots at device creation.
+To reserve private data slots, insert a
+slink:VkDevicePrivateDataCreateInfoEXT in the pname:pNext chain in
+slink:VkDeviceCreateInfo before device creation.
+Multiple slink:VkDevicePrivateDataCreateInfoEXT 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='VkPrivateDataSlotEXT',desc='Opaque handle to a private data slot object',type='handles']
+--
+Private data slots are represented by sname:VkPrivateDataSlotEXT handles:
+
+include::{generated}/api/handles/VkPrivateDataSlotEXT.txt[]
+--
+
+[open,refpage='vkCreatePrivateDataSlotEXT',desc='Create a slot for private data storage',type='protos']
+--
+To create a private data slot, call:
+
+include::{generated}/api/protos/vkCreatePrivateDataSlotEXT.txt[]
+
+  * 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:VkPrivateDataSlotCreateInfoEXT
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+  * pname:pPrivateDataSlot is a pointer to a slink:VkPrivateDataSlotEXT
+    handle in which the resulting private data slot is returned
+
+.Valid Usage
+****
+  * [[VUID-vkCreatePrivateDataSlotEXT-privateData-04564]]
+    The <<features-privateData,pname:privateData>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCreatePrivateDataSlotEXT.txt[]
+--
+
+[open,refpage='VkPrivateDataSlotCreateInfoEXT',desc='Structure specifying the parameters of private data slot construction',type='structs']
+--
+The sname:VkPrivateDataSlotCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkPrivateDataSlotCreateInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of tlink:VkPrivateDataSlotCreateFlagsEXT
+    specifying additional parameters of the new private data slot
+
+include::{generated}/validity/structs/VkPrivateDataSlotCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkPrivateDataSlotCreateFlagBitsEXT',desc='Bitmask specifying additional parameters for private data slot creation',type='enums']
+--
+include::{generated}/api/enums/VkPrivateDataSlotCreateFlagBitsEXT.txt[]
+--
+
+[open,refpage='VkPrivateDataSlotCreateFlagsEXT',desc='Bitmask of VkPrivateDataSlotCreateFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkPrivateDataSlotCreateFlagsEXT.txt[]
+
+tname:VkPrivateDataSlotCreateFlagsEXT is a bitmask type for setting a mask
+of zero or more elink:VkPrivateDataSlotCreateFlagBitsEXT.
+--
+
+[open,refpage='vkDestroyPrivateDataSlotEXT',desc='Destroy a private data slot',type='protos']
+--
+To destroy a private data slot, call:
+
+include::{generated}/api/protos/vkDestroyPrivateDataSlotEXT.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-04062]]
+    If sname:VkAllocationCallbacks were provided when pname:privateDataSlot
+    was created, a compatible set of callbacks must: be provided here
+  * [[VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-04063]]
+    If no sname:VkAllocationCallbacks were provided when
+    pname:privateDataSlot was created, pname:pAllocator must: be `NULL`
+****
+
+include::{generated}/validity/protos/vkDestroyPrivateDataSlotEXT.txt[]
+--
+
+[open,refpage='vkSetPrivateDataEXT',desc='Associate data with a Vulkan object',type='protos']
+--
+To store user defined data in a slot associated with a Vulkan object, call:
+
+include::{generated}/api/protos/vkSetPrivateDataEXT.txt[]
+
+  * 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:VkPrivateDataSlotEXT
+    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-vkSetPrivateDataEXT-objectHandle-04016]]
+    pname:objectHandle must: be pname:device or a child of pname:device
+  * [[VUID-vkSetPrivateDataEXT-objectHandle-04017]]
+    pname:objectHandle must: be a valid handle to an object of type
+    pname:objectType
+****
+
+include::{generated}/validity/protos/vkSetPrivateDataEXT.txt[]
+--
+
+[open,refpage='vkGetPrivateDataEXT',desc='Retrieve data associated with a Vulkan object',type='protos']
+--
+To retrieve user defined data from a slot associated with a Vulkan object,
+call:
+
+include::{generated}/api/protos/vkGetPrivateDataEXT.txt[]
+
+  * 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:VkPrivateDataSlotEXT
+    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:vkSetPrivateDataEXT 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:vkGetPrivateDataEXT for
+slink:VkSwapchainKHR objects on which fname:vkSetPrivateDataEXT has not
+previously been called.
+This erratum is exclusive to the Android platform and objects of type
+slink:VkSwapchainKHR.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkGetPrivateDataEXT-objectType-04018]]
+    pname:objectType must: be ename:VK_OBJECT_TYPE_DEVICE, or an object type
+    whose parent is slink:VkDevice
+****
+
+include::{generated}/validity/protos/vkGetPrivateDataEXT.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_validation_cache/shader-module-validation-cache.txt b/registry/vulkan/chapters/VK_EXT_validation_cache/shader-module-validation-cache.txt
new file mode 100644
index 0000000..5e4d579
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_validation_cache/shader-module-validation-cache.txt
@@ -0,0 +1,25 @@
+// Copyright 2018-2021 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_EXT_validation_features.txt b/registry/vulkan/chapters/VK_EXT_validation_features.txt
new file mode 100644
index 0000000..b002a48
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_validation_features.txt
@@ -0,0 +1,135 @@
+// Copyright 2018-2021 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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.
+====
+
+[NOTE]
+.Note
+====
+The `apiext:VK_EXT_validation_features` extension subsumes all the
+functionality provided in the `apiext:VK_EXT_validation_flags` extension.
+====
diff --git a/registry/vulkan/chapters/VK_EXT_validation_flags.txt b/registry/vulkan/chapters/VK_EXT_validation_flags.txt
new file mode 100644
index 0000000..ccd1ce6
--- /dev/null
+++ b/registry/vulkan/chapters/VK_EXT_validation_flags.txt
@@ -0,0 +1,37 @@
+// Copyright 2018-2021 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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/registry/vulkan/chapters/VK_FUCHSIA_external_memory/device_memory.txt b/registry/vulkan/chapters/VK_FUCHSIA_external_memory/device_memory.txt
new file mode 100644
index 0000000..3b53034
--- /dev/null
+++ b/registry/vulkan/chapters/VK_FUCHSIA_external_memory/device_memory.txt
@@ -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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.txt b/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.txt
new file mode 100644
index 0000000..c3552e3
--- /dev/null
+++ b/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.txt
@@ -0,0 +1,60 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_imagepipe,platformCreateSurface_imagepipe]]
+
+=== Fuchsia Platform
+
+[open,refpage='vkCreateImagePipeSurfaceFUCHSIA',desc='Create a slink:VkSurfaceKHR object for a Fuchsia ImagePipe',type='protos']
+--
+To create a sname:VkSurfaceKHR object for a Fuchsia ImagePipe, call:
+
+include::{generated}/api/protos/vkCreateImagePipeSurfaceFUCHSIA.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+tname:VkImagePipeSurfaceCreateFlagsFUCHSIA is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.txt b/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.txt
new file mode 100644
index 0000000..5b58373
--- /dev/null
+++ b/registry/vulkan/chapters/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.txt
@@ -0,0 +1,12 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_fuchsia,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/registry/vulkan/chapters/VK_GGP_frame_token.txt b/registry/vulkan/chapters/VK_GGP_frame_token.txt
new file mode 100644
index 0000000..591ee21
--- /dev/null
+++ b/registry/vulkan/chapters/VK_GGP_frame_token.txt
@@ -0,0 +1,28 @@
+// Copyright 2015-2021 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.txt b/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.txt
new file mode 100644
index 0000000..adeb98c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.txt
@@ -0,0 +1,72 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_streamdescriptor,platformCreateSurface_streamdescriptor]]
+=== Google Games Platform
+
+[open,refpage='vkCreateStreamDescriptorSurfaceGGP',desc='Create a slink:VkSurfaceKHR object for a Google Games Platform stream',type='protos']
+--
+To create a sname:VkSurfaceKHR object for a Google Games Platform stream
+descriptor, call:
+
+include::{generated}/api/protos/vkCreateStreamDescriptorSurfaceGGP.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+tname:VkStreamDescriptorSurfaceCreateFlagsGGP is a bitmask type for setting
+a mask, but is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.txt b/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.txt
new file mode 100644
index 0000000..4270756
--- /dev/null
+++ b/registry/vulkan/chapters/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.txt
@@ -0,0 +1,12 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_streamdescriptor,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/registry/vulkan/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.txt b/registry/vulkan/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.txt
new file mode 100644
index 0000000..062abbe
--- /dev/null
+++ b/registry/vulkan/chapters/VK_GOOGLE_display_timing/PresentTimeInfo.txt
@@ -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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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/registry/vulkan/chapters/VK_GOOGLE_display_timing/queries.txt b/registry/vulkan/chapters/VK_GOOGLE_display_timing/queries.txt
new file mode 100644
index 0000000..97a9548
--- /dev/null
+++ b/registry/vulkan/chapters/VK_GOOGLE_display_timing/queries.txt
@@ -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 `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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:refreshDuration is the number of nanoseconds from the start of one
+    refresh cycle to the next.
+
+include::{generated}/validity/structs/VkRefreshCycleDurationGOOGLE.txt[]
+--
+
+[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.
+Let's say that 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.
+Let's say that 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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/registry/vulkan/chapters/VK_INTEL_performance_query/queries.txt b/registry/vulkan/chapters/VK_INTEL_performance_query/queries.txt
new file mode 100644
index 0000000..1b750a8
--- /dev/null
+++ b/registry/vulkan/chapters/VK_INTEL_performance_query/queries.txt
@@ -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 capabable 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='vkUninitializePerformanceApiINTEL',desc='Uninitialize a device for performance queries',type='protos']
+--
+Once performance query operations have completed, uninitalize the device for
+performance queries with the call:
+
+include::{generated}/api/protos/vkUninitializePerformanceApiINTEL.txt[]
+
+  * pname:device is the logical device used for the queries.
+
+include::{generated}/validity/protos/vkUninitializePerformanceApiINTEL.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+--
+
+[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:Bool32 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.txt[]
+--
+
+[open,refpage='VkPerformanceValueDataINTEL',desc='Values returned for the parameters',type='structs']
+--
+The sname:VkPerformanceValueDataINTEL union is defined as:
+
+include::{generated}/api/structs/VkPerformanceValueDataINTEL.txt[]
+
+  * 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:Bool32 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.txt[]
+--
+
+[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.txt[]
+
+include::{generated}/api/structs/VkQueryPoolCreateInfoINTEL.txt[]
+
+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 the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+--
+
+[open,refpage='VkPerformanceMarkerInfoINTEL',desc='Structure specifying performance markers',type='structs']
+--
+The sname:VkPerformanceMarkerInfoINTEL structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceMarkerInfoINTEL.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='vkCmdSetPerformanceStreamMarkerINTEL',desc='Markers',type='protos']
+--
+When monitoring the behavior of an application wihtin 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.txt[]
+
+include::{generated}/validity/protos/vkCmdSetPerformanceStreamMarkerINTEL.txt[]
+--
+
+[open,refpage='VkPerformanceStreamMarkerInfoINTEL',desc='Structure specifying stream performance markers',type='structs']
+--
+The sname:VkPerformanceStreamMarkerInfoINTEL structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceStreamMarkerInfoINTEL.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkPerformanceOverrideInfoINTEL',desc='Performance override information',type='structs']
+--
+The sname:VkPerformanceOverrideInfoINTEL structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceOverrideInfoINTEL.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='vkAcquirePerformanceConfigurationINTEL',desc='Acquire the performance query capability',type='protos']
+--
+To acquire a device performance configuration, call:
+
+include::{generated}/api/protos/vkAcquirePerformanceConfigurationINTEL.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+--
+
+[open,refpage='vkQueueSetPerformanceConfigurationINTEL',desc='Set a performance query',type='protos']
+--
+To set a performance configuration, call:
+
+include::{generated}/api/protos/vkQueueSetPerformanceConfigurationINTEL.txt[]
+
+  * pname:queue is the queue on which the configuration will be used.
+  * pname:configuration is the configuration to use.
+
+include::{generated}/validity/protos/vkQueueSetPerformanceConfigurationINTEL.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+endif::VK_INTEL_performance_query[]
diff --git a/registry/vulkan/chapters/VK_KHR_android_surface/platformCreateSurface_android.txt b/registry/vulkan/chapters/VK_KHR_android_surface/platformCreateSurface_android.txt
new file mode 100644
index 0000000..33783ef
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_android_surface/platformCreateSurface_android.txt
@@ -0,0 +1,91 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_android,platformCreateSurface_android]]
+=== Android Platform
+
+[open,refpage='vkCreateAndroidSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for an Android native window',type='protos']
+--
+To create a sname:VkSurfaceKHR object for an Android native window, call:
+
+include::{generated}/api/protos/vkCreateAndroidSurfaceKHR.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+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.txt[]
+
+tname:VkAndroidSurfaceCreateFlagsKHR is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_KHR_android_surface/platformQuerySupport_android.txt b/registry/vulkan/chapters/VK_KHR_android_surface/platformQuerySupport_android.txt
new file mode 100644
index 0000000..02fda23
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_android_surface/platformQuerySupport_android.txt
@@ -0,0 +1,11 @@
+// Copyright 2018-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_android,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/registry/vulkan/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.txt b/registry/vulkan/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.txt
new file mode 100644
index 0000000..ba20ec6
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_deferred_host_operations/deferred_host_operations.txt
@@ -0,0 +1,270 @@
+// Copyright 2014-2021 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 dependant 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
+at any time until the deferred operation enters the pending state.
+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.
+
+
+== 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.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+****
+  * [[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`
+  * [[VUID-vkDestroyDeferredOperationKHR-operation-03436]]
+    pname:operation must: be completed
+****
+include::{generated}/validity/protos/vkDestroyDeferredOperationKHR.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
diff --git a/registry/vulkan/chapters/VK_KHR_display/display.txt b/registry/vulkan/chapters/VK_KHR_display/display.txt
new file mode 100644
index 0000000..ad9433c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_display/display.txt
@@ -0,0 +1,740 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[display,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 `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.txt[]
+--
+
+[open,refpage='vkGetPhysicalDeviceDisplayPropertiesKHR',desc='Query information about the available displays',type='protos']
+--
+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.txt[]
+
+  * 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::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPropertiesKHR.txt[]
+--
+
+[open,refpage='VkDisplayPropertiesKHR',desc='Structure describing an available display device',type='structs']
+--
+The sname:VkDisplayPropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPropertiesKHR.txt[]
+
+  * 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.txt[]
+--
+
+ifdef::VK_KHR_get_display_properties2[]
+[open,refpage='vkGetPhysicalDeviceDisplayProperties2KHR',desc='Query information about the available displays',type='protos']
+--
+To query information about the available displays, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceDisplayProperties2KHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetPhysicalDeviceDisplayProperties2KHR.txt[]
+--
+
+[open,refpage='VkDisplayProperties2KHR',desc='Structure describing an available display device',type='structs']
+--
+The sname:VkDisplayProperties2KHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayProperties2KHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_get_display_properties2[]
+
+ifdef::VK_EXT_direct_mode_display[]
+include::{chapters}/VK_EXT_direct_mode_display/acquire_release_displays.txt[]
+endif::VK_EXT_direct_mode_display[]
+
+
+==== Display Planes
+
+[open,refpage='vkGetPhysicalDeviceDisplayPlanePropertiesKHR',desc='Query the plane properties',type='protos']
+--
+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.txt[]
+
+  * 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::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.txt[]
+--
+
+[open,refpage='VkDisplayPlanePropertiesKHR',desc='Structure describing display plane properties',type='structs']
+--
+The sname:VkDisplayPlanePropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPlanePropertiesKHR.txt[]
+
+  * 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.txt[]
+--
+
+ifdef::VK_KHR_get_display_properties2[]
+[open,refpage='vkGetPhysicalDeviceDisplayPlaneProperties2KHR',desc='Query information about the available display planes.',type='protos']
+--
+To query the properties of a device's display planes, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.txt[]
+--
+
+[open,refpage='VkDisplayPlaneProperties2KHR',desc='Structure describing an available display plane',type='structs']
+--
+The sname:VkDisplayPlaneProperties2KHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayPlaneProperties2KHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_get_display_properties2[]
+
+[open,refpage='vkGetDisplayPlaneSupportedDisplaysKHR',desc='Query the list of displays a plane supports',type='protos']
+--
+To determine which displays a plane is usable with, call
+
+include::{generated}/api/protos/vkGetDisplayPlaneSupportedDisplaysKHR.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+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.txt[]
+--
+
+[open,refpage='vkGetDisplayModePropertiesKHR',desc='Query the set of mode properties supported by the display',type='protos']
+--
+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.txt[]
+
+  * 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::{generated}/validity/protos/vkGetDisplayModePropertiesKHR.txt[]
+--
+
+[open,refpage='VkDisplayModePropertiesKHR',desc='Structure describing display mode properties',type='structs']
+--
+The sname:VkDisplayModePropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayModePropertiesKHR.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkDisplayModeCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDisplayModeCreateFlagsKHR.txt[]
+
+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']
+--
+To query the properties of a device's built-in display modes, call:
+
+include::{generated}/api/protos/vkGetDisplayModeProperties2KHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetDisplayModeProperties2KHR.txt[]
+--
+
+[open,refpage='VkDisplayModeProperties2KHR',desc='Structure describing an available display mode',type='structs']
+--
+The sname:VkDisplayModeProperties2KHR structure is defined as:
+
+include::{generated}/api/structs/VkDisplayModeProperties2KHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='vkCreateDisplayModeKHR',desc='Create a display mode',type='protos']
+--
+Additional modes may: also be created by calling:
+
+include::{generated}/api/protos/vkCreateDisplayModeKHR.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateDisplayModeKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='vkGetDisplayPlaneCapabilitiesKHR',desc='Query capabilities of a mode and plane combination',type='protos']
+--
+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.txt[]
+
+  * 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::{generated}/validity/protos/vkGetDisplayPlaneCapabilitiesKHR.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+ifdef::VK_KHR_get_display_properties2[]
+[open,refpage='vkGetDisplayPlaneCapabilities2KHR',desc='Query capabilities of a mode and plane combination',type='protos']
+--
+To query the capabilities of a given mode and plane combination, call:
+
+include::{generated}/api/protos/vkGetDisplayPlaneCapabilities2KHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetDisplayPlaneCapabilities2KHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_get_display_properties2[]
+
+ifdef::VK_EXT_display_control[]
+include::{chapters}/VK_EXT_display_control/display_control.txt[]
+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']
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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-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.txt[]
+--
+
+[open,refpage='VkDisplaySurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDisplaySurfaceCreateFlagsKHR.txt[]
+
+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']
+--
+Possible values of slink:VkDisplaySurfaceCreateInfoKHR::pname:alphaMode,
+specifying the type of alpha blending to use on a display, are:
+
+include::{generated}/api/enums/VkDisplayPlaneAlphaFlagBitsKHR.txt[]
+
+  * 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.txt[]
+
+tname:VkDisplayPlaneAlphaFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkDisplayPlaneAlphaFlagBitsKHR.
+--
diff --git a/registry/vulkan/chapters/VK_KHR_display_swapchain/create_shared_swapchains.txt b/registry/vulkan/chapters/VK_KHR_display_swapchain/create_shared_swapchains.txt
new file mode 100644
index 0000000..9175147
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_display_swapchain/create_shared_swapchains.txt
@@ -0,0 +1,42 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[create_shared_swapchains,create_shared_swapchains]]
+
+[open,refpage='vkCreateSharedSwapchainsKHR',desc='Create multiple swapchains that share presentable images',type='protos']
+--
+When the `VK_KHR_display_swapchain` extension is enabled, multiple
+swapchains that share presentable images are created by calling:
+
+include::{generated}/api/protos/vkCreateSharedSwapchainsKHR.txt[]
+
+  * 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 transitioning away from ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR.
+After destroying one or more of the swapchains, the remaining swapchains and
+the presentable images can: continue to be used.
+
+include::{generated}/validity/protos/vkCreateSharedSwapchainsKHR.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt b/registry/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt
new file mode 100644
index 0000000..d809a65
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_display_swapchain/destroy_swapchain_interactions.txt
@@ -0,0 +1,11 @@
+// Copyright 2018-2021 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/registry/vulkan/chapters/VK_KHR_display_swapchain/display_swapchain_present.txt b/registry/vulkan/chapters/VK_KHR_display_swapchain/display_swapchain_present.txt
new file mode 100644
index 0000000..ddf10e4
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_display_swapchain/display_swapchain_present.txt
@@ -0,0 +1,68 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[display_swapchain_present,display_swapchain_present]]
+When the `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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_display_swapchain/queue_present_interactions.txt b/registry/vulkan/chapters/VK_KHR_display_swapchain/queue_present_interactions.txt
new file mode 100644
index 0000000..2901a7f
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_display_swapchain/queue_present_interactions.txt
@@ -0,0 +1,9 @@
+// Copyright 2018-2021 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/registry/vulkan/chapters/VK_KHR_incremental_present/wsi.txt b/registry/vulkan/chapters/VK_KHR_incremental_present/wsi.txt
new file mode 100644
index 0000000..923c85a
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_incremental_present/wsi.txt
@@ -0,0 +1,104 @@
+// Copyright 2014-2021 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 `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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/features.txt b/registry/vulkan/chapters/VK_KHR_performance_query/features.txt
new file mode 100644
index 0000000..d9f920e
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_performance_query/features.txt
@@ -0,0 +1,31 @@
+// Copyright 2019-2021 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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePerformanceQueryFeaturesKHR.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/props.txt b/registry/vulkan/chapters/VK_KHR_performance_query/props.txt
new file mode 100644
index 0000000..7d2ebae
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_performance_query/props.txt
@@ -0,0 +1,22 @@
+// Copyright 2019-2021 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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePerformanceQueryPropertiesKHR.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/queriesperformance.txt b/registry/vulkan/chapters/VK_KHR_performance_query/queriesperformance.txt
new file mode 100644
index 0000000..e834628
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_performance_query/queriesperformance.txt
@@ -0,0 +1,144 @@
+// Copyright 2019-2021 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']
+--
+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.
+The slink:VkPerformanceCounterKHR::pname:unit enumeration specifies how to
+parse the counter data.
+
+include::{generated}/api/structs/VkPerformanceCounterResultKHR.txt[]
+--
+
+
+[[profiling-lock]]
+=== Profiling Lock
+
+[open,refpage='vkAcquireProfilingLockKHR',desc='Acquires the profiling lock',type='protos']
+--
+To record and submit a command buffer that contains 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 that contains a
+performance query pool is in the _recording_, _executable_, or _pending
+state_.
+To acquire the profiling lock, call:
+
+include::{generated}/api/protos/vkAcquireProfilingLockKHR.txt[]
+
+  * pname:device is the logical device to profile.
+  * pname:pInfo is a pointer to a sname:VkAcquireProfilingLockInfoKHR
+    structure which contains information about how the profiling is to be
+    acquired.
+
+Implementations may: allow multiple actors to hold the profiling lock
+concurrently.
+
+include::{generated}/validity/protos/vkAcquireProfilingLockKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+
+If pname:timeout is 0, fname:vkAcquireProfilingLockKHR will not block while
+attempting to acquire the profling 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.txt[]
+--
+
+[open,refpage='VkAcquireProfilingLockFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkAcquireProfilingLockFlagsKHR.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/querycreateinfo.txt b/registry/vulkan/chapters/VK_KHR_performance_query/querycreateinfo.txt
new file mode 100644
index 0000000..31edc16
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_performance_query/querycreateinfo.txt
@@ -0,0 +1,63 @@
+// Copyright 2019-2021 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_performance_query/queuefamily.txt b/registry/vulkan/chapters/VK_KHR_performance_query/queuefamily.txt
new file mode 100644
index 0000000..f96548c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_performance_query/queuefamily.txt
@@ -0,0 +1,183 @@
+// Copyright 2019-2021 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']
+--
+To enumerate the performance query counters available on a queue family of a
+physical device, call:
+
+include::{generated}/api/protos/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.txt[]
+
+  * 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::{generated}/validity/protos/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.txt[]
+--
+
+[open,refpage='VkPerformanceCounterKHR',desc='Structure providing information about a counter',type='structs']
+--
+The sname:VkPerformanceCounterKHR structure is defined as:
+
+include::{generated}/api/structs/VkPerformanceCounterKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPerformanceCounterDescriptionFlagBitsKHR',desc='Bitmask specifying usage behavior for a counter',type='enums']
+--
+Bits which can: be set in
+slink:VkPerformanceCounterDescriptionKHR::pname:flags to specify usage
+behavior for a performance counter are:
+
+include::{generated}/api/enums/VkPerformanceCounterDescriptionFlagBitsKHR.txt[]
+
+  * 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.txt[]
+
+tlink:VkPerformanceCounterDescriptionFlagsKHR is a bitmask type for setting
+a mask of zero or more elink:VkPerformanceCounterDescriptionFlagBitsKHR.
+--
diff --git a/registry/vulkan/chapters/VK_KHR_pipeline_executable_properties/pipelines.txt b/registry/vulkan/chapters/VK_KHR_pipeline_executable_properties/pipelines.txt
new file mode 100644
index 0000000..ce01b17
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_pipeline_executable_properties/pipelines.txt
@@ -0,0 +1,335 @@
+// Copyright 2019-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// This section is included inside the Pipelines chapter (pipelines.txt)
+
+[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.txt[]
+
+  * 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]]
+    <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>> must:
+    be enabled
+  * [[VUID-vkGetPipelineExecutablePropertiesKHR-pipeline-03271]]
+    pname:pipeline member of pname:pPipelineInfo must: have been created
+    with pname:device
+****
+
+include::{generated}/validity/protos/vkGetPipelineExecutablePropertiesKHR.txt[]
+--
+
+[open,refpage='VkPipelineInfoKHR',desc='Structure describing a pipeline',type='structs']
+--
+The sname:VkPipelineInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineInfoKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineExecutablePropertiesKHR',desc='Structure describing a pipeline executable',type='structs']
+--
+The sname:VkPipelineExecutablePropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineExecutablePropertiesKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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]]
+    <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>> must:
+    be enabled
+  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03273]]
+    pname:pipeline member of pname:pExecutableInfo must: have been created
+    with pname:device
+  * [[VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03274]]
+    pname:pipeline member of pname:pExecutableInfo must: have been created
+    with ename:VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR
+****
+
+include::{generated}/validity/protos/vkGetPipelineExecutableStatisticsKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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]]
+    <<features-pipelineExecutableInfo, pname:pipelineExecutableInfo>> must:
+    be enabled
+  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03277]]
+    pname:pipeline member of pname:pExecutableInfo must: have been created
+    with pname:device
+  * [[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03278]]
+    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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_present_wait/WaitForPresent.txt b/registry/vulkan/chapters/VK_KHR_present_wait/WaitForPresent.txt
new file mode 100644
index 0000000..ba09b5b
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_present_wait/WaitForPresent.txt
@@ -0,0 +1,68 @@
+// Copyright 2019-2021 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.txt[]
+
+  * 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 new image 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_present_wait/present_wait.txt b/registry/vulkan/chapters/VK_KHR_present_wait/present_wait.txt
new file mode 100644
index 0000000..21f1f93
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_present_wait/present_wait.txt
@@ -0,0 +1,36 @@
+// Copyright 2018-2021 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 `VK_KHR_present_timing` extension
+ifdef::VK_GOOGLE_display_timing[or]
+endif::VK_KHR_present_timing[]
+ifdef::VK_GOOGLE_display_timing[]
+the `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/registry/vulkan/chapters/VK_KHR_shared_presentable_image/wsi.txt b/registry/vulkan/chapters/VK_KHR_shared_presentable_image/wsi.txt
new file mode 100644
index 0000000..4718b2f
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_shared_presentable_image/wsi.txt
@@ -0,0 +1,81 @@
+// Copyright 2014-2021 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 `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']
+--
+In order to query a swapchain's status when rendering to a shared
+presentable image, call:
+include::{generated}/api/protos/vkGetSwapchainStatusKHR.txt[]
+
+  * pname:device is the device associated with pname:swapchain.
+  * pname:swapchain is the swapchain to query.
+
+include::{generated}/validity/protos/vkGetSwapchainStatusKHR.txt[]
+--
+
+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/registry/vulkan/chapters/VK_KHR_surface/wsi.txt b/registry/vulkan/chapters/VK_KHR_surface/wsi.txt
new file mode 100644
index 0000000..f140c15
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_surface/wsi.txt
@@ -0,0 +1,1538 @@
+// Copyright 2014-2021 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.txt[]
+
+The `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.txt[]
+endif::VK_KHR_android_surface[]
+
+ifdef::VK_KHR_wayland_surface[]
+include::{chapters}/VK_KHR_wayland_surface/platformCreateSurface_wayland.txt[]
+endif::VK_KHR_wayland_surface[]
+
+ifdef::VK_KHR_win32_surface[]
+include::{chapters}/VK_KHR_win32_surface/platformCreateSurface_win32.txt[]
+endif::VK_KHR_win32_surface[]
+
+ifdef::VK_KHR_xcb_surface[]
+include::{chapters}/VK_KHR_xcb_surface/platformCreateSurface_xcb.txt[]
+endif::VK_KHR_xcb_surface[]
+
+ifdef::VK_KHR_xlib_surface[]
+include::{chapters}/VK_KHR_xlib_surface/platformCreateSurface_xlib.txt[]
+endif::VK_KHR_xlib_surface[]
+
+ifdef::VK_EXT_directfb_surface[]
+include::{chapters}/VK_EXT_directfb_surface/platformCreateSurface_directfb.txt[]
+endif::VK_EXT_directfb_surface[]
+
+ifdef::VK_FUCHSIA_imagepipe_surface[]
+include::{chapters}/VK_FUCHSIA_imagepipe_surface/platformCreateSurface_imagepipe.txt[]
+endif::VK_FUCHSIA_imagepipe_surface[]
+
+ifdef::VK_GGP_stream_descriptor_surface[]
+include::{chapters}/VK_GGP_stream_descriptor_surface/platformCreateSurface_streamdescriptor.txt[]
+endif::VK_GGP_stream_descriptor_surface[]
+
+ifdef::VK_MVK_ios_surface[]
+include::{chapters}/VK_MVK_ios_surface/platformCreateSurface_ios.txt[]
+endif::VK_MVK_ios_surface[]
+
+ifdef::VK_MVK_macos_surface[]
+include::{chapters}/VK_MVK_macos_surface/platformCreateSurface_macos.txt[]
+endif::VK_MVK_macos_surface[]
+
+ifdef::VK_NN_vi_surface[]
+include::{chapters}/VK_NN_vi_surface/platformCreateSurface_vi.txt[]
+endif::VK_NN_vi_surface[]
+
+ifdef::VK_EXT_metal_surface[]
+include::{chapters}/VK_EXT_metal_surface/platformCreateSurface_metal.txt[]
+endif::VK_EXT_metal_surface[]
+
+ifdef::VK_QNX_screen_surface[]
+include::{chapters}/VK_QNX_screen_surface/platformCreateSurface_screen.txt[]
+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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroySurfaceKHR.txt[]
+--
+
+ifdef::VK_KHR_display[]
+include::{chapters}/VK_KHR_display/display.txt[]
+endif::VK_KHR_display[]
+
+ifdef::VK_EXT_headless_surface[]
+include::{chapters}/VK_EXT_headless_surface/headless.txt[]
+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']
+--
+To determine whether a queue family of a physical device supports
+presentation to a given surface, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceSurfaceSupportKHR.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+ifdef::VK_KHR_android_surface[]
+include::{chapters}/VK_KHR_android_surface/platformQuerySupport_android.txt[]
+endif::VK_KHR_android_surface[]
+
+ifdef::VK_KHR_wayland_surface[]
+include::{chapters}/VK_KHR_wayland_surface/platformQuerySupport_wayland.txt[]
+endif::VK_KHR_wayland_surface[]
+
+ifdef::VK_KHR_win32_surface[]
+include::{chapters}/VK_KHR_win32_surface/platformQuerySupport_win32.txt[]
+endif::VK_KHR_win32_surface[]
+
+ifdef::VK_KHR_xcb_surface[]
+include::{chapters}/VK_KHR_xcb_surface/platformQuerySupport_xcb.txt[]
+endif::VK_KHR_xcb_surface[]
+
+ifdef::VK_KHR_xlib_surface[]
+include::{chapters}/VK_KHR_xlib_surface/platformQuerySupport_xlib.txt[]
+endif::VK_KHR_xlib_surface[]
+
+ifdef::VK_EXT_directfb_surface[]
+include::{chapters}/VK_EXT_directfb_surface/platformQuerySupport_directfb.txt[]
+endif::VK_EXT_directfb_surface[]
+
+ifdef::VK_FUCHSIA_imagepipe_surface[]
+include::{chapters}/VK_FUCHSIA_imagepipe_surface/platformQuerySupport_imagepipe.txt[]
+endif::VK_FUCHSIA_imagepipe_surface[]
+
+ifdef::VK_GGP_stream_descriptor_surface[]
+include::{chapters}/VK_GGP_stream_descriptor_surface/platformQuerySupport_streamdescriptor.txt[]
+endif::VK_GGP_stream_descriptor_surface[]
+
+ifdef::VK_MVK_ios_surface[]
+include::{chapters}/VK_MVK_ios_surface/platformQuerySupport_ios.txt[]
+endif::VK_MVK_ios_surface[]
+
+ifdef::VK_MVK_macos_surface[]
+include::{chapters}/VK_MVK_macos_surface/platformQuerySupport_macos.txt[]
+endif::VK_MVK_macos_surface[]
+
+ifdef::VK_NN_vi_surface[]
+include::{chapters}/VK_NN_vi_surface/platformQuerySupport_vi.txt[]
+endif::VK_NN_vi_surface[]
+
+ifdef::VK_QNX_screen_surface[]
+include::{chapters}/VK_QNX_screen_surface/platformQuerySupport_screen.txt[]
+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.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.txt[]
+--
+
+[open,refpage='VkSurfaceCapabilitiesKHR',desc='Structure describing capabilities of a surface',type='structs']
+--
+The sname:VkSurfaceCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkSurfaceCapabilitiesKHR.txt[]
+
+// 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.txt[]
+--
+
+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.txt[]
+
+  * 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.
+
+ifdef::VK_EXT_full_screen_exclusive+VK_KHR_win32_surface[]
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_info_physical_device_common.txt[]
+  * [[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[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2KHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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[]
+
+ifdef::VK_KHR_win32_surface+VK_EXT_full_screen_exclusive[]
+.Valid Usage
+****
+  * [[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[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSurfaceInfo2KHR.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkSurfaceCapabilities2KHR.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.
+
+
+include::{generated}/validity/structs/VkSurfaceProtectedCapabilitiesKHR.txt[]
+--
+endif::VK_KHR_surface_protected_capabilities[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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 overriden by flink:vkSetLocalDimmingAMD during
+    the lifetime of the swapchain.
+
+include::{generated}/validity/structs/VkDisplayNativeHdrSurfaceCapabilitiesAMD.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_EXT_full_screen_exclusive[]
+endif::VK_KHR_get_surface_capabilities2[]
+
+ifdef::VK_EXT_display_surface_counter[]
+include::{chapters}/VK_EXT_display_surface_counter/surface_capabilities.txt[]
+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.txt[]
+
+  * 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.txt[]
+
+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, which contains the following values:
+
+include::{generated}/api/enums/VkCompositeAlphaFlagBitsKHR.txt[]
+
+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.txt[]
+
+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.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceFormatsKHR.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+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.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_info_physical_device_common.txt[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfaceFormats2KHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkSurfaceFormat2KHR.txt[]
+--
+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.txt[]
+
+  * 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[]
+
+[NOTE]
+.Note
+====
+In the initial release of the `VK_KHR_surface` and `apiext:VK_KHR_swapchain`
+extensions, the token ename: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
+ename: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.
+====
+
+The color components of non-linear color space swap chain images must: have
+had the appropriate transfer function applied.
+The color space selected for the swap chain 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.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfacePresentModesKHR.txt[]
+--
+
+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.txt[]
+
+  * 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_common.txt[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceSurfacePresentModes2EXT.txt[]
+--
+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.txt[]
+
+  * 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 re-use 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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']
+--
+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.txt[]
+
+  * 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::{generated}/validity/protos/vkGetDeviceGroupPresentCapabilitiesKHR.txt[]
+--
+
+[open,refpage='VkDeviceGroupPresentCapabilitiesKHR',desc='Present capabilities from other physical devices',type='structs']
+--
+The sname:VkDeviceGroupPresentCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkDeviceGroupPresentCapabilitiesKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+[open,refpage='VkDeviceGroupPresentModeFlagBitsKHR',desc='Bitmask specifying supported device group present modes',type='enums']
+--
+Bits which may: be set in
+slink:VkDeviceGroupPresentCapabilitiesKHR::pname:modes to indicate which
+device group presentation modes are supported are:
+
+include::{generated}/api/enums/VkDeviceGroupPresentModeFlagBitsKHR.txt[]
+
+  * 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.txt[]
+
+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']
+--
+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.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/surface_physical_device_common.txt[]
+****
+
+include::{generated}/validity/protos/vkGetPhysicalDevicePresentRectanglesKHR.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_GOOGLE_display_timing[]
+include::{chapters}/VK_GOOGLE_display_timing/queries.txt[]
+endif::VK_GOOGLE_display_timing[]
+
+ifdef::VK_KHR_present_wait[]
+include::{chapters}/VK_KHR_present_wait/present_wait.txt[]
+endif::VK_KHR_present_wait[]
+
+include::{chapters}/VK_KHR_swapchain/wsi.txt[]
+endif::VK_KHR_swapchain[]
diff --git a/registry/vulkan/chapters/VK_KHR_swapchain/PresentId.txt b/registry/vulkan/chapters/VK_KHR_swapchain/PresentId.txt
new file mode 100644
index 0000000..9b57bcc
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_swapchain/PresentId.txt
@@ -0,0 +1,68 @@
+// Copyright 2019-2021 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.txt[]
+
+  * pname:sType is the type of 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 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.txt[]
+--
+
+ifdef::VK_KHR_present_wait[]
+include::../VK_KHR_present_wait/WaitForPresent.txt[]
+endif::VK_KHR_present_wait[]
diff --git a/registry/vulkan/chapters/VK_KHR_swapchain/wsi.txt b/registry/vulkan/chapters/VK_KHR_swapchain/wsi.txt
new file mode 100644
index 0000000..64b5160
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_swapchain/wsi.txt
@@ -0,0 +1,1506 @@
+// Copyright 2014-2021 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']
+--
+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.txt[]
+
+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
+fname:vkAcquireNextImageKHR, and before it is released by
+fname:vkQueuePresentKHR.
+This includes transitioning the image layout and rendering commands.
+
+An application can: acquire use of a presentable image with
+fname: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 fname:vkQueuePresentKHR,
+which releases the acquisition of the image.
+
+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.txt[]
+endif::VK_KHR_shared_presentable_image[]
+
+[open,refpage='vkCreateSwapchainKHR',desc='Create a swapchain',type='protos']
+--
+To create a swapchain, call:
+
+include::{generated}/api/protos/vkCreateSwapchainKHR.txt[]
+
+  * 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.
+
+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:oldSwapchain.
+If the command succeeds in this case, the newly created swapchain will
+automatically acquire exclusive full-screen access from pname: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_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::{generated}/validity/protos/vkCreateSwapchainKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+====
+  * 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.
+====
+  * 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.
+
+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[]
+====
+
+.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
+  * [[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
+  * [[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
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-VkSwapchainCreateInfoKHR-imageUsage-01276]]
+    pname:imageUsage must: be a subset of the supported usage flags present
+    in the pname:supportedUsageFlags member of the
+    sname:VkSurfaceCapabilitiesKHR structure returned by
+    fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
+endif::VK_KHR_shared_presentable_image[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[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
+  * [[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[]
+  * [[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::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[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
+  * [[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[]
+****
+
+include::{generated}/validity/structs/VkSwapchainCreateInfoKHR.txt[]
+--
+
+[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.txt[]
+
+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.
+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[]
+--
+
+[open,refpage='VkSwapchainCreateFlagsKHR',desc='Bitmask of VkSwapchainCreateFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkSwapchainCreateFlagsKHR.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+
+.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.txt[]
+
+  * 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.txt[]
+
+.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.txt[]
+endif::VK_EXT_display_control[]
+
+As mentioned above, if fname:vkCreateSwapchainKHR succeeds, it will return a
+handle to a swapchain containing an array of at least pname: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:surface must: not be destroyed until after the swapchain is
+destroyed.
+
+If pname:oldSwapchain is dlink:VK_NULL_HANDLE, and the native window
+referred to by pname: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: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:surface must: not become associated
+with a non-Vulkan graphics API surface before all associated Vulkan
+swapchains have been destroyed.
+
+Like core functions, several WSI functions, including
+fname:vkCreateSwapchainKHR return ename:VK_ERROR_DEVICE_LOST if the logical
+device was lost.
+See <<devsandqueues-lost-device,Lost Device>>.
+As with most core objects, sname:VkSwapchainKHR is a child of the device and
+is affected by the lost state; it must: be destroyed before destroying the
+sname:VkDevice.
+However, sname:VkSurfaceKHR is not a child of any sname:VkDevice and is not
+otherwise 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.
+
+[NOTE]
+.Note
+====
+As mentioned in <<devsandqueues-lost-device,Lost Device>>, after a lost
+device event, the sname:VkPhysicalDevice may: also be lost.
+If other sname:VkPhysicalDevice are available, they can: be used together
+with the same sname:VkSurfaceKHR to create the new sname:VkSwapchainKHR,
+however the application must: query the surface capabilities again, because
+they may: differ on a per-physical device basis.
+====
+
+[open,refpage='vkDestroySwapchainKHR',desc='Destroy a swapchain object',type='protos']
+--
+To destroy a swapchain object call:
+
+include::{generated}/api/protos/vkDestroySwapchainKHR.txt[]
+
+  * 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.txt[]
+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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroySwapchainKHR.txt[]
+--
+
+ifdef::VK_KHR_display_swapchain[]
+include::{chapters}/VK_KHR_display_swapchain/create_shared_swapchains.txt[]
+endif::VK_KHR_display_swapchain[]
+
+[open,refpage='vkGetSwapchainImagesKHR',desc='Obtain the array of presentable images associated with a swapchain',type='protos']
+--
+To obtain the array of presentable images associated with a swapchain, call:
+
+include::{generated}/api/protos/vkGetSwapchainImagesKHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetSwapchainImagesKHR.txt[]
+--
+
+[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.
+====
+
+Images returned by flink:vkGetSwapchainImagesKHR are fully backed by memory
+before they are passed to the application.
+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.
+
+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.
+
+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:vkBindImageMemory2KHR 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']
+--
+To acquire an available presentable image to use, and retrieve the index of
+that image, call:
+
+include::{generated}/api/protos/vkAcquireNextImageKHR.txt[]
+
+  * 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.
+
+.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-swapchain-01802]]
+    If the number of currently acquired images is greater than the
+    difference between the number of images in pname:swapchain and the value
+    of slink:VkSurfaceCapabilitiesKHR::pname:minImageCount as returned by a
+    call to flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR with the
+    pname:surface used to create pname:swapchain, pname:timeout 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.txt[]
+--
+
+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.
+If pname:semaphore is not dlink:VK_NULL_HANDLE, the application may assume
+that, once fname:vkAcquireNextImageKHR returns, the semaphore signal
+operation referenced by pname:semaphore has been submitted for execution.
+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.
+
+fname:vkAcquireNextImageKHR should: not be called if the number of images
+that the application has currently acquired is greater than the difference
+between the number of images in pname:swapchain and the value of
+slink:VkSurfaceCapabilitiesKHR::pname:minImageCount.
+If fname:vkAcquireNextImageKHR is called when the number of images that the
+application has currently acquired is less or equal than the difference
+between the number of images in pname:swapchain and the value of
+slink:VkSurfaceCapabilitiesKHR::pname:minImageCount,
+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.
+====
+
+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.
+
+[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.
+If presentation does succeed, the mapping from the presented image to the
+native surface is 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']
+--
+To acquire an available presentable image to use, and retrieve the index of
+that image, call:
+
+include::{generated}/api/protos/vkAcquireNextImage2KHR.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+  * [[VUID-vkAcquireNextImage2KHR-swapchain-01803]]
+    If the number of currently acquired images is greater than the
+    difference between the number of images in the pname:swapchain member of
+    pname:pAcquireInfo and the value of
+    slink:VkSurfaceCapabilitiesKHR::pname:minImageCount as returned by a
+    call to flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR with 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.txt[]
+--
+
+[open,refpage='VkAcquireNextImageInfoKHR',desc='Structure specifying parameters of the acquire',type='structs']
+--
+The sname:VkAcquireNextImageInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkAcquireNextImageInfoKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+[open,refpage='vkQueuePresentKHR',desc='Queue an image for presentation',type='protos']
+--
+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.txt[]
+
+  * 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.
+====
+
+.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
+  * [[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
+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 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+    A given swapchain must: not appear in this list more than once.
+  * 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
+****
+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[]
+****
+
+include::{generated}/validity/structs/VkPresentInfoKHR.txt[]
+--
+
+ifdef::VK_KHR_incremental_present[]
+include::{chapters}/VK_KHR_incremental_present/wsi.txt[]
+endif::VK_KHR_incremental_present[]
+
+ifdef::VK_KHR_display_swapchain[]
+include::{chapters}/VK_KHR_display_swapchain/display_swapchain_present.txt[]
+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.txt[]
+
+  * pname:sType is the type of 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::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.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+
+ifdef::VK_GOOGLE_display_timing[]
+include::{chapters}/VK_GOOGLE_display_timing/PresentTimeInfo.txt[]
+endif::VK_GOOGLE_display_timing[]
+ifdef::VK_KHR_present_id[]
+include::PresentId.txt[]
+endif::VK_KHR_present_id[]
+
+ifdef::VK_GGP_frame_token[]
+include::{chapters}/VK_GGP_frame_token.txt[]
+endif::VK_GGP_frame_token[]
+
+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.txt[]
+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_hdr_metadata[]
+include::{chapters}/VK_EXT_hdr_metadata.txt[]
+endif::VK_EXT_hdr_metadata[]
diff --git a/registry/vulkan/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.txt b/registry/vulkan/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.txt
new file mode 100644
index 0000000..7f8b24a
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_wayland_surface/platformCreateSurface_wayland.txt
@@ -0,0 +1,100 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_wayland,platformCreateSurface_wayland]]
+=== Wayland Platform
+
+[open,refpage='vkCreateWaylandSurfaceKHR',desc='Create a slink:VkSurfaceKHR object for a Wayland window',type='protos']
+--
+To create a sname:VkSurfaceKHR object for a Wayland surface, call:
+
+include::{generated}/api/protos/vkCreateWaylandSurfaceKHR.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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
+sname:VkSwapchainKHR objects referenced by pname:pPresentInfo.
+If the swapchain is created with a present mode of
+ename:VK_PRESENT_MODE_MAILBOX_KHR or ename:VK_PRESENT_MODE_IMMEDIATE_KHR,
+then the corresponding code:wl_surface.attach, code:wl_surface.damage, and
+code:wl_surface.commit request 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.
+For full control over interactions between Vulkan rendering and other
+Wayland protocol requests and events, a present mode of
+ename:VK_PRESENT_MODE_MAILBOX_KHR should: be used.
+
+[open,refpage='VkWaylandSurfaceCreateFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkWaylandSurfaceCreateFlagsKHR.txt[]
+
+tname:VkWaylandSurfaceCreateFlagsKHR is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.txt b/registry/vulkan/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.txt
new file mode 100644
index 0000000..b86bb0c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_wayland_surface/platformQuerySupport_wayland.txt
@@ -0,0 +1,33 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_walyand,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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.txt b/registry/vulkan/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.txt
new file mode 100644
index 0000000..c1c3701
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_win32_surface/platformCreateSurface_win32.txt
@@ -0,0 +1,78 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_win32,platformCreateSurface_win32]]
+
+=== Win32 Platform
+
+[open,refpage='vkCreateWin32SurfaceKHR',desc='Create a VkSurfaceKHR object for an Win32 native window',type='protos']
+--
+To create a sname:VkSurfaceKHR object for a Win32 window, call:
+
+include::{generated}/api/protos/vkCreateWin32SurfaceKHR.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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, it is only possible to create a new swapchain on
+this platform with pname:imageExtent being equal to the current size of the
+window.
+
+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.txt[]
+
+tname:VkWin32SurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.txt b/registry/vulkan/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.txt
new file mode 100644
index 0000000..b6a4478
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_win32_surface/platformQuerySupport_win32.txt
@@ -0,0 +1,30 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_win32,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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.txt b/registry/vulkan/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.txt
new file mode 100644
index 0000000..63fd10a
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_xcb_surface/platformCreateSurface_xcb.txt
@@ -0,0 +1,92 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_xcb,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']
+--
+To create a sname:VkSurfaceKHR object for an X11 window, using the XCB
+client-side library, call:
+
+include::{generated}/api/protos/vkCreateXcbSurfaceKHR.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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, it is only possible to create a new swapchain on
+this platform with pname:imageExtent being equal to the current size of the
+window.
+
+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.txt[]
+
+tname:VkXcbSurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.txt b/registry/vulkan/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.txt
new file mode 100644
index 0000000..d56a635
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_xcb_surface/platformQuerySupport_xcb.txt
@@ -0,0 +1,33 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_xcb,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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.txt b/registry/vulkan/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.txt
new file mode 100644
index 0000000..2f2ecd4
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_xlib_surface/platformCreateSurface_xlib.txt
@@ -0,0 +1,96 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_xlib,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']
+--
+To create a sname:VkSurfaceKHR object for an X11 window, using the Xlib
+client-side library, call:
+
+include::{generated}/api/protos/vkCreateXlibSurfaceKHR.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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, it is only possible to create a new swapchain on
+this platform with pname:imageExtent being equal to the current size of the
+window.
+
+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.txt[]
+
+tname:VkXlibSurfaceCreateFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.txt b/registry/vulkan/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.txt
new file mode 100644
index 0000000..6e97e54
--- /dev/null
+++ b/registry/vulkan/chapters/VK_KHR_xlib_surface/platformQuerySupport_xlib.txt
@@ -0,0 +1,32 @@
+// Copyright 2014-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_xlib,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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.txt b/registry/vulkan/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.txt
new file mode 100644
index 0000000..a6d5db5
--- /dev/null
+++ b/registry/vulkan/chapters/VK_MVK_ios_surface/platformCreateSurface_ios.txt
@@ -0,0 +1,71 @@
+// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_ios,platformCreateSurface_ios]]
+=== iOS Platform
+
+[open,refpage='vkCreateIOSSurfaceMVK',desc='Create a VkSurfaceKHR object for an iOS UIView',type='protos']
+--
+To create a sname:VkSurfaceKHR object for an iOS code:UIView or
+basetype:CAMetalLayer, call:
+
+include::{generated}/api/protos/vkCreateIOSSurfaceMVK.txt[]
+
+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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkIOSSurfaceCreateFlagsMVK',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkIOSSurfaceCreateFlagsMVK.txt[]
+
+tname:VkIOSSurfaceCreateFlagsMVK is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.txt b/registry/vulkan/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.txt
new file mode 100644
index 0000000..18ba39d
--- /dev/null
+++ b/registry/vulkan/chapters/VK_MVK_ios_surface/platformQuerySupport_ios.txt
@@ -0,0 +1,10 @@
+// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_ios,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/registry/vulkan/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.txt b/registry/vulkan/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.txt
new file mode 100644
index 0000000..2e16e68
--- /dev/null
+++ b/registry/vulkan/chapters/VK_MVK_macos_surface/platformCreateSurface_macos.txt
@@ -0,0 +1,72 @@
+// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_macos,platformCreateSurface_macos]]
+=== macOS Platform
+
+[open,refpage='vkCreateMacOSSurfaceMVK',desc='Create a VkSurfaceKHR object for a macOS NSView',type='protos']
+--
+To create a sname:VkSurfaceKHR object for a macOS code:NSView or
+basetype:CAMetalLayer, call:
+
+include::{generated}/api/protos/vkCreateMacOSSurfaceMVK.txt[]
+
+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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkMacOSSurfaceCreateFlagsMVK',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkMacOSSurfaceCreateFlagsMVK.txt[]
+
+tname:VkMacOSSurfaceCreateFlagsMVK is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.txt b/registry/vulkan/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.txt
new file mode 100644
index 0000000..32f9fa7
--- /dev/null
+++ b/registry/vulkan/chapters/VK_MVK_macos_surface/platformQuerySupport_macos.txt
@@ -0,0 +1,10 @@
+// Copyright (c) 2018-2020 The Brenwill Workshop Ltd.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_macos,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/registry/vulkan/chapters/VK_NN_vi_surface/platformCreateSurface_vi.txt b/registry/vulkan/chapters/VK_NN_vi_surface/platformCreateSurface_vi.txt
new file mode 100644
index 0000000..97ed676
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NN_vi_surface/platformCreateSurface_vi.txt
@@ -0,0 +1,73 @@
+// Copyright (c) 2018-2020 Nintendo
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_vi,platformCreateSurface_vi]]
+=== VI Platform
+
+[open,refpage='vkCreateViSurfaceNN',desc='Create a slink:VkSurfaceKHR object for a VI layer',type='protos']
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkViSurfaceCreateFlagsNN',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkViSurfaceCreateFlagsNN.txt[]
+
+tname:VkViSurfaceCreateFlagsNN is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_NN_vi_surface/platformQuerySupport_vi.txt b/registry/vulkan/chapters/VK_NN_vi_surface/platformQuerySupport_vi.txt
new file mode 100644
index 0000000..bfaf3eb
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NN_vi_surface/platformQuerySupport_vi.txt
@@ -0,0 +1,11 @@
+// Copyright (c) 2018-2020 Nintendo
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_vi,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/registry/vulkan/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.txt b/registry/vulkan/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.txt
new file mode 100644
index 0000000..ea0d0ba
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_acquire_winrt_display/acquire_winrt_display.txt
@@ -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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.txt b/registry/vulkan/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.txt
new file mode 100644
index 0000000..5d8a551
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_clip_space_w_scaling/vertexpostproc.txt
@@ -0,0 +1,95 @@
+// 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.txt[]
+
+  * pname:sType is the type of 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
+    sname: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.txt[]
+--
+
+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.
+
+[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.txt[]
+
+  * 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
+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.txt[]
+--
+
+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.txt[]
+
+  * pname:xcoeff and pname:ycoeff are the viewport's W scaling factor for x
+    and y respectively.
+
+include::{generated}/validity/structs/VkViewportWScalingNV.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.txt b/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.txt
new file mode 100644
index 0000000..2cd4914
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.txt
@@ -0,0 +1,150 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+== Device Loss Debugging
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+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_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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+
+The stages at which a checkpoint marker can: be executed are
+implementation-defined and can: be queried by calling
+flink:vkGetPhysicalDeviceQueueFamilyProperties2.
+--
+endif::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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.txt b/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.txt
new file mode 100644
index 0000000..b2d62d3
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.txt
@@ -0,0 +1,43 @@
+// Copyright (c) 2018-2020 NVIDIA Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+ifdef::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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.txt b/registry/vulkan/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.txt
new file mode 100644
index 0000000..cfbc2cb
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_device_generated_commands/cmdProcessAllSequences.txt
@@ -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/registry/vulkan/chapters/VK_NV_device_generated_commands/generatedcommands.txt b/registry/vulkan/chapters/VK_NV_device_generated_commands/generatedcommands.txt
new file mode 100644
index 0000000..c680456
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_device_generated_commands/generatedcommands.txt
@@ -0,0 +1,35 @@
+// 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>>.
+  * Retrieve device addresses by flink:vkGetBufferDeviceAddressEXT for
+    setting buffers on the device.
+  * 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::indirectcommands.txt[]
+
+include::generation.txt[]
diff --git a/registry/vulkan/chapters/VK_NV_device_generated_commands/generation.txt b/registry/vulkan/chapters/VK_NV_device_generated_commands/generation.txt
new file mode 100644
index 0000000..6574dd3
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_device_generated_commands/generation.txt
@@ -0,0 +1,291 @@
+// 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.txt[]
+
+  * 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
+****
+
+include::{generated}/validity/protos/vkGetGeneratedCommandsMemoryRequirementsNV.txt[]
+--
+
+[open,refpage='VkGeneratedCommandsMemoryRequirementsInfoNV',desc='Structure specifying parameters for the reservation of preprocess buffer space',type='structs']
+--
+include::{generated}/api/structs/VkGeneratedCommandsMemoryRequirementsInfoNV.txt[]
+
+  * pname:sType is the type of 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
+****
+
+include::{generated}/validity/structs/VkGeneratedCommandsMemoryRequirementsInfoNV.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+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]]
+    sname:VkGeneratedCommandsInfoNV::pname:pipeline must: match the current
+    bound pipeline at
+    sname: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.txt[]
+--
+
+[open,refpage='VkGeneratedCommandsInfoNV',desc='Structure specifying parameters for the generation of commands',type='structs']
+--
+include::{generated}/api/structs/VkGeneratedCommandsInfoNV.txt[]
+
+  * pname:sType is the type of 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 `VK_TRUE`, then the preprocessing
+    step is skipped and data is only read from this buffer.
+  * 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
+  * [[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
+****
+
+include::{generated}/validity/structs/VkGeneratedCommandsInfoNV.txt[]
+--
+
+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.txt[]
+
+  * 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.txt[]
+--
+
diff --git a/registry/vulkan/chapters/VK_NV_device_generated_commands/indirectcommands.txt b/registry/vulkan/chapters/VK_NV_device_generated_commands/indirectcommands.txt
new file mode 100644
index 0000000..e188d2e
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_device_generated_commands/indirectcommands.txt
@@ -0,0 +1,621 @@
+// 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.txt[]
+--
+
+
+=== 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 );
+  }
+}
+~~~~
+
+.Valid Usage
+****
+  * [[VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-02930]]
+    The pname:pipelineBindPoint must: be
+    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+  * [[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 prior 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)
+  * [[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
+****
+
+include::{generated}/validity/structs/VkIndirectCommandsLayoutCreateInfoNV.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+--
+
+[open,refpage='VkIndirectCommandsLayoutUsageFlagsNV',desc='Bitmask of VkIndirectCommandsLayoutUsageFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkIndirectCommandsLayoutUsageFlagsNV.txt[]
+
+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.txt[]
+
+  * 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
+  * [[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`
+  * [[VUID-vkDestroyIndirectCommandsLayoutNV-deviceGeneratedCommands-02941]]
+    The <<features-deviceGeneratedCommands,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkDestroyIndirectCommandsLayoutNV.txt[]
+--
+
+
+=== 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.txt[]
+
+  * 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.txt[]
+--
+
+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[]
+
+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.txt[]
+
+  * pname:index 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkIndirectStateFlagBitsNV',desc='Bitmask specifiying 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.txt[]
+
+* ename:VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV allows to toggle the
+  elink:VkFrontFace rasterization state for subsequent draw operations.
+--
+
+[open,refpage='VkIndirectStateFlagsNV',desc='Bitmask of VkIndirectStateFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkIndirectStateFlagsNV.txt[]
+
+tname:VkIndirectStateFlagsNV is a bitmask type for setting a mask of zero or
+more elink:VkIndirectStateFlagBitsNV.
+--
+
+
+=== 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 which
+specify command tokens (other elements of the array specify command
+parameters) are:
+
+include::{generated}/api/enums/VkIndirectCommandsTokenTypeNV.txt[]
+
+.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[]
+|====
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 that contains 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-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.txt[]
+--
+
+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){
+    VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV:
+      VkBindShaderGroupIndirectCommandNV* bind = input;
+
+      vkCmdBindPipelineShaderGroupNV(cmd, indirectCommandsLayout.pipelineBindPoint,
+        pipeline, bind->groupIndex);
+    break;
+
+    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;
+
+    VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV:
+      uint32_t* data = input;
+
+      vkCmdPushConstants(cmd,
+        token.pushconstantPipelineLayout
+        token.pushconstantStageFlags,
+        token.pushconstantOffset,
+        token.pushconstantSize, data);
+    break;
+
+    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;
+
+    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;
+
+    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV:
+      vkCmdDrawIndexedIndirect(cmd,
+        stream.buffer, offset, 1, 0);
+    break;
+
+    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV:
+      vkCmdDrawIndirect(cmd,
+        stream.buffer,
+        offset, 1, 0);
+    break;
+
+    // only available if VK_NV_mesh_shader is supported
+    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV:
+      vkCmdDrawMeshTasksIndirectNV(cmd,
+        stream.buffer, offset, 1, 0);
+    break;
+    }
+  }
+}
+---------------------------------------------------
diff --git a/registry/vulkan/chapters/VK_NV_external_memory/allocate_memory.txt b/registry/vulkan/chapters/VK_NV_external_memory/allocate_memory.txt
new file mode 100644
index 0000000..317fa5a
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_external_memory/allocate_memory.txt
@@ -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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_NV_external_memory_capabilities/external_image_format.txt b/registry/vulkan/chapters/VK_NV_external_memory_capabilities/external_image_format.txt
new file mode 100644
index 0000000..156187e
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_external_memory_capabilities/external_image_format.txt
@@ -0,0 +1,96 @@
+// 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.txt[]
+
+  * 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.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.txt[]
+--
+
+[open,refpage='VkExternalImageFormatPropertiesNV',desc='Structure specifying external image format properties',type='structs']
+--
+The sname:VkExternalImageFormatPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkExternalImageFormatPropertiesNV.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+tname:VkExternalMemoryFeatureFlagsNV is a bitmask type for setting a mask of
+zero or more elink:VkExternalMemoryFeatureFlagBitsNV.
+--
diff --git a/registry/vulkan/chapters/VK_NV_external_memory_win32/get_handle_win32.txt b/registry/vulkan/chapters/VK_NV_external_memory_win32/get_handle_win32.txt
new file mode 100644
index 0000000..8871f5c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_external_memory_win32/get_handle_win32.txt
@@ -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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_NV_external_memory_win32/handle_permissions.txt b/registry/vulkan/chapters/VK_NV_external_memory_win32/handle_permissions.txt
new file mode 100644
index 0000000..3eed85c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_external_memory_win32/handle_permissions.txt
@@ -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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_NV_external_memory_win32/import_memory_win32.txt b/registry/vulkan/chapters/VK_NV_external_memory_win32/import_memory_win32.txt
new file mode 100644
index 0000000..679081f
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_external_memory_win32/import_memory_win32.txt
@@ -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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+
+tname:VkExternalMemoryHandleTypeFlagsNV is a bitmask type for setting a mask
+of zero or more elink:VkExternalMemoryHandleTypeFlagBitsNV.
+--
+
diff --git a/registry/vulkan/chapters/VK_NV_mesh_shader/drawing.txt b/registry/vulkan/chapters/VK_NV_mesh_shader/drawing.txt
new file mode 100644
index 0000000..857638d
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_mesh_shader/drawing.txt
@@ -0,0 +1,173 @@
+// 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.
+
+
+[open,refpage='vkCmdDrawMeshTasksNV',desc='Draw mesh task work items',type='protos']
+--
+:refpage: vkCmdDrawMeshTasksNV
+
+To record a draw that uses the mesh pipeline, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksNV.txt[]
+
+  * 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.txt[]
+  * [[VUID-vkCmdDrawMeshTasksNV-taskCount-02119]]
+    pname:taskCount must: be less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxDrawMeshTasksCount
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksNV.txt[]
+--
+
+[open,refpage='vkCmdDrawMeshTasksIndirectNV',desc='Issue an indirect mesh tasks draw into a command buffer',type='protos']
+--
+:refpage: vkCmdDrawMeshTasksIndirectNV
+
+To record an indirect mesh tasks draw, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksIndirectNV.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
+include::{chapters}/commonvalidity/draw_indirect_drawcount.txt[]
+  * [[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
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksIndirectNV.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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 draw with the draw count sourced from a
+buffer, call:
+
+include::{generated}/api/protos/vkCmdDrawMeshTasksIndirectCountNV.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
+include::{chapters}/commonvalidity/draw_indirect_count_common.txt[]
+  * [[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
+****
+
+include::{generated}/validity/protos/vkCmdDrawMeshTasksIndirectCountNV.txt[]
+
+--
diff --git a/registry/vulkan/chapters/VK_NV_mesh_shader/mesh.txt b/registry/vulkan/chapters/VK_NV_mesh_shader/mesh.txt
new file mode 100644
index 0000000..4a2cf8c
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_mesh_shader/mesh.txt
@@ -0,0 +1,132 @@
+// 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 using
+the <<interfaces-builtin-variables,built-in variable>> code:TaskCountNV.
+This value must: be less than or equal to
+sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxTaskOutputCount.
+
+It can also output user-defined data that is passed as input to all mesh
+shader invocations that the task creates.
+These outputs are decorated as code:PerTaskNV.
+
+
+[[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, any outputs written as
+code:PerTaskNV 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 Primitives
+
+A mesh shader generates primitives in one of three output modes: points,
+lines, or triangles.
+The primitive mode is specified in the shader using an code:OpExecutionMode
+instruction with the code:OutputPoints, code:OutputLinesNV, or
+code:OutputTrianglesNV modes, respectively.
+Each mesh shader must: include exactly one output primitive mode.
+
+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.
+
+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.
+
+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.
+These resulting primitives are then further processed as described in
+<<primsrast>>.
+
+
+[[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.
+
+
+[[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/registry/vulkan/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.txt b/registry/vulkan/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.txt
new file mode 100644
index 0000000..2b74ba3
--- /dev/null
+++ b/registry/vulkan/chapters/VK_NV_win32_keyed_mutex/keyed_mutex_submit.txt
@@ -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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.txt b/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.txt
new file mode 100644
index 0000000..fbccc49
--- /dev/null
+++ b/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_blits.txt
@@ -0,0 +1,90 @@
+// 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:VkImageBlit2KHR, 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~ * (x~Src1~ - x~Src0~)#
+  {empty}:: [eq]#v~scaled~ = v~src_scaled~ * (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~ * 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/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_copies.txt b/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_copies.txt
new file mode 100644
index 0000000..7e13f21
--- /dev/null
+++ b/registry/vulkan/chapters/VK_QCOM_rotated_copies/rotated_addressing_copies.txt
@@ -0,0 +1,89 @@
+// Copyright (c) 2020 Qualcomm Technologies Incorporated
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+
+[[copies-buffers-images-rotation-addressing]]
+=== Buffer and Image Addressing with Rotation
+
+When slink:VkCopyCommandTransformInfoQCOM is in the pname:pNext chain of
+slink:VkBufferImageCopy2KHR, a _rotated copy_ is specified.
+For both flink:vkCmdCopyImageToBuffer2KHR and
+flink:vkCmdCopyBufferToImage2KHR, a rotation is applied to the region used
+for image accesses, but a non-rotated region is used for buffer accesses.
+In the case of rotated flink:vkCmdCopyImageToBuffer2KHR, the source image
+region is rotated.
+In the case of rotated flink:vkCmdCopyBufferToImage2KHR, the destination
+image region is rotated.
+
+For a _rotated copy_, the following description of rotated addressing
+replaces the description in <<copies-buffers-images-addressing,Buffer and
+Image Addressing>>.
+
+The following code computes rotation of unnormalized coordinates.
+[source,c]
+---------------------------------------------------
+// Forward rotation of unnormalized coordinates
+VkOffset2D RotateUV(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 = in.x;
+            break;
+        case VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR:
+            out.x = -in.x;
+            out.y = -in.y;
+            break;
+        case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR:
+            out.x = in.y;
+            out.y = -in.x;
+            break;
+    }
+    return out;
+}
+---------------------------------------------------
+
+Pseudocode for image/buffer addressing of uncompressed formats with rotation
+is:
+
+[source,c]
+---------------------------------------------------
+rowLength = region->bufferRowLength;
+if (rowLength == 0)
+    rowLength = region->imageExtent.width;
+
+imageHeight = region->bufferImageHeight;
+if (imageHeight == 0)
+    imageHeight = region->imageExtent.height;
+
+texelBlockSize = <texel block size of the format of the src/dstImage>;
+
+// Buffer addressing is unaffected by rotation:
+address of (x,y,z) = region->bufferOffset + (((z * imageHeight) + y) * rowLength + x) * texelBlockSize;
+
+// When copying from buffer to image, the source buffer coordinates x,y,z range from (0,0,0) to
+// region->imageExtent.{width,height,depth}.  The source extent is rotated by the specified
+// VK_SURFACE_TRANSFORM, centered on the imageOffset, to define a rotated destination region.
+// For each source buffer texel with coordinates (x,y) the rotated destination image texel has
+// coordinates (x',y') defined as:
+(x',y')= RotateUV(x,y) + ImageOffset.{x,y}
+
+// When copying from image to buffer, the the destination buffer coordinates x,y,z range from (0,0,0) to
+// region->imageExtent.{width,height,depth}.  The destination extent is rotated by the specified
+//  VK_SURFACE_TRANSFORM, centered on the imageOffset, to define a rotated source region.  For each destination
+// buffer texel with coordinates (x,y) the rotated source image texel has coordinates (x',y') defined as:
+(x',y')= RotateUV(x,y) + ImageOffset.{x,y}
+
+---------------------------------------------------
+
+Note that pname:imageOffset does not affect addressing calculations for
+buffer memory.
+Instead, pname:bufferOffset can: be used to select the starting address in
+buffer memory.
diff --git a/registry/vulkan/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.txt b/registry/vulkan/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.txt
new file mode 100644
index 0000000..af41fd8
--- /dev/null
+++ b/registry/vulkan/chapters/VK_QNX_screen_surface/platformCreateSurface_screen.txt
@@ -0,0 +1,59 @@
+// Copyright (c) 2021 BlackBerry Limited.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformCreateSurface_screen,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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkScreenSurfaceCreateFlagsQNX',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkScreenSurfaceCreateFlagsQNX.txt[]
+
+tname:VkScreenSurfaceCreateFlagsQNX is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
diff --git a/registry/vulkan/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.txt b/registry/vulkan/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.txt
new file mode 100644
index 0000000..9da7a27
--- /dev/null
+++ b/registry/vulkan/chapters/VK_QNX_screen_surface/platformQuerySupport_screen.txt
@@ -0,0 +1,31 @@
+// Copyright (c) 2021 BlackBerry Limited.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[platformQuerySupport_screen,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.txt[]
+
+  * 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.txt[]
+--
diff --git a/registry/vulkan/chapters/accelstructures.txt b/registry/vulkan/chapters/accelstructures.txt
new file mode 100755
index 0000000..a01f655
--- /dev/null
+++ b/registry/vulkan/chapters/accelstructures.txt
@@ -0,0 +1,2356 @@
+// Copyright 2020-2021 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_ (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.
+
+
+[[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 each
+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 handle is
+dlink:VK_NULL_HANDLE.
+
+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.txt[]
+
+  * 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>>
+
+****
+
+include::{generated}/validity/protos/vkCmdBuildAccelerationStructureNV.txt[]
+--
+endif::VK_NV_ray_tracing[]
+
+ifdef::VK_KHR_acceleration_structure[]
+[open,refpage='vkCmdBuildAccelerationStructuresKHR',desc='Build an acceleration structure',type='protos']
+--
+:refpage: vkCmdBuildAccelerationStructuresKHR
+:maxinstancecheck: pname:ppBuildRangeInfos[i][j].pname:primitiveCount
+
+To build acceleration structures call:
+
+include::{generated}/api/protos/vkCmdBuildAccelerationStructuresKHR.txt[]
+
+  * 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 or
+ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR.
+Similarly for accesses to each
+slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:srcAccelerationStructure
+and
+slink:VkAccelerationStructureBuildGeometryInfoKHR::pname:dstAccelerationStructure.
+
+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
+****
+include::{chapters}/commonvalidity/build_acceleration_structure_common.txt[]
+include::{chapters}/commonvalidity/build_acceleration_structure_device_common.txt[]
+include::{chapters}/commonvalidity/build_acceleration_structure_nonindirect_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdBuildAccelerationStructuresKHR.txt[]
+--
+
+[open,refpage='vkCmdBuildAccelerationStructuresIndirectKHR',desc='Build an acceleration structure with some parameters provided on the device',type='protos']
+--
+:refpage: vkCmdBuildAccelerationStructuresIndirectKHR
+:maxinstancecheck: pname:ppMaxPrimitiveCounts[i][j]
+
+To build acceleration structures with some parameters sourced on the device
+call:
+
+include::{generated}/api/protos/vkCmdBuildAccelerationStructuresIndirectKHR.txt[]
+
+  * 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
+****
+include::{chapters}/commonvalidity/build_acceleration_structure_common.txt[]
+include::{chapters}/commonvalidity/build_acceleration_structure_device_common.txt[]
+  * [[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-accelerationStructureIndirectBuild-03650]]
+    The <<features-accelerationStructureIndirectBuild,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureIndirectBuild>>
+    feature must: be enabled
+  * [[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 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.txt[]
+--
+
+
+[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.txt[]
+
+  * pname:sType is the type of 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 any given 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[]
+****
+include::{generated}/validity/structs/VkAccelerationStructureBuildGeometryInfoKHR.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:triangles is a
+    slink:VkAccelerationStructureGeometryTrianglesDataKHR structure.
+  * pname:aabbs is a slink:VkAccelerationStructureGeometryAabbsDataKHR
+    struture.
+  * pname:instances is a
+    slink:VkAccelerationStructureGeometryInstancesDataKHR structure.
+
+include::{generated}/validity/structs/VkAccelerationStructureGeometryDataKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 that
+    describes 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]]
+    pname:vertexFormat must: support the
+    ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR in
+    slink:VkFormatProperties::pname:bufferFeatures as returned by
+    flink:vkGetPhysicalDeviceFormatProperties2
+  * [[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.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_NV_ray_tracing_motion_blur[]
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/structs/VkTransformMatrixNV.txt[]
+endif::VK_NV_ray_tracing[]
+
+  * pname:matrix is a 3x4 row-major affine transformation matrix.
+
+include::{generated}/validity/structs/VkTransformMatrixKHR.txt[]
+
+.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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/structs/VkAabbPositionsNV.txt[]
+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.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/structs/VkAccelerationStructureInstanceNV.txt[]
+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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkGeometryInstanceFlagBitsNV.txt[]
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/flags/VkGeometryInstanceFlagsNV.txt[]
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkAccelerationStructureMotionInstanceFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkAccelerationStructureMotionInstanceFlagsNV.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+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
+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-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.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdWriteAccelerationStructuresPropertiesKHR.txt[]
+--
+
+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.txt[]
+
+
+  * 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.txt[]
+--
+
+[open,refpage='vkCmdCopyAccelerationStructureNV',desc='Copy an acceleration structure',type='protos']
+--
+:refpage: vkCmdCopyAccelerationStructureNV
+
+To copy an acceleration structure call:
+
+include::{generated}/api/protos/vkCmdCopyAccelerationStructureNV.txt[]
+
+  * 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
+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.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyAccelerationStructureNV.txt[]
+--
+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.txt[]
+
+  * 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
+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-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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 that
+    specifies additional operations to perform during the copy.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_acceleration_structure_common.txt[]
+****
+
+include::{generated}/validity/structs/VkCopyAccelerationStructureInfoKHR.txt[]
+--
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkCopyAccelerationStructureModeNV.txt[]
+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.txt[]
+
+  * 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
+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
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR pipeline stage
+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.
+
+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.
+    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-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.txt[]
+--
+
+[open,refpage='VkCopyAccelerationStructureToMemoryInfoKHR',desc='Parameters for serializing an acceleration structure',type='structs']
+--
+:refpage: VkCopyAccelerationStructureToMemoryInfoKHR
+
+include::{generated}/api/structs/VkCopyAccelerationStructureToMemoryInfoKHR.txt[]
+
+  * pname:sType is the type of 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 that
+    specifies 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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+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
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR 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-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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 that
+    specifies 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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+****
+// TBD
+  * [[VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-rayTracingPipeline-03661]]
+    The <<features-rayTracingPipeline, pname:rayTracingPipeline>> or
+    <<features-rayQuery, pname:rayQuery>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetDeviceAccelerationStructureCompatibilityKHR.txt[]
+--
+
+[open,refpage='VkAccelerationStructureVersionInfoKHR',desc='Acceleration structure version information',type='structs']
+--
+:refpage: VkAccelerationStructureVersionKHR
+
+The sname:VkAccelerationStructureVersionInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkAccelerationStructureVersionInfoKHR.txt[]
+
+  * pname:sType is the type of 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*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 an 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.txt[]
+--
+
+[open,refpage='VkAccelerationStructureCompatibilityKHR',desc='Acceleration structure compatibility',type='enums']
+--
+Possible values of pname:pCompatibility returned by
+flink:vkGetDeviceAccelerationStructureCompatibilityKHR are:
+
+include::{generated}/api/enums/VkAccelerationStructureCompatibilityKHR.txt[]
+
+  * 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 interchangable.
+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
+:maxinstancecheck: pname:ppBuildRangeInfos[i][j].pname:primitiveCount
+
+To build acceleration structures on the host, call:
+
+include::{generated}/api/protos/vkBuildAccelerationStructuresKHR.txt[]
+
+  * 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
+****
+include::{chapters}/commonvalidity/build_acceleration_structure_common.txt[]
+include::{chapters}/commonvalidity/build_acceleration_structure_nonindirect_common.txt[]
+include::{chapters}/commonvalidity/deferred_operations_common.txt[]
+  * [[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-accelerationStructureHostCommands-03581]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    feature must: be enabled
+  * [[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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+****
+include::{chapters}/commonvalidity/deferred_operations_common.txt[]
+  * [[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
+  * [[VUID-vkCopyAccelerationStructureKHR-accelerationStructureHostCommands-03582]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+****
+include::{chapters}/commonvalidity/deferred_operations_common.txt[]
+  * [[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
+  * [[VUID-vkCopyMemoryToAccelerationStructureKHR-accelerationStructureHostCommands-03583]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    feature must: be enabled
+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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+****
+include::{chapters}/commonvalidity/deferred_operations_common.txt[]
+  * [[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
+  * [[VUID-vkCopyAccelerationStructureToMemoryKHR-accelerationStructureHostCommands-03584]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    feature must: be enabled
+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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+****
+include::{chapters}/commonvalidity/write_acceleration_structure_properties_common.txt[]
+  * [[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:data 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:data must: point to a basetype:VkDeviceSize
+  * [[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
+  * [[VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureHostCommands-03585]]
+    The <<features-accelerationStructureHostCommands,
+    sname:VkPhysicalDeviceAccelerationStructureFeaturesKHR::pname:accelerationStructureHostCommands>>
+    feature must: be enabled
+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.txt[]
+--
diff --git a/registry/vulkan/chapters/capabilities.txt b/registry/vulkan/chapters/capabilities.txt
new file mode 100644
index 0000000..3628f74
--- /dev/null
+++ b/registry/vulkan/chapters/capabilities.txt
@@ -0,0 +1,1610 @@
+// Copyright 2015-2021 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']
+--
+To query additional capabilities specific to image types, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties.txt[]
+
+  * 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_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.txt[]
+--
+
+[open,refpage='VkImageFormatProperties',desc='Structure specifying an image format properties',type='structs']
+--
+The sname:VkImageFormatProperties structure is defined as:
+
+include::{generated}/api/structs/VkImageFormatProperties.txt[]
+
+  * 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 Y'C~B~C~R~ 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 Y'C~B~C~R~ 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.txt[]
+--
+
+ifdef::VK_NV_external_memory_capabilities[]
+include::./VK_NV_external_memory_capabilities/external_image_format.txt[]
+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']
+--
+To query additional capabilities specific to image types, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkGetPhysicalDeviceImageFormatProperties2.txt[]
+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.txt[]
+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_ANDROID_external_memory_android_hardware_buffer[]
+.Valid Usage
+****
+  * [[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[]
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceImageFormatProperties2.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceImageFormatInfo2',desc='Structure specifying image creation parameters',type='structs']
+--
+The sname:VkPhysicalDeviceImageFormatInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageFormatInfo2.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceImageFormatInfo2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkImageFormatProperties2',desc='Structure specifying an image format properties',type='structs']
+--
+The sname:VkImageFormatProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkImageFormatProperties2.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageFormatProperties2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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 exeption only applies to pname:imageFormatProperties, not pname:sType,
+pname:pNext, or any structures chained from pname:pNext.
+====
+
+include::{generated}/validity/structs/VkImageFormatProperties2.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalImageFormatInfoKHR.txt[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBitsKHR.txt[]
+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[]
+
+<<<
+
+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_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.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalMemoryHandleTypeFlagsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalImageFormatPropertiesKHR.txt[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalMemoryPropertiesKHR.txt[]
+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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalMemoryFeatureFlagBitsKHR.txt[]
+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_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_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.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalMemoryFeatureFlagsKHR.txt[]
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionImageFormatPropertiesKHR.txt[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+
+.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 Y'C~B~C~R~ 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 aspect, 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 aspect, a superset of
+    sname:VkPhysicalDeviceLimits::pname:framebufferStencilSampleCounts
+  * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
+    pname:format includes a color aspect, a superset of
+    sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts
+  * If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and
+    pname:format includes a depth aspect, 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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceExternalBufferInfo',desc='Structure specifying buffer creation parameters',type='structs']
+--
+The sname:VkPhysicalDeviceExternalBufferInfo structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalBufferInfo.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalBufferInfoKHR.txt[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalBufferInfo.txt[]
+--
+
+[open,refpage='VkExternalBufferProperties',desc='Structure specifying supported external handle capabilities',type='structs']
+--
+The sname:VkExternalBufferProperties structure is defined as:
+
+include::{generated}/api/structs/VkExternalBufferProperties.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalBufferPropertiesKHR.txt[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceExternalSemaphoreInfo',desc='Structure specifying semaphore creation parameters.',type='structs']
+--
+The sname:VkPhysicalDeviceExternalSemaphoreInfo structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalSemaphoreInfo.txt[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalSemaphoreInfoKHR.txt[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalSemaphoreHandleTypeFlagBitsKHR.txt[]
+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[]
+
+[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
+|====
+--
+
+[open,refpage='VkExternalSemaphoreHandleTypeFlags',desc='Bitmask of VkExternalSemaphoreHandleTypeFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkExternalSemaphoreHandleTypeFlags.txt[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalSemaphoreHandleTypeFlagsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalSemaphorePropertiesKHR.txt[]
+endif::VK_KHR_external_semaphore_capabilities[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkExternalSemaphoreFeatureFlagBits',desc='Bitfield describing features of an external semaphore handle type',type='enums']
+--
+Possible values of
+slink:VkExternalSemaphoreProperties::pname:externalSemaphoreFeatures,
+specifying the features of an external semaphore handle type, are:
+
+include::{generated}/api/enums/VkExternalSemaphoreFeatureFlagBits.txt[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalSemaphoreFeatureFlagBitsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_external_semaphore_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalSemaphoreFeatureFlagsKHR.txt[]
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceExternalFenceInfo',desc='Structure specifying fence creation parameters.',type='structs']
+--
+The sname:VkPhysicalDeviceExternalFenceInfo structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalFenceInfo.txt[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceExternalFenceInfoKHR.txt[]
+endif::VK_KHR_external_fence_capabilities[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkExternalFenceHandleTypeFlagBits',desc='Bitmask of valid external fence handle types',type='enums']
+--
+Bits which may: be set in
+slink:VkPhysicalDeviceExternalFenceInfo::pname:handleType, and in the
+pname:exportFromImportedHandleTypes and pname:compatibleHandleTypes members
+of slink:VkExternalFenceProperties, to indicate external fence handle types,
+are:
+
+include::{generated}/api/enums/VkExternalFenceHandleTypeFlagBits.txt[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalFenceHandleTypeFlagBitsKHR.txt[]
+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.
+
+<<<
+
+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
+|====
+--
+
+[open,refpage='VkExternalFenceHandleTypeFlags',desc='Bitmask of VkExternalFenceHandleTypeFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkExternalFenceHandleTypeFlags.txt[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalFenceHandleTypeFlagsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalFencePropertiesKHR.txt[]
+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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/enums/VkExternalFenceFeatureFlagBitsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_external_fence_capabilities[]
+or the equivalent
+
+include::{generated}/api/flags/VkExternalFenceFeatureFlagsKHR.txt[]
+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']
+--
+To query the set of time domains for which a physical device supports
+timestamp calibration, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.txt[]
+
+  * 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::{generated}/validity/protos/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.txt[]
+--
+endif::VK_EXT_calibrated_timestamps[]
diff --git a/registry/vulkan/chapters/clears.txt b/registry/vulkan/chapters/clears.txt
new file mode 100644
index 0000000..c1d399b
--- /dev/null
+++ b/registry/vulkan/chapters/clears.txt
@@ -0,0 +1,654 @@
+// Copyright 2015-2021 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.txt[]
+
+  * 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 Y'C~B~C~R~ 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 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
+    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.txt[]
+--
+
+[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.txt[]
+
+  * 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[]
+ifndef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[VUID-vkCmdClearDepthStencilImage-image-00009]]
+    pname:image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+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
+  * [[VUID-vkCmdClearDepthStencilImage-pRanges-02659]]
+    If the pname:aspect member of any element of pname:pRanges includes
+    ename:VK_IMAGE_ASPECT_STENCIL_BIT, and pname:image was not created with
+    <<VkImageStencilUsageCreateInfo,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
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * [[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 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
+    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.txt[]
+--
+
+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.txt[]
+
+  * 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.
+    If any attachment index to be cleared is not backed by an image view,
+    then the clear has no effect.
+  * 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 executes
+as a drawing command, rather than a transfer command, with writes performed
+by it executing in <<primsrast-order, rasterization order>>.
+Clears to color attachments are executed as color attachment writes, by the
+ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT stage.
+Clears to depth/stencil attachments are executed as <<fragops-depth, depth
+writes>> and <<fragops-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's generally advised that attachments are cleared by using the
+ename:VK_ATTACHMENT_LOAD_OP_CLEAR load operation at the start of rendering,
+which will be more efficient on some implementations.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkCmdClearAttachments-aspectMask-02501]]
+    If the pname:aspectMask member of any element of pname:pAttachments
+    contains ename:VK_IMAGE_ASPECT_COLOR_BIT, then the pname:colorAttachment
+    member of that element must: either refer to a color attachment which is
+    ename:VK_ATTACHMENT_UNUSED, or must: be a valid color attachment
+  * [[VUID-vkCmdClearAttachments-aspectMask-02502]]
+    If the pname:aspectMask member of any element of pname:pAttachments
+    contains ename:VK_IMAGE_ASPECT_DEPTH_BIT, then the current subpass'
+    depth/stencil attachment must: either be ename:VK_ATTACHMENT_UNUSED, or
+    must: have a depth component
+  * [[VUID-vkCmdClearAttachments-aspectMask-02503]]
+    If the pname:aspectMask member of any element of pname:pAttachments
+    contains ename:VK_IMAGE_ASPECT_STENCIL_BIT, then the current subpass'
+    depth/stencil attachment must: either be ename:VK_ATTACHMENT_UNUSED, or
+    must: have a stencil component
+  * [[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-00017]]
+    The layers specified by each element of pname:pRects must: be contained
+    within every attachment that pname:pAttachments refers to
+  * [[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[]
+****
+
+include::{generated}/validity/protos/vkCmdClearAttachments.txt[]
+--
+
+[open,refpage='VkClearRect',desc='Structure specifying a clear rectangle',type='structs']
+--
+The sname:VkClearRect structure is defined as:
+
+include::{generated}/api/structs/VkClearRect.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkClearAttachment',desc='Structure specifying a clear attachment',type='structs']
+--
+The sname:VkClearAttachment structure is defined as:
+
+include::{generated}/api/structs/VkClearAttachment.txt[]
+
+  * 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[]
+  * [[VUID-VkClearAttachment-clearValue-00021]]
+    pname:clearValue must: be a valid sname:VkClearValue union
+****
+
+include::{generated}/validity/structs/VkClearAttachment.txt[]
+--
+
+
+[[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.txt[]
+
+  * pname:float32 are the color clear values when the format of the image or
+    attachment is one of the formats in the <<formats-numericformat>> table
+    other than signed integer (etext:SINT) or unsigned integer (etext:UINT).
+    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 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 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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+****
+ifdef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-VkClearDepthStencilValue-depth-00022]]
+    Unless the `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
+    pname:depth must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifndef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-VkClearDepthStencilValue-depth-02506]]
+    pname:depth must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+****
+
+include::{generated}/validity/structs/VkClearDepthStencilValue.txt[]
+--
+
+[open,refpage='VkClearValue',desc='Structure specifying a clear value',type='structs']
+--
+The sname:VkClearValue union is defined as:
+
+include::{generated}/api/structs/VkClearValue.txt[]
+
+  * 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.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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 "`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
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdFillBuffer-commandBuffer-00030]]
+    The sname:VkCommandPool that pname:commandBuffer was allocated from
+    must: support graphics or compute operations
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-vkCmdFillBuffer-dstBuffer-00031]]
+    If pname:dstBuffer is non-sparse then it must: be bound completely and
+    contiguously to a single sname: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.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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 "`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.txt[]
+--
+
+[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.
+====
diff --git a/registry/vulkan/chapters/cmdbuffers.txt b/registry/vulkan/chapters/cmdbuffers.txt
new file mode 100644
index 0000000..5642d49
--- /dev/null
+++ b/registry/vulkan/chapters/cmdbuffers.txt
@@ -0,0 +1,2764 @@
+// Copyright 2015-2021 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.txt[]
+--
+
+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.txt[]
+--
+
+[open,refpage='vkCreateCommandPool',desc='Create a new command pool object',type='protos']
+--
+To create a command pool, call:
+
+include::{generated}/api/protos/vkCreateCommandPool.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 protected memory 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+tname:VkCommandPoolCreateFlags is a bitmask type for setting a mask of zero
+or more elink:VkCommandPoolCreateFlagBits.
+--
+
+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.txt[]
+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.txt[]
+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 re-use 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.txt[]
+--
+
+[open,refpage='VkCommandPoolTrimFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkCommandPoolTrimFlags.txt[]
+
+ifdef::VK_KHR_maintenance1[]
+or the equivalent
+
+include::{generated}/api/flags/VkCommandPoolTrimFlagsKHR.txt[]
+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[]
+
+[open,refpage='vkResetCommandPool',desc='Reset a command pool',type='protos']
+--
+To reset a command pool, call:
+
+include::{generated}/api/protos/vkResetCommandPool.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkCommandPoolResetFlagBits',desc='Bitmask controlling behavior of a command pool reset',type='enums']
+--
+Bits which can: be set in flink:vkResetCommandPool::pname:flags to control
+the reset operation are:
+
+include::{generated}/api/enums/VkCommandPoolResetFlagBits.txt[]
+
+  * ename:VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT specifies that
+    resetting a command pool recycles all of the resources from the command
+    pool back to the system.
+--
+
+[open,refpage='VkCommandPoolResetFlags',desc='Bitmask of VkCommandPoolResetFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkCommandPoolResetFlags.txt[]
+
+tname:VkCommandPoolResetFlags is a bitmask type for setting a mask of zero
+or more elink:VkCommandPoolResetFlagBits.
+--
+
+[open,refpage='vkDestroyCommandPool',desc='Destroy a command pool object',type='protos']
+--
+To destroy a command pool, call:
+
+include::{generated}/api/protos/vkDestroyCommandPool.txt[]
+
+  * 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.txt[]
+--
+
+
+[[commandbuffer-allocation]]
+== Command Buffer Allocation and Management
+
+[open,refpage='vkAllocateCommandBuffers',desc='Allocate command buffers from an existing command pool',type='protos']
+--
+To allocate command buffers, call:
+
+include::{generated}/api/protos/vkAllocateCommandBuffers.txt[]
+
+  * pname:device is the logical device that owns the command pool.
+  * pname:pAllocateInfo is a pointer to a sname: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::{generated}/validity/protos/vkAllocateCommandBuffers.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkCommandBufferAllocateInfo.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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
+****
+
+include::{generated}/validity/protos/vkResetCommandBuffer.txt[]
+--
+
+[open,refpage='VkCommandBufferResetFlagBits',desc='Bitmask controlling behavior of a command buffer reset',type='enums']
+--
+Bits which can: be set in flink:vkResetCommandBuffer::pname:flags to control
+the reset operation are:
+
+include::{generated}/api/enums/VkCommandBufferResetFlagBits.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * 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>>.
+
+.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.txt[]
+--
+
+
+[[commandbuffers-recording]]
+== Command Buffer Recording
+
+[open,refpage='vkBeginCommandBuffer',desc='Start recording a command buffer',type='protos']
+--
+To begin recording a command buffer, call:
+
+include::{generated}/api/protos/vkBeginCommandBuffer.txt[]
+
+  * 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.
+
+.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>>
+  * [[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 precise occlusion queries
+    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
+****
+
+include::{generated}/validity/protos/vkBeginCommandBuffer.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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
+****
+ifndef::VK_KHR_dynamic_rendering[]
+  * [[VUID-VkCommandBufferBeginInfo-flags-00053]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
+    pname:renderPass member of pname:pInheritanceInfo must: be a valid
+    sname:VkRenderPass
+  * [[VUID-VkCommandBufferBeginInfo-flags-00054]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
+    pname:subpass member of pname:pInheritanceInfo must: be a valid subpass
+    index within the pname:renderPass member of pname:pInheritanceInfo
+endif::VK_KHR_dynamic_rendering[]
+  * [[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
+ifdef::VK_KHR_dynamic_rendering[]
+  * [[VUID-VkCommandBufferBeginInfo-flags-06000]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the
+    pname:renderPass member of pname:pInheritanceInfo is not
+    dlink:VK_NULL_HANDLE, pname:renderPass must: be a valid
+    sname:VkRenderPass
+  * [[VUID-VkCommandBufferBeginInfo-flags-06001]]
+    If pname:flags contains
+    ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the
+    pname:renderPass member of pname:pInheritanceInfo is not
+    dlink:VK_NULL_HANDLE, the pname:subpass member of pname:pInheritanceInfo
+    must: be a valid subpass index within the pname:renderPass member of
+    pname:pInheritanceInfo
+  * [[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:VkCommandBufferInheritanceRenderingInfoKHR
+    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:VkCommandBufferInheritanceRenderingInfoKHR::pname:colorAttachmentCount
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+endif::VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/structs/VkCommandBufferBeginInfo.txt[]
+--
+
+[open,refpage='VkCommandBufferUsageFlagBits',desc='Bitmask specifying usage behavior for command buffer',type='enums']
+--
+Bits which can: be set in slink:VkCommandBufferBeginInfo::pname:flags to
+specify usage behavior for a command buffer are:
+
+include::{generated}/api/enums/VkCommandBufferUsageFlagBits.txt[]
+
+  * 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 a queue 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.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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_KHR_dynamic_rendering[]
+or if the render pass instance was begun with flink:vkCmdBeginRenderingKHR,
+endif::VK_KHR_dynamic_rendering[]
+pname:renderPass, pname:subpass, and pname:framebuffer are ignored.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056]]
+    If the <<features-inheritedQueries,inherited queries>> feature is not
+    enabled, pname:occlusionQueryEnable must: be ename:VK_FALSE
+  * [[VUID-VkCommandBufferInheritanceInfo-queryFlags-00057]]
+    If the <<features-inheritedQueries,inherited queries>> feature is
+    enabled, pname:queryFlags must: be a valid combination of
+    elink:VkQueryControlFlagBits values
+  * [[VUID-VkCommandBufferInheritanceInfo-queryFlags-02788]]
+    If the <<features-inheritedQueries,inherited queries>> feature is not
+    enabled, pname:queryFlags must: be code:0
+  * [[VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-02789]]
+    If the <<features-pipelineStatisticsQuery,pipeline statistics queries>>
+    feature is enabled, pname:pipelineStatistics must: be a valid
+    combination of elink:VkQueryPipelineStatisticFlagBits values
+  * [[VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058]]
+    If the <<features-pipelineStatisticsQuery,pipeline statistics queries>>
+    feature is not enabled, pname:pipelineStatistics must: be code:0
+****
+
+include::{generated}/validity/structs/VkCommandBufferInheritanceInfo.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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, inherited conditional
+    rendering>> feature is not enabled, pname:conditionalRenderingEnable
+    must: be ename:VK_FALSE
+****
+
+include::{generated}/validity/structs/VkCommandBufferInheritanceConditionalRenderingInfoEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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_EXT_extended_dynamic_state[]
+  * ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_discard_rectangles[]
+  * ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_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_EXT_extended_dynamic_state[]
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
+endif::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_EXT_extended_dynamic_state[state.]
+ifdef::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_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 that defines 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, inherited viewport
+    scissor>> feature is not enabled, pname:viewportScissor2D must: be
+    ename:VK_FALSE
+  * [[VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04783]]
+    If the <<features-multiViewport,multiple viewports>> 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.txt[]
+--
+endif::VK_NV_inherited_viewport_scissor[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+[open,refpage='VkCommandBufferInheritanceRenderingInfoKHR',desc='Structure specifying command buffer inheritance info for dynamic render pass instances',type='structs']
+--
+
+The sname:VkCommandBufferInheritanceRenderingInfoKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkCommandBufferInheritanceRenderingInfoKHR.txt[]
+
+  * pname:sType is the type of this structure
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure
+  * pname:flags is a bitmask of elink:VkRenderingFlagBitsKHR 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 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:VkCommandBufferInheritanceRenderingInfoKHR 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.
+
+.Valid Usage
+****
+  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-colorAttachmentCount-06004]]
+    If pname:colorAttachmentCount is not `0`, pname:rasterizationSamples
+    must: be a valid elink:VkSampleCountFlagBits value
+  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-variableMultisampleRate-06005]]
+    If the
+    <<features-variableMultisampleRate,pname:variableMultisampleRate>>
+    feature is not enabled, pname:rasterizationSamples must: be a valid
+    elink:VkSampleCountFlagBits value
+  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-pColorAttachmentFormats-06006]]
+    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
+  * [[VUID-VkCommandBufferInheritanceRenderingInfoKHR-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-VkCommandBufferInheritanceRenderingInfoKHR-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-VkCommandBufferInheritanceRenderingInfoKHR-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-VkCommandBufferInheritanceRenderingInfoKHR-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-VkCommandBufferInheritanceRenderingInfoKHR-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/VkCommandBufferInheritanceRenderingInfoKHR.txt[]
+--
+
+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.txt[]
+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.txt[]
+endif::VK_NV_framebuffer_mixed_samples[]
+
+  * pname:sType is the type of 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 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:VkCommandBufferInheritanceRenderingInfoKHR::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 present 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.txt[]
+--
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+
+endif::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']
+--
+To complete recording of a command buffer, call:
+
+include::{generated}/api/protos/vkEndCommandBuffer.txt[]
+
+  * pname:commandBuffer is the command buffer to complete recording.
+
+If there was an error during recording, the application will be notified by
+an unsuccessful return code returned by fname:vkEndCommandBuffer.
+If the application wishes to further use the command buffer, the command
+buffer must: be reset.
+
+The command buffer must: have been in the <<commandbuffers-lifecycle,
+recording state>>, and is moved to the <<commandbuffers-lifecycle,
+executable state>>.
+
+.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_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.txt[]
+--
+
+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_KHR_synchronization2[]
+or fname:vkQueueSubmit2KHR
+endif::VK_KHR_synchronization2[]
+as possible.
+====
+
+ifdef::VK_KHR_synchronization2[]
+[open,refpage='vkQueueSubmit2KHR',desc='Submits command buffers to a queue',type='protos']
+--
+To submit command buffers to a queue, call:
+
+include::{generated}/api/protos/vkQueueSubmit2KHR.txt[]
+
+  * 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:VkSubmitInfo2KHR
+    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:vkQueueSubmit2KHR is a <<devsandqueues-submission,queue submission
+command>>, with each batch defined by an element of pname:pSubmits.
+
+Semaphore operations submitted with flink:vkQueueSubmit2KHR 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:vkQueueSubmit2KHR 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:vkQueueSubmit2KHR 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>>.
+
+.Valid Usage
+****
+  * [[VUID-vkQueueSubmit2KHR-fence-04894]]
+    If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
+    unsignaled
+  * [[VUID-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-synchronization2-03866]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-semaphore-03872]]
+    The pname:semaphore member of any element of the
+    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits must:
+    be semaphores that are signaled, or have
+    <<synchronization-semaphores-signaling, semaphore signal operations>>
+    previously submitted for execution
+ifdef::VK_KHR_timeline_semaphore[]
+  * [[VUID-vkQueueSubmit2KHR-semaphore-03873]]
+    Any pname:semaphore member of any element of the
+    pname:pWaitSemaphoreInfos member of any element of pname:pSubmits that
+    was created with a elink:VkSemaphoreTypeKHR of
+    ename:VK_SEMAPHORE_TYPE_BINARY_KHR must: reference a 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_KHR_timeline_semaphore[]
+  * [[VUID-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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-vkQueueSubmit2KHR-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/vkQueueSubmit2KHR.txt[]
+--
+
+[open,refpage='VkSubmitInfo2KHR',desc='Structure specifying a queue submit operation',type='structs']
+--
+The sname:VkSubmitInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkSubmitInfo2KHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkSubmitFlagBitsKHR.
+  * pname:waitSemaphoreInfoCount is the number of elements in
+    pname:pWaitSemaphoreInfos.
+  * pname:pWaitSemaphoreInfos is a pointer to an array of
+    slink:VkSemaphoreSubmitInfoKHR 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:VkCommandBufferSubmitInfoKHR 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:VkSemaphoreSubmitInfoKHR describing
+    <<synchronization-semaphores-signaling, semaphore signal operations>>.
+
+.Valid Usage
+****
+ifdef::VK_KHR_timeline_semaphore[]
+  * [[VUID-VkSubmitInfo2KHR-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-VkSubmitInfo2KHR-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-VkSubmitInfo2KHR-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-VkSubmitInfo2KHR-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-VkSubmitInfo2KHR-flags-03886]]
+    If pname:flags includes ename:VK_SUBMIT_PROTECTED_BIT_KHR, all elements
+    of pname:pCommandBuffers must: be protected command buffers
+  * [[VUID-VkSubmitInfo2KHR-flags-03887]]
+    If pname:flags does not include ename:VK_SUBMIT_PROTECTED_BIT_KHR, each
+    element of pname:pCommandBuffers must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+ifdef::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_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/structs/VkSubmitInfo2KHR.txt[]
+--
+
+[open,refpage='VkSubmitFlagBitsKHR',desc='Bitmask specifying behavior of a submission',type='enums']
+--
+Bits which can: be set in slink:VkSubmitInfo2KHR::pname:flags to specify
+submission behavior are:
+
+include::{generated}/api/enums/VkSubmitFlagBitsKHR.txt[]
+
+  * ename:VK_SUBMIT_PROTECTED_BIT_KHR specifies that this batch is a
+    protected submission.
+--
+
+[open,refpage='VkSubmitFlagsKHR',desc='Bitmask of VkSubmitFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkSubmitFlagsKHR.txt[]
+
+tname:VkSubmitFlagsKHR is a bitmask type for setting a mask of zero or more
+elink:VkSubmitFlagBitsKHR.
+--
+
+[open,refpage='VkSemaphoreSubmitInfoKHR',desc='Structure specifying a semaphore signal or wait operation',type='structs']
+--
+:refpage: VkSemaphoreSubmitInfoKHR
+
+The sname:VkSemaphoreSubmitInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkSemaphoreSubmitInfoKHR.txt[]
+
+  * pname:sType is the type of 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:VkPipelineStageFlags2KHR 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.txt[]
+  * [[VUID-VkSemaphoreSubmitInfoKHR-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-VkSemaphoreSubmitInfoKHR-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[]
+****
+
+include::{generated}/validity/structs/VkSemaphoreSubmitInfoKHR.txt[]
+--
+
+[open,refpage='VkCommandBufferSubmitInfoKHR',desc='Structure specifying a command buffer submission',type='structs']
+--
+The sname:VkCommandBufferSubmitInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkCommandBufferSubmitInfoKHR.txt[]
+
+  * pname:sType is the type of 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-VkCommandBufferSubmitInfoKHR-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-VkCommandBufferSubmitInfoKHR-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/VkCommandBufferSubmitInfoKHR.txt[]
+--
+endif::VK_KHR_synchronization2[]
+
+[open,refpage='vkQueueSubmit',desc='Submits a sequence of semaphores or command buffers to a queue',type='protos']
+--
+To submit command buffers to a queue, call:
+
+include::{generated}/api/protos/vkQueueSubmit.txt[]
+
+  * 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>>.
+
+.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
+ifndef::VK_KHR_timeline_semaphore[]
+  * [[VUID-vkQueueSubmit-pWaitSemaphores-00069]]
+    All elements of the pname:pWaitSemaphores member of all elements of
+    pname:pSubmits must: be semaphores that are signaled, or have
+    <<synchronization-semaphores-signaling, semaphore signal operations>>
+    previously submitted for execution
+endif::VK_KHR_timeline_semaphore[]
+ifdef::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+  * [[VUID-vkQueueSubmit-pWaitSemaphores-03238]]
+    All elements of the pname:pWaitSemaphores member of all elements of
+    pname:pSubmits 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 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[]
+  * [[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.txt[]
+--
+
+[open,refpage='VkSubmitInfo',desc='Structure specifying a queue submit operation',type='structs']
+--
+The sname:VkSubmitInfo structure is defined as:
+
+include::{generated}/api/structs/VkSubmitInfo.txt[]
+
+  * pname:sType is the type of 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
+****
+  * [[VUID-VkSubmitInfo-pCommandBuffers-00075]]
+    Each element of pname:pCommandBuffers must: not have been allocated with
+    ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
+  * [[VUID-VkSubmitInfo-pWaitDstStageMask-00076]]
+    If the <<features-geometryShader,geometry shaders>> feature is not
+    enabled, each element of pname:pWaitDstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-VkSubmitInfo-pWaitDstStageMask-00077]]
+    If the <<features-tessellationShader,tessellation shaders>> feature is
+    not enabled, each element of pname:pWaitDstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
+    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+  * [[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_NV_mesh_shader[]
+  * [[VUID-VkSubmitInfo-pWaitDstStageMask-02089]]
+    If the <<features-meshShader,mesh shaders>> feature is not enabled, each
+    element of pname:pWaitDstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
+  * [[VUID-VkSubmitInfo-pWaitDstStageMask-02090]]
+    If the <<features-taskShader,task shaders>> feature is not enabled, each
+    element of pname:pWaitDstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+endif::VK_NV_mesh_shader[]
+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_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 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_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/structs/VkSubmitInfo.txt[]
+--
+
+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 or the
+slink:VkBindSparseInfo structure when using flink:vkQueueBindSparse.
+The sname:VkTimelineSemaphoreSubmitInfo structure is defined as:
+
+include::{generated}/api/structs/VkTimelineSemaphoreSubmitInfo.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkTimelineSemaphoreSubmitInfoKHR.txt[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkTimelineSemaphoreSubmitInfo.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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 sname:VkSubmitInfo
+    is in the pname:pNext chain of this sname:VkD3D12FenceSubmitInfoKHR
+    structure
+  * [[VUID-VkD3D12FenceSubmitInfoKHR-signalSemaphoreValuesCount-00080]]
+    pname:signalSemaphoreValuesCount must: be the same value as
+    sname:VkSubmitInfo::pname:signalSemaphoreCount, where sname:VkSubmitInfo
+    is in the pname:pNext chain of this sname:VkD3D12FenceSubmitInfoKHR
+    structure
+****
+
+include::{generated}/validity/structs/VkD3D12FenceSubmitInfoKHR.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_win32_keyed_mutex[]
+
+ifdef::VK_NV_win32_keyed_mutex[]
+include::VK_NV_win32_keyed_mutex/keyed_mutex_submit.txt[]
+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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupSubmitInfoKHR.txt[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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 which defines 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[]
+
+Command buffers in the submission can: include flink:vkCmdWaitEvents
+commands that wait on events that will not be signaled by earlier commands
+in the queue.
+Such events must: be signaled by the application using flink:vkSetEvent, and
+the fname:vkCmdWaitEvents commands that wait upon them must: not be inside a
+render pass instance.
+The event must: be set before the flink:vkCmdWaitEvents command is executed.
+
+[NOTE]
+.Note
+====
+Implementations may have some tolerance for waiting on events to be set, but
+this is defined outside of the scope of Vulkan.
+====
+
+
+[[commandbuffers-secondary]]
+== Secondary Command Buffer Execution
+
+[open,refpage='vkCmdExecuteCommands',desc='Execute a secondary command buffer from a primary command buffer',type='protos']
+--
+A secondary command buffer must: not be directly submitted to a queue.
+Instead, secondary command buffers are recorded to execute as part of a
+primary command buffer with the command:
+
+include::{generated}/api/protos/vkCmdExecuteCommands.txt[]
+
+  * 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>>.
+
+.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
+  * [[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
+ifndef::VK_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdExecuteCommands-contents-00095]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance, that render pass instance must: have been begun with the
+    pname:contents parameter of fname:vkCmdBeginRenderPass set to
+    ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
+  * [[VUID-vkCmdExecuteCommands-pCommandBuffers-00097]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance, each element of pname:pCommandBuffers must: have been recorded
+    with sname:VkCommandBufferInheritanceInfo::pname:subpass set to the
+    index of the subpass which the given command buffer will be executed in
+  * [[VUID-vkCmdExecuteCommands-pInheritanceInfo-00098]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance, 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
+endif::VK_KHR_dynamic_rendering[]
+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,inherited queries>> 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
+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[]
+ifdef::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:vkCmdBeginRenderingKHR, its
+    slink:VkRenderingInfoKHR::pname:flags parameter must: have included
+    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR
+  * [[VUID-vkCmdExecuteCommands-pBeginInfo-06025]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, the pname:flags member
+    of the slink:VkCommandBufferInheritanceRenderingInfoKHR 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:VkRenderingInfoKHR::pname:flags parameter to
+    flink:vkCmdBeginRenderingKHR, excluding
+    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR
+  * [[VUID-vkCmdExecuteCommands-colorAttachmentCount-06027]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRenderingKHR, the
+    pname:colorAttachmentCount member of the
+    slink:VkCommandBufferInheritanceRenderingInfoKHR 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:VkRenderingInfoKHR::pname:colorAttachmentCount parameter to
+    flink:vkCmdBeginRenderingKHR
+  * [[VUID-vkCmdExecuteCommands-imageView-06028]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRenderingKHR, if the pname:imageView
+    member of an element of the
+    slink:VkRenderingInfoKHR::pname:pColorAttachments parameter to
+    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the
+    corresponding element of the pname:pColorAttachmentFormats member of the
+    slink:VkCommandBufferInheritanceRenderingInfoKHR 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-06029]]
+    If fname:vkCmdExecuteCommands is being called within a render pass
+    instance begun with flink:vkCmdBeginRenderingKHR, if the
+    slink:VkRenderingInfoKHR::pname:pDepthAttachment->imageView parameter to
+    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value of
+    the pname:depthAttachmentFormat member of the
+    slink:VkCommandBufferInheritanceRenderingInfoKHR 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:vkCmdBeginRenderingKHR, if the
+    slink:VkRenderingInfoKHR::pname:pStencilAttachment->imageView parameter
+    to flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value
+    of the pname:stencilAttachmentFormat member of the
+    slink:VkCommandBufferInheritanceRenderingInfoKHR 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
+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:vkCmdBeginRenderingKHR, the pname:viewMask
+    member of the slink:VkCommandBufferInheritanceRenderingInfoKHR 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:VkRenderingInfoKHR::pname:viewMask parameter to
+    flink:vkCmdBeginRenderingKHR
+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:vkCmdBeginRenderingKHR 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:VkRenderingInfoKHR::pname:pColorAttachments parameter to
+    flink:vkCmdBeginRenderingKHR 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:vkCmdBeginRenderingKHR and the pname:pNext
+    chain of slink:VkCommandBufferInheritanceInfo includes a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the
+    slink:VkRenderingInfoKHR::pname:pDepthAttachment->imageView parameter to
+    flink:vkCmdBeginRenderingKHR 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:vkCmdBeginRenderingKHR and the pname:pNext
+    chain of slink:VkCommandBufferInheritanceInfo includes a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the
+    slink:VkRenderingInfoKHR::pname:pStencilAttachment->imageView parameter
+    to flink:vkCmdBeginRenderingKHR 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:vkCmdBeginRenderingKHR 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:VkRenderingInfoKHR::pname:pColorAttachments parameter to
+    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value of
+    slink:VkCommandBufferInheritanceRenderingInfoKHR::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:vkCmdBeginRenderingKHR and the pname:pNext
+    chain of slink:VkCommandBufferInheritanceInfo does not include a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the
+    slink:VkRenderingInfoKHR::pname:pDepthAttachment->imageView parameter to
+    flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value of
+    slink:VkCommandBufferInheritanceRenderingInfoKHR::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:vkCmdBeginRenderingKHR and the pname:pNext
+    chain of slink:VkCommandBufferInheritanceInfo does not include a
+    slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, if the
+    slink:VkRenderingInfoKHR::pname:pStencilAttachment->imageView parameter
+    to flink:vkCmdBeginRenderingKHR is not dlink:VK_NULL_HANDLE, the value
+    of
+    slink:VkCommandBufferInheritanceRenderingInfoKHR::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[]
+endif::VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/protos/vkCmdExecuteCommands.txt[]
+--
+
+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_EXT_extended_dynamic_state[]
+(excluding the count of each)
+endif::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.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupCommandBufferBeginInfoKHR.txt[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+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.txt[]
+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.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
diff --git a/registry/vulkan/chapters/commonvalidity/access_mask_2_common.txt b/registry/vulkan/chapters/commonvalidity/access_mask_2_common.txt
new file mode 100644
index 0000000..ab3e8c9
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/access_mask_2_common.txt
@@ -0,0 +1,275 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+// Common Valid Usage
+// Common to structs taking VkPipelineStageFlags2KHR and VkAccessFlags2KHR 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_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03901]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_INDEX_READ_BIT_KHR,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03902]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03903]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03904]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_UNIFORM_READ_BIT_KHR, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, 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_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, 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_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, 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_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, or one of the
+    etext:VK_PIPELINE_STAGE_*_SHADER_BIT stages
+  * [[VUID-{refpage}-{accessMaskName}-03908]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_SHADER_READ_BIT_KHR, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, 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_KHR, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR, 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_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03911]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR, pname:{stageMaskName}
+    must: include ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03912]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03913]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03914]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_TRANSFER_READ_BIT_KHR, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03915]]
+    If pname:{accessMaskName} includes
+    ename:VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR, pname:{stageMaskName} must:
+    include ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03916]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_HOST_READ_BIT_KHR,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
+  * [[VUID-{refpage}-{accessMaskName}-03917]]
+    If pname:{accessMaskName} includes ename:VK_ACCESS_2_HOST_WRITE_BIT_KHR,
+    pname:{stageMaskName} must: include
+    ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
+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_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+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_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+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_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[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_KHR,
+    ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+  * [[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_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+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_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+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_KHR
+  * [[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_KHR
+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_KHR
+    ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+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_ALL_COMMANDS_BIT_KHR, 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_BUILD_BIT_KHR or
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR
+ifndef::VK_KHR_ray_query[]
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{accessMaskName}-06254]]
+    If 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 except
+    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+ifndef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{accessMaskName}-06255]]
+    If 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
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+endif::VK_KHR_ray_query[]
+ifdef::VK_KHR_ray_query[]
+ifdef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{accessMaskName}-06256]]
+    If <<features-rayQuery,pname:rayQuery>> is not enabled and
+    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 except
+    ename:VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+ifndef::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+  * [[VUID-{refpage}-{accessMaskName}-06257]]
+    If <<features-rayQuery,pname:rayQuery>> is not enabled and
+    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
+endif::VK_KHR_ray_tracing_pipeline,VK_NV_ray_tracing[]
+endif::VK_KHR_ray_query[]
+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[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/bind_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/bind_buffer_common.txt
new file mode 100644
index 0000000..87fc821
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/bind_buffer_common.txt
@@ -0,0 +1,121 @@
+// Copyright 2020-2021 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-01029]]
+    pname:buffer must: not already be backed by 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::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+  * [[VUID-{refpage}-buffer-01039]]
+    If 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::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+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
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-{refpage}-memory-02727]]
+    If pname:memory was allocated by a memory import operation, the external
+    handle type of the imported memory must: also have been set in
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
+    pname:buffer was created
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-{refpage}-memory-02985]]
+    If pname:memory was allocated by a memory import operation, that is not
+    slink:VkImportAndroidHardwareBufferInfoANDROID with a non-`NULL`
+    pname:buffer value, the external handle type of the imported memory
+    must: also have been set in
+    slink:VkExternalMemoryBufferCreateInfo::pname:handleTypes when
+    pname:buffer was created
+  * [[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
+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[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/bind_image_common.txt b/registry/vulkan/chapters/commonvalidity/bind_image_common.txt
new file mode 100644
index 0000000..f8ca307
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/bind_image_common.txt
@@ -0,0 +1,117 @@
+// Copyright 2020-2021 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-01044]]
+    pname:image must: not already be backed by 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
+ifndef::VK_NV_dedicated_allocation_image_aliasing[]
+  * [[VUID-{refpage}-memory-01509]]
+    If 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
+endif::VK_NV_dedicated_allocation_image_aliasing[]
+ifdef::VK_NV_dedicated_allocation_image_aliasing[]
+  * [[VUID-{refpage}-memory-02628]]
+    If the <<features-dedicatedAllocationImageAliasing,dedicated allocation
+    image aliasing>> feature is not 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:image must: equal
+    slink:VkMemoryDedicatedAllocateInfo::pname:image and pname:memoryOffset
+    must: be zero
+  * [[VUID-{refpage}-memory-02629]]
+    If the <<features-dedicatedAllocationImageAliasing,dedicated allocation
+    image aliasing>> 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::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+  * [[VUID-{refpage}-image-01051]]
+    If 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::VK_VERSION_1_1,VK_KHR_dedicated_allocation[]
+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
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-{refpage}-memory-02729]]
+    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_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-{refpage}-memory-02989]]
+    If pname:memory was created by a memory import operation, that is not
+    slink:VkImportAndroidHardwareBufferInfoANDROID with a non-`NULL`
+    pname:buffer value, the external handle type of the imported memory
+    must: also have been set in
+    slink:VkExternalMemoryImageCreateInfo::pname:handleTypes when
+    pname:image was created
+  * [[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[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/blit_image_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/blit_image_command_buffer_common.txt
new file mode 100644
index 0000000..2aaa924
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/blit_image_command_buffer_common.txt
@@ -0,0 +1,21 @@
+// Copyright 2020-2021 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/registry/vulkan/chapters/commonvalidity/blit_image_common.txt b/registry/vulkan/chapters/commonvalidity/blit_image_common.txt
new file mode 100644
index 0000000..8b75131
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/blit_image_common.txt
@@ -0,0 +1,194 @@
+// Copyright 2020-2021 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 Y'C~B~C~R~ 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 Y'C~B~C~R~ 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]]
+    The [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]]
+    The [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[]
+// Common Valid Usage
+  * [[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`
diff --git a/registry/vulkan/chapters/commonvalidity/buffer_copy_common.txt b/registry/vulkan/chapters/commonvalidity/buffer_copy_common.txt
new file mode 100644
index 0000000..baf66ca
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/buffer_copy_common.txt
@@ -0,0 +1,9 @@
+// Copyright 2020-2021 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/registry/vulkan/chapters/commonvalidity/buffer_image_copy_common.txt b/registry/vulkan/chapters/commonvalidity/buffer_image_copy_common.txt
new file mode 100644
index 0000000..ae3b174
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/buffer_image_copy_common.txt
@@ -0,0 +1,16 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkBufferImageCopy* struct
+  * [[VUID-{refpage}-bufferRowLength-00195]]
+    pname:bufferRowLength must: be `0`, or greater than or equal to the
+    pname:width member of pname:imageExtent
+  * [[VUID-{refpage}-bufferImageHeight-00196]]
+    pname:bufferImageHeight must: be `0`, or greater than or equal to the
+    pname:height member of pname:imageExtent
+  * [[VUID-{refpage}-aspectMask-00212]]
+    The pname:aspectMask member of pname:imageSubresource must: only have a
+    single bit set
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/buffer_memory_barrier_common.txt b/registry/vulkan/chapters/commonvalidity/buffer_memory_barrier_common.txt
new file mode 100644
index 0000000..5539cd9
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/buffer_memory_barrier_common.txt
@@ -0,0 +1,46 @@
+// Copyright 2019-2021 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
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-{refpage}-buffer-04086]]
+    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 and
+    pname:dstQueueFamilyIndex must: be valid queue families
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+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 must: not be a special queue family reserved for external
+    memory ownership transfers, as described in
+    <<synchronization-queue-transfers>>
+  * [[VUID-{refpage}-buffer-04088]]
+    If pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex are not equal, and one of
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex is one of the
+    special queue family values reserved for external memory transfers, the
+    other must: be ename:VK_QUEUE_FAMILY_IGNORED
+  * [[VUID-{refpage}-buffer-04089]]
+    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 and
+    pname:dstQueueFamilyIndex must: both be valid queue families, or one of
+    the special queue family values reserved for external memory transfers,
+    as described in <<synchronization-queue-transfers>>
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_common.txt b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_common.txt
new file mode 100644
index 0000000..7c0c4ac
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_common.txt
@@ -0,0 +1,209 @@
+// Copyright 2019-2021 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/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_device_common.txt b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_device_common.txt
new file mode 100644
index 0000000..0ac8963
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_device_common.txt
@@ -0,0 +1,189 @@
+// Copyright 2019-2021 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-03815]]
+    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
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.txt b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.txt
new file mode 100644
index 0000000..52f7878
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/build_acceleration_structure_nonindirect_common.txt
@@ -0,0 +1,21 @@
+// Copyright 2019-2021 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/registry/vulkan/chapters/commonvalidity/copy_acceleration_structure_common.txt b/registry/vulkan/chapters/commonvalidity/copy_acceleration_structure_common.txt
new file mode 100644
index 0000000..cfa7eb8
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_acceleration_structure_common.txt
@@ -0,0 +1,25 @@
+// Copyright 2019-2021 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
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_buffer_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_buffer_command_buffer_common.txt
new file mode 100644
index 0000000..5826e44
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_buffer_command_buffer_common.txt
@@ -0,0 +1,21 @@
+// Copyright 2020-2021 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/registry/vulkan/chapters/commonvalidity/copy_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_buffer_common.txt
new file mode 100644
index 0000000..3d367f5
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_buffer_common.txt
@@ -0,0 +1,35 @@
+// Copyright 2020-2021 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/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.txt
new file mode 100644
index 0000000..7c9f305
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_command_buffer_common.txt
@@ -0,0 +1,21 @@
+// Copyright 2020-2021 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[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_common.txt b/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_common.txt
new file mode 100644
index 0000000..d755095
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_buffer_to_image_common.txt
@@ -0,0 +1,82 @@
+// Copyright 2020-2021 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}-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-00179]]
+    pname:dstImage must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[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
+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[]
+ifdef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-01396]]
+    pname:dstImageLayout 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-{refpage}-imageSubresource-01701]]
+    The pname:imageSubresource.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}-imageSubresource-01702]]
+    The [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:dstImage was created
+  * [[VUID-{refpage}-imageOffset-01793]]
+    The pname:imageOffset and pname:imageExtent 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
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-dstImage-02543]]
+    pname:dstImage must: not have been created with pname:flags containing
+    ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+ifndef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-{refpage}-None-00214]]
+    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]#
+endif::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-{refpage}-commandBuffer-04477]]
+    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 pname:pRegions, 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/registry/vulkan/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt
new file mode 100644
index 0000000..ce6d0f7
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt
@@ -0,0 +1,114 @@
+// Copyright 2020-2021 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 an additional attribute {imageparam} set by the command
+// which includes this file, specifying the name of the source or
+// destination image.
+
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-bufferOffset-00193]]
+    If {imageparam} does not have a depth/stencil format, then for each
+    element of pname:pRegions, pname:bufferOffset must: be a multiple of the
+    format's texel block size
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-bufferOffset-01558]]
+    If {imageparam} does not have either a depth/stencil or a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, then
+    for each element of pname:pRegions, pname:bufferOffset must: be a
+    multiple of the format's texel block size
+  * [[VUID-{refpage}-bufferOffset-01559]]
+    If {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}-srcImage-00199]]
+    If {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-00200]]
+    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 {imageparam}
+  * [[VUID-{refpage}-srcImage-00201]]
+    If {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}-bufferRowLength-00203]]
+    If {imageparam} is a <<blocked-image, blocked image>>, for each element
+    of pname:pRegions, pname:bufferRowLength must: be a multiple of the
+    compressed texel block width
+  * [[VUID-{refpage}-bufferImageHeight-00204]]
+    If {imageparam} is a <<blocked-image, blocked image>>, for each element
+    of pname:pRegions, pname:bufferImageHeight must: be a multiple of the
+    compressed texel block height
+  * [[VUID-{refpage}-imageOffset-00205]]
+    If {imageparam} is a <<blocked-image, blocked image>>, for each element
+    of pname:pRegions, all members of pname:imageOffset must: be a multiple
+    of the corresponding dimensions of the compressed texel block
+  * [[VUID-{refpage}-bufferOffset-00206]]
+    If {imageparam} is a <<blocked-image, blocked image>>, for each element
+    of pname:pRegions, pname:bufferOffset must: be a multiple of the
+    compressed texel block size in bytes
+  * [[VUID-{refpage}-imageExtent-00207]]
+    If {imageparam} is a <<blocked-image, blocked image>>, for each element
+    of pname:pRegions, pname:imageExtent.width must: be a multiple of the
+    compressed texel block width or [eq]#(pname:imageExtent.width {plus}
+    pname:imageOffset.x)# must: equal the width of the specified
+    pname:imageSubresource of {imageparam}
+  * [[VUID-{refpage}-imageExtent-00208]]
+    If {imageparam} is a <<blocked-image, blocked image>>, for each element
+    of pname:pRegions, pname:imageExtent.height must: be a multiple of the
+    compressed texel block height or [eq]#(pname:imageExtent.height {plus}
+    pname:imageOffset.y)# must: equal the height of the specified
+    pname:imageSubresource of {imageparam}
+  * [[VUID-{refpage}-imageExtent-00209]]
+    If {imageparam} is a <<blocked-image, blocked image>>, for each element
+    of pname:pRegions, pname:imageExtent.depth must: be a multiple of the
+    compressed texel block depth or [eq]#(pname:imageExtent.depth {plus}
+    pname:imageOffset.z)# must: equal the depth of the specified
+    pname:imageSubresource of {imageparam}
+  * [[VUID-{refpage}-aspectMask-00211]]
+    For each element of pname:pRegions, pname:imageSubresource.aspectMask
+    must: specify aspects present in {imageparam}
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-aspectMask-01560]]
+    If {imageparam} has a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, 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
+    (with ename:VK_IMAGE_ASPECT_PLANE_2_BIT valid only for image formats
+    with three planes)
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-baseArrayLayer-00213]]
+    If {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}-pRegions-04725]]
+    If {imageparam} is not a <<blocked-image, blocked image>>, for each
+    element of pname:pRegions, pname:bufferRowLength multiplied by the texel
+    block size of {imageparam} must: be less than or equal to [eq]#2^31^-1#
+  * [[VUID-{refpage}-pRegions-04726]]
+    If {imageparam} is a <<blocked-image, blocked image>>, for each element
+    of pname:pRegions, pname:bufferRowLength divided by the compressed texel
+    block width and then multiplied by the texel block size of {imageparam}
+    must: be less than or equal to [eq]#2^31^-1#
+  * [[VUID-{refpage}-commandBuffer-04052]]
+    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 pname:pRegions must: be a
+    multiple of `4`
+  * [[VUID-{refpage}-srcImage-04053]]
+    If {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/registry/vulkan/chapters/commonvalidity/copy_image_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_image_command_buffer_common.txt
new file mode 100644
index 0000000..c4cef5b
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_image_command_buffer_common.txt
@@ -0,0 +1,21 @@
+// Copyright 2020-2021 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/registry/vulkan/chapters/commonvalidity/copy_image_common.txt b/registry/vulkan/chapters/commonvalidity/copy_image_common.txt
new file mode 100644
index 0000000..d8d4fca
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_image_common.txt
@@ -0,0 +1,322 @@
+// Copyright 2020-2021 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}-srcImage-00126]]
+    pname:srcImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-srcImage-00127]]
+    If pname:srcImage 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}-srcImage-01546]]
+    If pname:srcImage is non-sparse then the image or _disjoint_ plane to be
+    copied must: be bound completely and contiguously to a single
+    sname:VkDeviceMemory object
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[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
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-srcImageLayout-00129]]
+    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-01917]]
+    pname:srcImageLayout must: be
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_GENERAL, or
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+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}-dstImage-00131]]
+    pname:dstImage must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-dstImage-00132]]
+    If pname:dstImage 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}-dstImage-01547]]
+    If pname:dstImage is non-sparse then the image or _disjoint_ plane that
+    is the destination of the copy must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[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
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-00134]]
+    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-01395]]
+    pname:dstImageLayout 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[]
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-srcImage-00135]]
+    The elink:VkFormat of each of pname:srcImage and pname:dstImage must: be
+    compatible, as defined <<copies-images-format-compatibility, above>>
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-srcImage-01548]]
+    If the elink:VkFormat of each of pname:srcImage and pname:dstImage is
+    not a <<formats-requiring-sampler-ycbcr-conversion,_multi-planar
+    format_>>, the elink:VkFormat of each of pname:srcImage and
+    pname:dstImage must: be compatible, as defined
+    <<copies-images-format-compatibility, above>>
+  * [[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-00136]]
+    The sample count of pname:srcImage and pname:dstImage must: match
+  * [[VUID-{refpage}-srcSubresource-01696]]
+    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-01697]]
+    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-01698]]
+    The [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-01699]]
+    The [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
+  * [[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
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-dstImage-02542]]
+    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[]
+// The remaining common VU used to be in image_copy_common.txt 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-01552]]
+    If pname:srcImage has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
+    element of pname:pRegions, pname:srcSubresource.aspectMask must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * [[VUID-{refpage}-srcImage-01553]]
+    If pname:srcImage has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
+    each element of pname:pRegions, pname:srcSubresource.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
+  * [[VUID-{refpage}-dstImage-01554]]
+    If pname:dstImage has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,two planes>> then for each
+    element of pname:pRegions, pname:dstSubresource.aspectMask must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * [[VUID-{refpage}-dstImage-01555]]
+    If pname:dstImage has a elink:VkFormat with
+    <<formats-requiring-sampler-ycbcr-conversion,three planes>> then for
+    each element of pname:pRegions, pname:dstSubresource.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
+  * [[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::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcImage-00139]]
+    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`
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[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`
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[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]]
+    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::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-srcImage-01789]]
+    If 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::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[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]]
+    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}-srcImage-01727]]
+    If pname:srcImage is a <<blocked-image, blocked image>>, then for each
+    element of pname:pRegions, all members of pname:srcOffset must: be a
+    multiple of the corresponding dimensions of the compressed texel block
+  * [[VUID-{refpage}-srcImage-01728]]
+    If pname:srcImage is a <<blocked-image, blocked image>>, then for each
+    element of pname:pRegions, pname:extent.width must: be a multiple of the
+    compressed texel block width or [eq]#(pname:extent.width {plus}
+    pname:srcOffset.x)# must: equal the width of the specified
+    pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-srcImage-01729]]
+    If pname:srcImage is a <<blocked-image, blocked image>>, then for each
+    element of pname:pRegions, pname:extent.height must: be a multiple of
+    the compressed texel block height or [eq]#(pname:extent.height {plus}
+    pname:srcOffset.y)# must: equal the height of the specified
+    pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-srcImage-01730]]
+    If pname:srcImage is a <<blocked-image, blocked image>>, then for each
+    element of pname:pRegions, pname:extent.depth must: be a multiple of the
+    compressed texel block depth or [eq]#(pname:extent.depth {plus}
+    pname:srcOffset.z)# must: equal the depth of the specified
+    pname:srcSubresource of pname:srcImage
+  * [[VUID-{refpage}-dstImage-01731]]
+    If pname:dstImage is a <<blocked-image, blocked image>>, then for each
+    element of pname:pRegions, all members of pname:dstOffset must: be a
+    multiple of the corresponding dimensions of the compressed texel block
+  * [[VUID-{refpage}-dstImage-01732]]
+    If pname:dstImage is a <<blocked-image, blocked image>>, then for each
+    element of pname:pRegions, pname:extent.width must: be a multiple of the
+    compressed texel block width or [eq]#(pname:extent.width {plus}
+    pname:dstOffset.x)# must: equal the width of the specified
+    pname:dstSubresource of pname:dstImage
+  * [[VUID-{refpage}-dstImage-01733]]
+    If pname:dstImage is a <<blocked-image, blocked image>>, then for each
+    element of pname:pRegions, pname:extent.height must: be a multiple of
+    the compressed texel block height or [eq]#(pname:extent.height {plus}
+    pname:dstOffset.y)# must: equal the height of the specified
+    pname:dstSubresource of pname:dstImage
+  * [[VUID-{refpage}-dstImage-01734]]
+    If pname:dstImage is a <<blocked-image, blocked image>>, then for each
+    element of pname:pRegions, pname:extent.depth must: be a multiple of the
+    compressed texel block depth or [eq]#(pname:extent.depth {plus}
+    pname:dstOffset.z)# must: equal the depth of the specified
+    pname:dstSubresource of pname:dstImage
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.txt
new file mode 100644
index 0000000..d549a77
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_command_buffer_common.txt
@@ -0,0 +1,22 @@
+// Copyright 2020-2021 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[]
+
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_common.txt
new file mode 100644
index 0000000..8387efc
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/copy_image_to_buffer_common.txt
@@ -0,0 +1,70 @@
+// Copyright 2020-2021 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}-srcImage-00187]]
+    If pname:srcImage is non-sparse then it must: be bound completely and
+    contiguously to a single sname:VkDeviceMemory object
+  * [[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}-srcImage-00188]]
+    pname:srcImage must: have a sample count equal to
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[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
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-srcImageLayout-00190]]
+    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-01397]]
+    pname:srcImageLayout must: be
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_GENERAL, or
+    ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+endif::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-imageSubresource-01703]]
+    The pname:imageSubresource.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}-imageSubresource-01704]]
+    The [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:srcImage was created
+  * [[VUID-{refpage}-imageOffset-01794]]
+    The pname:imageOffset and pname:imageExtent 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
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-{refpage}-srcImage-02544]]
+    pname:srcImage 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/registry/vulkan/chapters/commonvalidity/create_ray_tracing_pipelines_common.txt b/registry/vulkan/chapters/commonvalidity/create_ray_tracing_pipelines_common.txt
new file mode 100644
index 0000000..8b06ca4
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/create_ray_tracing_pipelines_common.txt
@@ -0,0 +1,30 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// common to CreateRayTracingPipelines
+  * [[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[]
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-{refpage}-pipelineCache-02903]]
+    If pname:pipelineCache was created with
+    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, host
+    access to pname:pipelineCache must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+endif::VK_EXT_pipeline_creation_cache_control[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/deferred_operations_common.txt b/registry/vulkan/chapters/commonvalidity/deferred_operations_common.txt
new file mode 100644
index 0000000..b5fe7ad
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/deferred_operations_common.txt
@@ -0,0 +1,13 @@
+// Copyright 2019-2021 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/registry/vulkan/chapters/commonvalidity/draw_common.txt b/registry/vulkan/chapters/commonvalidity/draw_common.txt
new file mode 100644
index 0000000..55361ae
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/draw_common.txt
@@ -0,0 +1,415 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to all drawing commands
+include::draw_dispatch_common.txt[]
+  * [[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-02686]]
+    Every input attachment used by the current subpass must: be bound to the
+    pipeline via a descriptor set
+  * [[VUID-{refpage}-None-04584]]
+    Image subresources used as attachments in the current render pass must:
+    not be accessed in any way other than as an attachment by this command,
+    except for cases involving read-only access to depth/stencil attachments
+    as described in the <<renderpass-attachment-nonattachment, Render Pass>>
+    chapter
+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
+endif::VK_EXT_sample_locations[]
+ifdef::VK_EXT_extended_dynamic_state[]
+  * [[VUID-{refpage}-viewportCount-03417]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled,
+    but not the ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT dynamic state
+    enabled, then flink:vkCmdSetViewportWithCountEXT must: have been called
+    in the current command buffer prior to this drawing command, and the
+    pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT
+    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_EXT dynamic state enabled, but
+    not the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state
+    enabled, then flink:vkCmdSetScissorWithCountEXT must: have been called
+    in the current command buffer prior to this drawing command, and the
+    pname:scissorCount parameter of fname:vkCmdSetScissorWithCountEXT 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_EXT and
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic states enabled
+    then both flink:vkCmdSetViewportWithCountEXT and
+    flink:vkCmdSetScissorWithCountEXT must: have been called in the current
+    command buffer prior to this drawing command, and the
+    pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT
+    must: match the pname:scissorCount parameter of
+    fname:vkCmdSetScissorWithCountEXT
+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_EXT 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:vkCmdSetViewportWithCountEXT
+  * [[VUID-{refpage}-viewportCount-04138]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT 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:vkCmdSetViewportWithCountEXT
+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_EXT 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:vkCmdSetViewportWithCountEXT
+  * [[VUID-{refpage}-viewportCount-04140]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT 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:vkCmdSetViewportWithCountEXT
+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_EXT dynamic state enabled and
+    a slink:VkPipelineViewportSwizzleStateCreateInfoNV structure chained
+    from pname:VkPipelineVieportCreateInfo, 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:vkCmdSetViewportWithCountEXT
+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_EXT dynamic state enabled and
+    a slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
+    chained from pname:VkPipelineVieportCreateInfo, 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:vkCmdSetViewportWithCountEXT
+endif::VK_NV_scissor_exclusive[]
+  * [[VUID-{refpage}-primitiveTopology-03420]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT dynamic state enabled then
+    flink:vkCmdSetPrimitiveTopologyEXT must: have been called in the current
+    command buffer prior to this drawing command, and the
+    pname:primitiveTopology parameter of fname:vkCmdSetPrimitiveTopologyEXT
+    must: be of the same <<drawing-primitive-topology-class, topology
+    class>> as the pipeline
+    slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology state
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+  * [[VUID-{refpage}-None-04875]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled
+    then flink:vkCmdSetPatchControlPointsEXT must: have been called in the
+    current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-04876]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT dynamic state
+    enabled then flink:vkCmdSetRasterizerDiscardEnableEXT must: have been
+    called in the current command buffer prior to this drawing command
+  * [[VUID-{refpage}-None-04877]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT dynamic state enabled then
+    flink:vkCmdSetDepthBiasEnableEXT must: have been called in the current
+    command buffer prior to this drawing command
+  * [[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
+  * [[VUID-{refpage}-None-04879]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT dynamic state
+    enabled then flink:vkCmdSetPrimitiveRestartEnableEXT must: have been
+    called in the current command buffer prior to this drawing command
+endif::VK_EXT_extended_dynamic_state2[]
+ifdef::VK_KHR_fragment_shading_rate+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_EXT dynamic state enabled,
+    and any of the shader stages of the bound graphics pipeline write to the
+    code:PrimitiveShadingRateKHR built-in, then
+    flink:vkCmdSetViewportWithCountEXT must: have been called in the current
+    command buffer prior to this drawing command, and the
+    pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT
+    must: be `1`
+endif::VK_KHR_fragment_shading_rate+VK_EXT_extended_dynamic_state[]
+  * [[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
+  * [[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
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+    must: be the same as the current subpass color and/or depth/stencil
+    attachments
+ifdef::VK_EXT_extended_dynamic_state[]
+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_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-{refpage}-None-04914]]
+    If the bound graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then
+    flink:vkCmdSetVertexInputEXT must: have been called in the current
+    command buffer prior to this draw command
+endif::VK_EXT_vertex_input_dynamic_state[]
+ifdef::VK_KHR_dynamic_rendering[]
+  * [[VUID-{refpage}-imageView-06172]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, the currently bound graphics pipeline
+    must: have been created with a
+    slink:VkPipelineRenderingCreateInfoKHR::pname:viewMask equal to
+    slink:VkRenderingInfoKHR::pname:viewMask
+  * [[VUID-{refpage}-colorAttachmentCount-06179]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR, the currently bound graphics pipeline
+    must: have been created with a
+    slink:VkPipelineRenderingCreateInfoKHR::pname:colorAttachmentCount equal
+    to slink:VkRenderingInfoKHR::pname:colorAttachmentCount
+  * [[VUID-{refpage}-colorAttachmentCount-06180]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR and
+    slink:VkRenderingInfoKHR::pname:colorAttachmentCount greater than `0`,
+    then each element of the
+    slink:VkRenderingInfoKHR::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:VkPipelineRenderingCreateInfoKHR::pname:pColorAttachmentFormats
+    used to create the currently bound graphics pipeline
+  * [[VUID-{refpage}-pDepthAttachment-06181]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR and
+    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView was
+    not dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfoKHR::pname:depthAttachmentFormat used
+    to create the currently bound graphics pipeline must: be equal to the
+    elink:VkFormat used to create
+    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView
+  * [[VUID-{refpage}-pStencilAttachment-06182]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR and
+    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView was
+    not dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineRenderingCreateInfoKHR::pname:stencilAttachmentFormat
+    used to create the currently bound graphics pipeline must: be equal to
+    the elink:VkFormat used to create
+    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-{refpage}-imageView-06183]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR and
+    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR::pname:imageView
+    was not dlink:VK_NULL_HANDLE, the currently bound graphics pipeline
+    must: have been created with
+    ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_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:vkCmdBeginRenderingKHR and
+    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT::pname:imageView
+    was not dlink:VK_NULL_HANDLE, the currently bound graphics pipeline
+    must: have been created with
+    ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_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:vkCmdBeginRenderingKHR with a
+    slink:VkRenderingInfoKHR::pname:colorAttachmentCount parameter greater
+    than `0`, then each element of the
+    slink:VkRenderingInfoKHR::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:vkCmdBeginRenderingKHR, the currently bound pipeline was created
+    with a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and
+    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname: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:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView
+  * [[VUID-{refpage}-pStencilAttachment-06187]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created
+    with a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and
+    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname: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:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView
+  * [[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:vkCmdBeginRenderingKHR with a
+    slink:VkRenderingInfoKHR::pname:colorAttachmentCount parameter greater
+    than `0`, then each element of the
+    slink:VkRenderingInfoKHR::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
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+    used to create the currently bound graphics pipeline
+  * [[VUID-{refpage}-pDepthAttachment-06189]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created
+    without a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and
+    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView was
+    not dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+    used to create the currently bound graphics pipeline must: be equal to
+    the sample count used to create
+    slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView
+  * [[VUID-{refpage}-pStencilAttachment-06190]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created
+    without a slink:VkAttachmentSampleCountInfoAMD or
+    slink:VkAttachmentSampleCountInfoNV structure, and
+    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView was
+    not dlink:VK_NULL_HANDLE, the value of
+    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+    used to create the currently bound graphics pipeline must: be equal to
+    the sample count used to create
+    slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView
+  * [[VUID-{refpage}-renderPass-06198]]
+    If the current render pass instance was begun with
+    flink:vkCmdBeginRenderingKHR, 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[]
+endif::VK_KHR_dynamic_rendering[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_dispatch_common.txt b/registry/vulkan/chapters/commonvalidity/draw_dispatch_common.txt
new file mode 100644
index 0000000..6146953
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/draw_dispatch_common.txt
@@ -0,0 +1,208 @@
+// Copyright 2019-2021 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
+  * [[VUID-{refpage}-None-02691]]
+    If a sname: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
+ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+  * [[VUID-{refpage}-None-02692]]
+    If a sname: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
+ifndef::VK_EXT_filter_cubic[]
+  * [[VUID-{refpage}-None-02693]]
+    Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
+    result of this command 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
+endif::VK_EXT_filter_cubic[]
+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
+    sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
+    returned by fname: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
+    sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
+    returned by fname:vkGetPhysicalDeviceImageFormatProperties2
+endif::VK_EXT_filter_cubic[]
+endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
+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_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-OpTypeImage-06423]]
+    Any slink:VkImageView or slink:VkBufferView being written as a storage
+    image or storage texel buffer where the image format field of the
+    code:OpTypeImage is code:Unknown must: have image format features that
+    support ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR
+  * [[VUID-{refpage}-OpTypeImage-06424]]
+    Any slink:VkImageView or slink:VkBufferView being read as a storage
+    image or storage texel buffer where the image format field of the
+    code:OpTypeImage is code:Unknown must: have image format features that
+    support ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR
+endif::VK_KHR_format_feature_flags2[]
+  * [[VUID-{refpage}-None-02697]]
+    For each set _n_ that is statically used by the sname:VkPipeline bound
+    to the pipeline bind point used by this command, a descriptor set must:
+    have been bound to _n_ at the same pipeline bind point, with a
+    sname:VkPipelineLayout that is compatible for set _n_, with the
+    sname:VkPipelineLayout used to create the current sname:VkPipeline, as
+    described in <<descriptorsets-compatibility>>
+ifndef::VK_KHR_maintenance4[]
+  * [[VUID-{refpage}-None-02698]]
+    For each push constant that is statically used by the sname:VkPipeline
+    bound to the pipeline bind point used by this command, a push constant
+    value must: have been set for the same pipeline bind point, with a
+    sname:VkPipelineLayout that is compatible for push constants, with the
+    sname:VkPipelineLayout used to create the current sname:VkPipeline, as
+    described in <<descriptorsets-compatibility>>
+endif::VK_KHR_maintenance4[]
+ifdef::VK_KHR_maintenance4[]
+  * [[VUID-{refpage}-maintenance4-06425]]
+    If the <<features-maintenance4, pname:maintenance4>> feature is not
+    enabled, then for each push constant that is statically used by the
+    sname:VkPipeline bound to the pipeline bind point used by this command,
+    a push constant value must: have been set for the same pipeline bind
+    point, with a sname:VkPipelineLayout that is compatible for push
+    constants, with the sname:VkPipelineLayout used to create the current
+    sname:VkPipeline, as described in <<descriptorsets-compatibility>>
+endif::VK_KHR_maintenance4[]
+  * [[VUID-{refpage}-None-02699]]
+    Descriptors in each bound descriptor set, specified via
+    fname:vkCmdBindDescriptorSets, must: be valid if they are statically
+    used by the sname:VkPipeline bound to the pipeline bind point used by
+    this command
+  * [[VUID-{refpage}-None-02700]]
+    A valid pipeline must: be bound to the pipeline bind point used by this
+    command
+  * [[VUID-{refpage}-commandBuffer-02701]]
+    If the sname:VkPipeline object bound to the pipeline bind point used by
+    this command requires any dynamic state, that state must: have been set
+    or inherited (if the `apiext:VK_NV_inherited_viewport_scissor` extension
+    is enabled) for pname:commandBuffer, and done so after any previously
+    bound pipeline with the corresponding state not specified as dynamic
+  * [[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 sname:VkPipeline object
+    bound to the pipeline bind point used by this command, since that
+    pipeline was bound
+  * [[VUID-{refpage}-None-02702]]
+    If the sname:VkPipeline object bound to the pipeline bind point used by
+    this command accesses a sname:VkSampler object that uses unnormalized
+    coordinates, that sampler must: not be used to sample from any
+    sname:VkImage with a sname: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 sname:VkPipeline object bound to the pipeline bind point used by
+    this command accesses a sname: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 sname:VkPipeline object bound to the pipeline bind point used by
+    this command accesses a sname: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
+  * [[VUID-{refpage}-None-02705]]
+    If the <<features-robustBufferAccess,robust buffer access>> feature is
+    not enabled, and if the sname: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
+  * [[VUID-{refpage}-None-02706]]
+    If the <<features-robustBufferAccess,robust buffer access>> feature is
+    not enabled, and if the sname: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
+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 the slink:VkPipeline object bound to the
+    pipeline bind point used by this command must: not be a protected
+    resource
+endif::VK_VERSION_1_1[]
+  * [[VUID-{refpage}-None-04115]]
+    If a slink:VkImageView 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
+  * [[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[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_dispatch_indirect_common.txt b/registry/vulkan/chapters/commonvalidity/draw_dispatch_indirect_common.txt
new file mode 100644
index 0000000..106f24a
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/draw_dispatch_indirect_common.txt
@@ -0,0 +1,19 @@
+// Copyright 2019-2021 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/registry/vulkan/chapters/commonvalidity/draw_dispatch_nonindirect_common.txt b/registry/vulkan/chapters/commonvalidity/draw_dispatch_nonindirect_common.txt
new file mode 100644
index 0000000..ca8a562
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/draw_dispatch_nonindirect_common.txt
@@ -0,0 +1,26 @@
+// Copyright 2019-2021 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
+  * [[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,RayQueryKHR>> capability, then
+    pname:commandBuffer must: not be a protected command buffer
+endif::VK_VERSION_1_1[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_indirect_count_common.txt b/registry/vulkan/chapters/commonvalidity/draw_indirect_count_common.txt
new file mode 100644
index 0000000..0bde71c
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/draw_indirect_count_common.txt
@@ -0,0 +1,26 @@
+// Copyright 2019-2021 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,drawIndirectCount>> is not enabled this
+    function must: not be used
+endif::VK_VERSION_1_2[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/draw_indirect_drawcount.txt b/registry/vulkan/chapters/commonvalidity/draw_indirect_drawcount.txt
new file mode 100644
index 0000000..ffcec87
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/draw_indirect_drawcount.txt
@@ -0,0 +1,13 @@
+// Copyright 2019-2021 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,multi-draw indirect>> 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/registry/vulkan/chapters/commonvalidity/draw_vertex_binding.txt b/registry/vulkan/chapters/commonvalidity/draw_vertex_binding.txt
new file mode 100644
index 0000000..7f57278
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/draw_vertex_binding.txt
@@ -0,0 +1,20 @@
+// Copyright 2019-2021 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,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>>
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/fine_sync_commands_common.txt b/registry/vulkan/chapters/commonvalidity/fine_sync_commands_common.txt
new file mode 100644
index 0000000..99b3351
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/fine_sync_commands_common.txt
@@ -0,0 +1,59 @@
+// Copyright 2019-2021 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/registry/vulkan/chapters/commonvalidity/image_blit_common.txt b/registry/vulkan/chapters/commonvalidity/image_blit_common.txt
new file mode 100644
index 0000000..fb9c864
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/image_blit_common.txt
@@ -0,0 +1,13 @@
+// Copyright 2020-2021 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-00239]]
+    The pname:layerCount member of pname:srcSubresource and
+    pname:dstSubresource must: match
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/image_copy_common.txt b/registry/vulkan/chapters/commonvalidity/image_copy_common.txt
new file mode 100644
index 0000000..f48646e
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/image_copy_common.txt
@@ -0,0 +1,24 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkImageCopy* struct
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-{refpage}-aspectMask-00137]]
+    The pname:aspectMask member of pname:srcSubresource and
+    pname:dstSubresource must: match
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-layerCount-00138]]
+    The pname:layerCount member of pname:srcSubresource and
+    pname:dstSubresource must: match
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-{refpage}-extent-00140]]
+    The number of slices of the pname:extent (for 3D) or layers of the
+    pname:srcSubresource (for non-3D) must: match the number of slices of
+    the pname:extent (for 3D) or layers of the pname:dstSubresource (for
+    non-3D)
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/image_memory_barrier_common.txt b/registry/vulkan/chapters/commonvalidity/image_memory_barrier_common.txt
new file mode 100644
index 0000000..d56ce88
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/image_memory_barrier_common.txt
@@ -0,0 +1,263 @@
+// Copyright 2019-2021 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
+  * [[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_KHR_synchronization2[]
+  * [[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_KHR, 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_KHR, 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_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[]
+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-01671]]
+    If pname:image has a single-plane color format or 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
+    either at least one of ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT; or must: include
+    ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-{refpage}-image-01673]]
+    If pname:image has a multi-planar format with only two planes, then the
+    pname:aspectMask member of pname:subresourceRange must: not include
+    ename:VK_IMAGE_ASPECT_PLANE_2_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,
+    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,
+    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
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-{refpage}-image-04069]]
+    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 and
+    pname:dstQueueFamilyIndex must: be valid queue families
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+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 must: not be a special queue family reserved for external
+    memory ownership transfers, as described in
+    <<synchronization-queue-transfers>>
+  * [[VUID-{refpage}-image-04071]]
+    If pname:image was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex are not equal, and one of
+    pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex is one of the
+    special queue family values reserved for external memory transfers, the
+    other must: be ename:VK_QUEUE_FAMILY_IGNORED
+  * [[VUID-{refpage}-image-04072]]
+    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 and
+    pname:dstQueueFamilyIndex must: both be valid queue families, or one of
+    the special queue family values reserved for external memory transfers,
+    as described in <<synchronization-queue-transfers>>
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/image_resolve_common.txt b/registry/vulkan/chapters/commonvalidity/image_resolve_common.txt
new file mode 100644
index 0000000..9223b55
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/image_resolve_common.txt
@@ -0,0 +1,13 @@
+// Copyright 2020-2021 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-00267]]
+    The pname:layerCount member of pname:srcSubresource and
+    pname:dstSubresource must: match
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/performance_query_begin_common.txt b/registry/vulkan/chapters/commonvalidity/performance_query_begin_common.txt
new file mode 100644
index 0000000..8b0e9d5
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/performance_query_begin_common.txt
@@ -0,0 +1,41 @@
+// Copyright 2019-2021 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-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/registry/vulkan/chapters/commonvalidity/pipeline_barrier_common.txt b/registry/vulkan/chapters/commonvalidity/pipeline_barrier_common.txt
new file mode 100644
index 0000000..bcf7755
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/pipeline_barrier_common.txt
@@ -0,0 +1,42 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to vkCmdPipelineBarrier* commands
+  * [[VUID-{refpage}-pDependencies-02285]]
+    If fname:{refpage} is called within a render pass instance, the render
+    pass must: have been created with at least one slink:VkSubpassDependency
+    instance in sname:VkRenderPassCreateInfo::pname:pDependencies that
+    expresses a dependency from the current subpass to itself, with
+    <<synchronization-dependencies-scopes, synchronization scopes>> and
+    <<synchronization-dependencies-access-scopes, access scopes>> that are
+    all supersets of the scopes defined in this command
+  * [[VUID-{refpage}-bufferMemoryBarrierCount-01178]]
+    If fname:{refpage} is called within a render pass instance, it must: not
+    include any buffer memory barriers
+  * [[VUID-{refpage}-image-04073]]
+    If fname:{refpage} is called within a render pass instance, 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 or depth/stencil attachment
+  * [[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
+    image memory barrier included in this command must: be equal
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-{refpage}-dependencyFlags-01186]]
+    If fname:{refpage} is called outside of a render pass instance,
+    ename:VK_DEPENDENCY_VIEW_LOCAL_BIT must: not be included in the
+    dependency flags
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_KHR_dynamic_rendering[]
+  * [[VUID-{refpage}-None-06191]]
+    If fname:{refpage} is called within a render pass instance, the render
+    pass must: not have been started with flink:vkCmdBeginRenderingKHR
+endif::VK_KHR_dynamic_rendering[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/pipeline_stage_common.txt b/registry/vulkan/chapters/commonvalidity/pipeline_stage_common.txt
new file mode 100644
index 0000000..0982cd8
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/pipeline_stage_common.txt
@@ -0,0 +1,52 @@
+// Copyright 2019-2021 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,geometry shaders>> feature is not
+    enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-{refpage}-pipelineStage-04076]]
+    If the <<features-tessellationShader,tessellation shaders>> 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,conditional rendering>> 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,fragment density map>> 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,transform feedback>> 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[]
+  * [[VUID-{refpage}-pipelineStage-04080]]
+    If the <<features-meshShader,mesh shaders>> feature is not enabled,
+    pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV or
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-pipelineStage-04081]]
+    If the <<features-shadingRateImage,shading rate image>> feature is not
+    enabled, pname:pipelineStage must: not be
+    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
+endif::VK_NV_shading_rate_image[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/query_begin_common.txt b/registry/vulkan/chapters/commonvalidity/query_begin_common.txt
new file mode 100644
index 0000000..9a22ffa
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/query_begin_common.txt
@@ -0,0 +1,63 @@
+// Copyright 2019-2021 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_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[]
+  * [[VUID-{refpage}-queryType-00800]]
+    If the <<features-occlusionQueryPrecise,precise occlusion queries>>
+    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_encode_queue[]
+  * [[VUID-{refpage}-queryType-04862]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR the
+    sname:VkCommandPool that pname:commandBuffer was allocated from must:
+    support <<video-encode-operations, video encode operations>>
+endif::VK_KHR_video_encode_queue[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.txt b/registry/vulkan/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.txt
new file mode 100644
index 0000000..6d3b2df
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/ray_tracing_pipeline_create_info_common.txt
@@ -0,0 +1,50 @@
+// Copyright 2019-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// common to VkRayTracingPipelineCreateInfo* structures
+  * [[VUID-{refpage}-flags-03421]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineIndex is `-1`, pname:basePipelineHandle
+    must: be a valid handle to a ray tracing sname:VkPipeline
+  * [[VUID-{refpage}-flags-03422]]
+    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-03423]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineIndex is not `-1`, pname:basePipelineHandle
+    must: be dlink:VK_NULL_HANDLE
+  * [[VUID-{refpage}-flags-03424]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineHandle is not dlink:VK_NULL_HANDLE,
+    pname:basePipelineIndex must: be `-1`
+  * [[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-03427]]
+    pname:layout must: be
+    <<descriptorsets-pipelinelayout-consistency,consistent>> with all
+    shaders specified in pname:pStages
+  * [[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_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_EXT or
+    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
+endif::VK_EXT_pipeline_creation_cache_control[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/resolve_image_command_buffer_common.txt b/registry/vulkan/chapters/commonvalidity/resolve_image_command_buffer_common.txt
new file mode 100644
index 0000000..5c8c27b
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/resolve_image_command_buffer_common.txt
@@ -0,0 +1,21 @@
+// Copyright 2020-2021 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/registry/vulkan/chapters/commonvalidity/resolve_image_common.txt b/registry/vulkan/chapters/commonvalidity/resolve_image_common.txt
new file mode 100644
index 0000000..34aba94
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/resolve_image_common.txt
@@ -0,0 +1,139 @@
+// Copyright 2020-2021 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
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-srcImageLayout-00261]]
+    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-01400]]
+    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}-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
+ifndef::VK_KHR_shared_presentable_image[]
+  * [[VUID-{refpage}-dstImageLayout-00263]]
+    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-01401]]
+    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}-dstImage-02003]]
+    The <<resources-image-format-features,format features>> of
+    pname:dstImage must: contain
+    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+  * [[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]]
+    The [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]]
+    The [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 either pname:srcImage or pname:dstImage are 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}-srcImage-04447]]
+    If either pname:srcImage or pname:dstImage are 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`
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/stage_mask_2_common.txt b/registry/vulkan/chapters/commonvalidity/stage_mask_2_common.txt
new file mode 100644
index 0000000..92ec1c5
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/stage_mask_2_common.txt
@@ -0,0 +1,63 @@
+// Copyright 2020-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// Common Valid Usage
+// Common to VkPipelineStageFlags2KHR parameters
+// Set "stageMaskName" attribute to the name of the stage mask to validate
+  * [[VUID-{refpage}-{stageMaskName}-03929]]
+    If the <<features-geometryShader,geometry shaders>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR
+  * [[VUID-{refpage}-{stageMaskName}-03930]]
+    If the <<features-tessellationShader,tessellation shaders>> feature is
+    not enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR or
+    ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
+ifdef::VK_EXT_conditional_rendering[]
+  * [[VUID-{refpage}-{stageMaskName}-03931]]
+    If the <<features-conditionalRendering,conditional rendering>> 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,fragment density map>> 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,transform feedback>> 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[]
+  * [[VUID-{refpage}-{stageMaskName}-03934]]
+    If the <<features-meshShader,mesh shaders>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV
+  * [[VUID-{refpage}-{stageMaskName}-03935]]
+    If the <<features-taskShader,task shaders>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-{stageMaskName}-04956]]
+    If the <<features-shadingRateImage,shading rate image>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-{refpage}-{stageMaskName}-04957]]
+    If the <<features-subpassShading,subpass shading>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  * [[VUID-{refpage}-{stageMaskName}-04995]]
+    If the <<features-invocationMask, invocation mask image>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
+endif::VK_HUAWEI_invocation_mask[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/stage_mask_common.txt b/registry/vulkan/chapters/commonvalidity/stage_mask_common.txt
new file mode 100644
index 0000000..599f6ff
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/stage_mask_common.txt
@@ -0,0 +1,68 @@
+// Copyright 2019-2021 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,geometry shaders>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-{refpage}-{stageMaskName}-04091]]
+    If the <<features-tessellationShader,tessellation shaders>> 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,conditional rendering>> 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,fragment density map>> 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,transform feedback>> 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[]
+  * [[VUID-{refpage}-{stageMaskName}-04095]]
+    If the <<features-meshShader,mesh shaders>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
+  * [[VUID-{refpage}-{stageMaskName}-04096]]
+    If the <<features-taskShader,task shaders>> feature is not enabled,
+    pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-{stageMaskName}-04097]]
+    If the <<features-shadingRateImage,shading rate image>> feature is not
+    enabled, pname:{stageMaskName} must: not contain
+    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
+endif::VK_NV_shading_rate_image[]
+  * [[VUID-{refpage}-{stageMaskName}-04098]]
+    Any pipeline stage included in pname:{stageMaskName} 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>>
+ifdef::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_KHR_synchronization2[]
+ifndef::VK_KHR_synchronization2[]
+  * [[VUID-{refpage}-{stageMaskName}-04996]]
+    pname:{stageMaskName} must: not be `0`
+endif::VK_KHR_synchronization2[]
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/commonvalidity/surface_info_physical_device_common.txt b/registry/vulkan/chapters/commonvalidity/surface_info_physical_device_common.txt
new file mode 100644
index 0000000..1cbb30c
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/surface_info_physical_device_common.txt
@@ -0,0 +1,14 @@
+// Copyright 2019-2021 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-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/registry/vulkan/chapters/commonvalidity/surface_physical_device_common.txt b/registry/vulkan/chapters/commonvalidity/surface_physical_device_common.txt
new file mode 100644
index 0000000..882d713
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/surface_physical_device_common.txt
@@ -0,0 +1,13 @@
+// Copyright 2019-2021 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-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/registry/vulkan/chapters/commonvalidity/trace_rays_common.txt b/registry/vulkan/chapters/commonvalidity/trace_rays_common.txt
new file mode 100644
index 0000000..10286eb
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/trace_rays_common.txt
@@ -0,0 +1,13 @@
+// Copyright 2019-2021 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.txt[]
+  * [[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/registry/vulkan/chapters/commonvalidity/trace_rays_common_khr.txt b/registry/vulkan/chapters/commonvalidity/trace_rays_common_khr.txt
new file mode 100644
index 0000000..b93a116
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/trace_rays_common_khr.txt
@@ -0,0 +1,135 @@
+// Copyright 2019-2021 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}-pRayGenShaderBindingTable-03680]]
+    If the buffer from which pname:pRayGenShaderBindingTable->deviceAddress
+    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 pname:pRayGenShaderBindingTable->deviceAddress
+    is queried must: have been created with the
+    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
+  * [[VUID-{refpage}-pRayGenShaderBindingTable-03682]]
+    pname:pRayGenShaderBindingTable->deviceAddress must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
+  * [[VUID-{refpage}-size-04023]]
+    The pname:size member of pname:pRayGenShaderBindingTable must: be equal
+    to its pname:stride member
+  * [[VUID-{refpage}-pMissShaderBindingTable-03683]]
+    If the buffer from which pname:pMissShaderBindingTable->deviceAddress
+    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 pname:pMissShaderBindingTable->deviceAddress
+    is queried must: have been created with the
+    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
+  * [[VUID-{refpage}-pMissShaderBindingTable-03685]]
+    pname:pMissShaderBindingTable->deviceAddress must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
+  * [[VUID-{refpage}-stride-03686]]
+    The pname:stride member of pname:pMissShaderBindingTable must: be a
+    multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
+  * [[VUID-{refpage}-stride-04029]]
+    The pname:stride member of pname:pMissShaderBindingTable must: be less
+    than or equal to
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride
+  * [[VUID-{refpage}-pHitShaderBindingTable-03687]]
+    If the buffer from which pname:pHitShaderBindingTable->deviceAddress 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 pname:pHitShaderBindingTable->deviceAddress is
+    queried must: have been created with the
+    ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag
+  * [[VUID-{refpage}-pHitShaderBindingTable-03689]]
+    pname:pHitShaderBindingTable->deviceAddress must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
+  * [[VUID-{refpage}-stride-03690]]
+    The pname:stride member of pname:pHitShaderBindingTable must: be a
+    multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
+  * [[VUID-{refpage}-stride-04035]]
+    The pname:stride member of pname:pHitShaderBindingTable must: be less
+    than or equal to
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxShaderGroupStride
+  * [[VUID-{refpage}-pCallableShaderBindingTable-03691]]
+    If the buffer from which
+    pname:pCallableShaderBindingTable->deviceAddress 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
+    pname:pCallableShaderBindingTable->deviceAddress is queried must: have
+    been created with the ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR
+    usage flag
+  * [[VUID-{refpage}-pCallableShaderBindingTable-03693]]
+    pname:pCallableShaderBindingTable->deviceAddress must: be a multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupBaseAlignment
+  * [[VUID-{refpage}-stride-03694]]
+    The pname:stride member of pname:pCallableShaderBindingTable must: be a
+    multiple of
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:shaderGroupHandleAlignment
+  * [[VUID-{refpage}-stride-04041]]
+    The pname:stride member of pname:pCallableShaderBindingTable 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,
+    the pname:deviceAddress member of pname:pHitShaderBindingTable 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,
+    the pname:deviceAddress member of pname:pHitShaderBindingTable 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 pname:pMissShaderBindingTable 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 pname:pHitShaderBindingTable 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 pname:pHitShaderBindingTable 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 pname:pHitShaderBindingTable 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 pname:pHitShaderBindingTable
+    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 pname:pHitShaderBindingTable
+    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/registry/vulkan/chapters/commonvalidity/write_acceleration_structure_properties_common.txt b/registry/vulkan/chapters/commonvalidity/write_acceleration_structure_properties_common.txt
new file mode 100644
index 0000000..0874521
--- /dev/null
+++ b/registry/vulkan/chapters/commonvalidity/write_acceleration_structure_properties_common.txt
@@ -0,0 +1,20 @@
+// Copyright 2019-2021 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
+  * [[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
+// Common Valid Usage
diff --git a/registry/vulkan/chapters/copies.txt b/registry/vulkan/chapters/copies.txt
new file mode 100644
index 0000000..662d638
--- /dev/null
+++ b/registry/vulkan/chapters/copies.txt
@@ -0,0 +1,1639 @@
+// Copyright 2015-2021 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
+depending on the type of data transfer.
+Data can: be copied between buffer objects with
+ifdef::VK_KHR_copy_commands2[]
+fname:vkCmdCopyBuffer2KHR and
+endif::VK_KHR_copy_commands2[]
+fname:vkCmdCopyBuffer and a portion of an image can: be copied to another
+image with
+ifdef::VK_KHR_copy_commands2[]
+fname:vkCmdCopyImage2KHR and
+endif::VK_KHR_copy_commands2[]
+fname:vkCmdCopyImage.
+Image data can: also be copied to and from buffer memory using
+ifndef::VK_KHR_copy_commands2[]
+fname:vkCmdCopyImageToBuffer and fname:vkCmdCopyBufferToImage.
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+fname:vkCmdCopyImageToBuffer2KHR, fname:vkCmdCopyImageToBuffer,
+fname:vkCmdCopyBufferToImage2KHR, and fname:vkCmdCopyBufferToImage.
+endif::VK_KHR_copy_commands2[]
+Image data can: be blitted (with or without scaling and filtering) with
+ifdef::VK_KHR_copy_commands2[]
+fname:vkCmdBlitImage2KHR and
+endif::VK_KHR_copy_commands2[]
+fname:vkCmdBlitImage.
+Multisampled images can: be resolved to a non-multisampled image with
+ifdef::VK_KHR_copy_commands2[]
+fname:vkCmdResolveImage2KHR and
+endif::VK_KHR_copy_commands2[]
+fname:vkCmdResolveImage.
+
+
+== Common Operation
+
+The following valid usage rules apply to all copy commands:
+
+  * Copy commands must: be recorded outside of a render pass instance.
+  * The set of all bytes bound to all the source regions must: not overlap
+    the set of all bytes bound to the destination regions.
+  * The set of all bytes bound to each destination region must: not overlap
+    the set of all bytes bound to another destination region.
+  * Copy regions must: be non-empty.
+  * Regions must: not extend outside the bounds of the buffer or image
+    level, except that regions of compressed images can: extend as far as
+    the dimension of the image level rounded up to a complete compressed
+    texel block.
+  * Source image subresources must: be in either the
+    ename:VK_IMAGE_LAYOUT_GENERAL or
+    ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL layout.
+    Destination image subresources must: be in the
+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 layout.
+    As a consequence, if an image subresource is used as both source and
+    destination of a copy, it must: be in the ename:VK_IMAGE_LAYOUT_GENERAL
+    layout.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * Source images must: have ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT in
+    their <<resources-image-format-features,format features>>.
+  * Destination images must: have ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+    in their <<resources-image-format-features,format features>>.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * Source buffers must: have been created with the
+    ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage bit enabled and destination
+    buffers must: have been created with the
+    ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage bit enabled.
+ifndef::VK_VERSION_1_2+VK_EXT_separate_stencil_usage[]
+  * Source images must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set in
+    slink:VkImageCreateInfo::pname:usage
+  * Destination images must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set in
+    slink:VkImageCreateInfo::pname:usage
+endif::VK_VERSION_1_2+VK_EXT_separate_stencil_usage[]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+  * If the stencil aspect of source image is accessed, and the source image
+    was not created with <<VkImageStencilUsageCreateInfo,separate stencil
+    usage>>, the source image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set in
+    slink:VkImageCreateInfo::pname:usage
+  * If the stencil aspect of destination image is accessed, and the
+    destination image was not created with
+    <<VkImageStencilUsageCreateInfo,separate stencil usage>>, the
+    destination image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set in
+    slink:VkImageCreateInfo::pname:usage
+  * If the stencil aspect of source image is accessed, and the source image
+    was created with <<VkImageStencilUsageCreateInfo,separate stencil
+    usage>>, the source image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set in
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage
+  * If the stencil aspect of destination image is accessed, and the
+    destination image was created with
+    <<VkImageStencilUsageCreateInfo,separate stencil usage>>, the
+    destination image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set in
+    slink:VkImageStencilUsageCreateInfo::pname:stencilUsage
+  * If non-stencil aspects of a source image are accessed, the source image
+    must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set
+    in slink:VkImageCreateInfo::pname:usage
+  * If non-stencil aspects of a destination image are accessed, the
+    destination image must: have been created with
+    ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set in
+    slink:VkImageCreateInfo::pname:usage
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+
+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.txt[]
+
+  * 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 region in pname:pRegions is copied from the source buffer to the same
+region of the destination buffer.
+pname:srcBuffer and pname:dstBuffer can: be the same buffer or alias the
+same memory, but the resulting values are undefined: if the copy regions
+overlap in memory.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_buffer_command_buffer_common.txt[]
+include::{chapters}/commonvalidity/copy_buffer_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBuffer.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+****
+
+include::{generated}/validity/structs/VkBufferCopy.txt[]
+--
+
+ifdef::VK_KHR_copy_commands2[]
+
+A more extensible version of the copy buffer command is defined below.
+
+[open,refpage='vkCmdCopyBuffer2KHR',desc='Copy data between buffer regions',type='protos']
+--
+:refpage: vkCmdCopyBuffer2KHR
+
+To copy data between buffer objects, call:
+
+include::{generated}/api/protos/vkCmdCopyBuffer2KHR.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pCopyBufferInfo is a pointer to a slink:VkCopyBufferInfo2KHR
+    structure describing the copy parameters.
+
+This command is functionally identical to flink:vkCmdCopyBuffer, 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_buffer_command_buffer_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBuffer2KHR.txt[]
+--
+
+[open,refpage='VkCopyBufferInfo2KHR',desc='Structure specifying parameters of a buffer copy command',type='structs']
+--
+:refpage: VkCopyBufferInfo2KHR
+
+The sname:VkCopyBufferInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkCopyBufferInfo2KHR.txt[]
+
+  * pname:sType is the type of 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:VkBufferCopy2KHR
+    structures specifying the regions to copy.
+
+Members defined by this structure with the same name as parameters in
+flink:vkCmdCopyBuffer have the identical effect to those parameters; the
+child structure slink:VkBufferCopy2KHR is a variant of slink:VkBufferCopy
+which includes pname:sType and pname:pNext parameters, allowing it to be
+extended.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_buffer_common.txt[]
+****
+
+include::{generated}/validity/structs/VkCopyBufferInfo2KHR.txt[]
+--
+
+[open,refpage='VkBufferCopy2KHR',desc='Structure specifying a buffer copy operation',type='structs']
+--
+:refpage: VkBufferCopy2KHR
+
+The sname:VkBufferCopy2KHR structure is defined as:
+
+include::{generated}/api/structs/VkBufferCopy2KHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+****
+
+include::{generated}/validity/structs/VkBufferCopy2KHR.txt[]
+--
+
+endif::VK_KHR_copy_commands2[]
+
+
+[[copies-images]]
+== Copying Data Between Images
+
+fname:vkCmdCopyImage performs image copies in a similar manner to a host
+memcpy.
+It does not perform general-purpose conversions such as scaling, resizing,
+blending, color-space conversion, or format conversions.
+Rather, it simply copies raw image data.
+fname:vkCmdCopyImage can: copy between images with different formats,
+provided the formats are compatible as defined below.
+
+[open,refpage='vkCmdCopyImage',desc='Copy data between images',type='protos']
+--
+:refpage: vkCmdCopyImage
+
+To copy data between image objects, call:
+
+include::{generated}/api/protos/vkCmdCopyImage.txt[]
+
+  * 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 region in pname:pRegions is copied from the source image to the same
+region of the destination image.
+pname:srcImage and pname:dstImage can: be the same image or alias the same
+memory.
+
+[[copies-images-format-compatibility]]
+The formats of pname:srcImage and pname:dstImage must: be compatible.
+Formats are compatible if they share the same class, as shown in the
+<<formats-compatibility,Compatible Formats>> table.
+Depth/stencil formats must: match exactly.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If either pname:srcImage or pname:dstImage has a
+<<formats-requiring-sampler-ycbcr-conversion, _multi-planar_ format>>,
+regions of each plane to be copied must: be specified separately using the
+pname:srcSubresource and pname:dstSubresource members of the
+slink:VkImageCopy structure.
+In this case, the pname:aspectMask of the pname:srcSubresource or
+pname:dstSubresource that refers to the multi-planar image must: be
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
+ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
+For the purposes of fname:vkCmdCopyImage, each plane of a multi-planar image
+is treated as having the format listed in <<formats-compatible-planes>> for
+the plane identified by the pname:aspectMask of the corresponding
+subresource.
+This applies both to elink:VkFormat and to coordinates used in the copy,
+which correspond to texels in the _plane_ rather than how these texels map
+to coordinates in the image as a whole.
+
+[NOTE]
+.Note
+====
+For example, the ename:VK_IMAGE_ASPECT_PLANE_1_BIT plane of a
+ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM image is compatible with an image
+of format ename:VK_FORMAT_R8G8_UNORM and (less usefully) with the
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT plane of an image of format
+ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, as each texel is
+2 bytes in size.
+====
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+[[copies-images-format-size-compatibility]]
+fname:vkCmdCopyImage allows copying between _size-compatible_ compressed and
+uncompressed internal formats.
+Formats are size-compatible if the texel block size of the uncompressed
+format is equal to the texel block size of the compressed format.
+Such a copy does not perform on-the-fly compression or decompression.
+When copying from an uncompressed format to a compressed format, each texel
+of uncompressed data of the source image is copied as a raw value to the
+corresponding compressed texel block of the destination image.
+When copying from a compressed format to an uncompressed format, each
+compressed texel block of the source image is copied as a raw value to the
+corresponding texel of uncompressed data in the destination image.
+Thus, for example, it is legal to copy between a 128-bit uncompressed format
+and a compressed format which has a 128-bit sized compressed texel block
+representing 4{times}4 texels (using 8 bits per texel), or between a 64-bit
+uncompressed format and a compressed format which has a 64-bit sized
+compressed texel block representing 4{times}4 texels (using 4 bits per
+texel).
+
+When copying between compressed and uncompressed formats the pname:extent
+members represent the texel dimensions of the source image and not the
+destination.
+When copying from a compressed image to an uncompressed image the image
+texel dimensions written to the uncompressed image will be source extent
+divided by the compressed texel block dimensions.
+When copying from an uncompressed image to a compressed image the image
+texel dimensions written to the compressed image will be the source extent
+multiplied by the compressed texel block dimensions.
+In both cases the number of bytes read and the number of bytes written will
+be identical.
+
+Copying to or from block-compressed images is typically done in multiples of
+the compressed texel block size.
+For this reason the pname:extent must: be a multiple of the compressed texel
+block dimension.
+There is one exception to this rule which is required: to handle compressed
+images created with dimensions that are not a multiple of the compressed
+texel block dimensions: if the pname:srcImage is compressed, then:
+
+  * If pname:extent.width is not a multiple of the compressed texel block
+    width, then [eq]#(pname:extent.width {plus} pname:srcOffset.x)# must:
+    equal the image subresource width.
+  * If pname:extent.height is not a multiple of the compressed texel block
+    height, then [eq]#(pname:extent.height {plus} pname:srcOffset.y)# must:
+    equal the image subresource height.
+  * If pname:extent.depth is not a multiple of the compressed texel block
+    depth, then [eq]#(pname:extent.depth {plus} pname:srcOffset.z)# must:
+    equal the image subresource depth.
+
+Similarly, if the pname:dstImage is compressed, then:
+
+  * If pname:extent.width is not a multiple of the compressed texel block
+    width, then [eq]#(pname:extent.width {plus} pname:dstOffset.x)# must:
+    equal the image subresource width.
+  * If pname:extent.height is not a multiple of the compressed texel block
+    height, then [eq]#(pname:extent.height {plus} pname:dstOffset.y)# must:
+    equal the image subresource height.
+  * If pname:extent.depth is not a multiple of the compressed texel block
+    depth, then [eq]#(pname:extent.depth {plus} pname:dstOffset.z)# must:
+    equal the image subresource depth.
+
+This allows the last compressed texel block of the image in each
+non-multiple dimension to be included as a source or destination of the
+copy.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+"`etext:_422`" image formats that are not
+<<formats-requiring-sampler-ycbcr-conversion,_multi-planar_>> are treated as
+having a 2{times}1 compressed texel block for the purposes of these rules.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+fname:vkCmdCopyImage can: be used to copy image data between multisample
+images, but both images must: have the same number of samples.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_image_command_buffer_common.txt[]
+include::{chapters}/commonvalidity/copy_image_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyImage.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+For ename:VK_IMAGE_TYPE_3D images, copies are performed slice by slice
+starting with the pname:z member of the pname:srcOffset or pname:dstOffset,
+and copying pname:depth slices.
+For images with multiple layers, copies are performed layer by layer
+starting with the pname:baseArrayLayer member of the pname:srcSubresource or
+pname:dstSubresource and copying pname:layerCount layers.
+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.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[]
+Copies 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 copied to the destination image.
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+Copies involving a <<formats-requiring-sampler-ycbcr-conversion,
+multi-planar image format>> specify the region to be copied in terms of the
+_plane_ to be copied, not the coordinates of the multi-planar image.
+This means that copies accessing the R/B planes of "`etext:_422`" format
+images must: fit the copied region within half the pname:width of the parent
+image, and that copies accessing the R/B planes of "`etext:_420`" format
+images must: fit the copied region within half the pname:width and
+pname:height of the parent image.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/image_copy_common.txt[]
+****
+
+include::{generated}/validity/structs/VkImageCopy.txt[]
+--
+
+[open,refpage='VkImageSubresourceLayers',desc='Structure specifying an image subresource layers',type='structs']
+--
+
+The sname:VkImageSubresourceLayers structure is defined as:
+
+include::{generated}/api/structs/VkImageSubresourceLayers.txt[]
+
+  * 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-01700]]
+    pname:layerCount must: be greater than 0
+****
+
+include::{generated}/validity/structs/VkImageSubresourceLayers.txt[]
+--
+
+ifdef::VK_KHR_copy_commands2[]
+
+A more extensible version of the copy image command is defined below.
+
+[open,refpage='vkCmdCopyImage2KHR',desc='Copy data between images',type='protos']
+--
+:refpage: vkCmdCopyImage2KHR
+
+To copy data between image objects, call:
+
+include::{generated}/api/protos/vkCmdCopyImage2KHR.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pCopyImageInfo is a pointer to a slink:VkCopyImageInfo2KHR
+    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.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyImage2KHR.txt[]
+--
+
+
+[open,refpage='VkCopyImageInfo2KHR',desc='Structure specifying parameters of an image copy command',type='structs']
+--
+:refpage: VkCopyImageInfo2KHR
+
+The sname:VkCopyImageInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkCopyImageInfo2KHR.txt[]
+
+  * pname:sType is the type of 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:VkImageCopy2KHR
+    structures specifying the regions to copy.
+
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_image_common.txt[]
+****
+
+include::{generated}/validity/structs/VkCopyImageInfo2KHR.txt[]
+--
+
+[open,refpage='VkImageCopy2KHR',desc='Structure specifying an image copy operation',type='structs']
+--
+:refpage: VkImageCopy2KHR
+
+The sname:VkImageCopy2KHR structure is defined as:
+
+include::{generated}/api/structs/VkImageCopy2KHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+****
+
+include::{generated}/validity/structs/VkImageCopy2KHR.txt[]
+--
+
+endif::VK_KHR_copy_commands2[]
+
+
+[[copies-buffers-images]]
+== Copying Data Between Buffers and Images
+
+[open,refpage='vkCmdCopyBufferToImage',desc='Copy data from a buffer into an image',type='protos']
+--
+:refpage: vkCmdCopyBufferToImage
+:imageparam: pname:dstImage
+
+To copy data from a buffer object to an image object, call:
+
+include::{generated}/api/protos/vkCmdCopyBufferToImage.txt[]
+
+  * 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 region in pname:pRegions is copied from the specified region of the
+source buffer to the specified region of the destination image.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If pname:dstImage has a
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, regions
+of each plane to be a target of a copy must: be specified separately using
+the pname:pRegions member of the slink:VkBufferImageCopy structure.
+In this case, the pname:aspectMask of pname:imageSubresource must: be
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
+ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
+For the purposes of fname:vkCmdCopyBufferToImage, each plane of a
+multi-planar image is treated as having the format listed in
+<<formats-compatible-planes>> for the plane identified by the
+pname:aspectMask of the corresponding subresource.
+This applies both to elink:VkFormat and to coordinates used in the copy,
+which correspond to texels in the _plane_ rather than how these texels map
+to coordinates in the image as a whole.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_buffer_to_image_command_buffer_common.txt[]
+  * [[VUID-vkCmdCopyBufferToImage-pRegions-06217]]
+    The image region specified by each element of pname:pRegions must: be
+    contained within the specified pname:imageSubresource of pname:dstImage
+include::{chapters}/commonvalidity/copy_buffer_to_image_common.txt[]
+  * [[VUID-vkCmdCopyBufferToImage-pRegions-06218]]
+    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:dstImage
+  * [[VUID-vkCmdCopyBufferToImage-pRegions-06219]]
+    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:dstImage
+include::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBufferToImage.txt[]
+--
+
+[open,refpage='vkCmdCopyImageToBuffer',desc='Copy image data into a buffer',type='protos']
+--
+:refpage: vkCmdCopyImageToBuffer
+:imageparam: pname:srcImage
+
+To copy data from an image object to a buffer object, call:
+
+include::{generated}/api/protos/vkCmdCopyImageToBuffer.txt[]
+
+  * 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 region in pname:pRegions is copied from the specified region of the
+source image to the specified region of the destination buffer.
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+If pname:srcImage has a <<formats-requiring-sampler-ycbcr-conversion,
+multi-planar format>>, regions of each plane to be a source of a copy must:
+be specified separately using the pname:pRegions member of the
+slink:VkBufferImageCopy structure.
+In this case, the pname:aspectMask of pname:imageSubresource must: be
+ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
+ename:VK_IMAGE_ASPECT_PLANE_2_BIT.
+For the purposes of fname:vkCmdCopyBufferToImage, each plane of a
+multi-planar image is treated as having the format listed in
+<<formats-compatible-planes>> for the plane identified by the
+pname:aspectMask of the corresponding subresource.
+This applies both to elink:VkFormat and to coordinates used in the copy,
+which correspond to texels in the _plane_ rather than how these texels map
+to coordinates in the image as a whole.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_image_to_buffer_command_buffer_common.txt[]
+  * [[VUID-vkCmdCopyImageToBuffer-pRegions-06220]]
+    The image region specified by each element of pname:pRegions must: be
+    contained within the specified pname:imageSubresource of pname:srcImage
+include::{chapters}/commonvalidity/copy_image_to_buffer_common.txt[]
+  * [[VUID-vkCmdCopyImageToBuffer-pRegions-06221]]
+    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:srcImage
+  * [[VUID-vkCmdCopyImageToBuffer-pRegions-06222]]
+    For each element of pname:pRegions, pname:imageOffset.y and
+    [eq]#(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::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyImageToBuffer.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+
+When copying to or from a depth or stencil aspect, the data in buffer memory
+uses a layout that is a (mostly) tightly packed representation of the depth
+or stencil data.
+Specifically:
+
+  * data copied to or from the stencil aspect of any depth/stencil format is
+    tightly packed with one ename:VK_FORMAT_S8_UINT value per texel.
+  * data copied to or from the depth aspect of a ename:VK_FORMAT_D16_UNORM
+    or ename:VK_FORMAT_D16_UNORM_S8_UINT format is tightly packed with one
+    ename:VK_FORMAT_D16_UNORM value per texel.
+  * data copied to or from the depth aspect of a ename:VK_FORMAT_D32_SFLOAT
+    or ename:VK_FORMAT_D32_SFLOAT_S8_UINT format is tightly packed with one
+    ename:VK_FORMAT_D32_SFLOAT value per texel.
+  * data copied to or from the depth aspect of a
+    ename:VK_FORMAT_X8_D24_UNORM_PACK32 or ename:VK_FORMAT_D24_UNORM_S8_UINT
+    format is packed with one 32-bit word per texel with the D24 value in
+    the LSBs of the word, and undefined: values in the eight MSBs.
+
+[NOTE]
+.Note
+====
+To copy both the depth and stencil aspects of a depth/stencil format, two
+entries in pname:pRegions can: be used, where one specifies the depth aspect
+in pname:imageSubresource, and the other specifies the stencil aspect.
+====
+
+Because depth or stencil aspect buffer to image copies may: require format
+conversions on some implementations, they are not supported on queues that
+do not support graphics.
+
+When copying to a depth aspect,
+ifdef::VK_EXT_depth_range_unrestricted[]
+and the `apiext:VK_EXT_depth_range_unrestricted` extension is not enabled,
+endif::VK_EXT_depth_range_unrestricted[]
+the data in buffer memory must: be in the range [eq]#[0,1]#, or the
+resulting values are undefined:.
+
+Copies are done layer by layer starting with image layer
+pname:baseArrayLayer member of pname:imageSubresource.
+pname:layerCount layers are copied from the source image or to the
+destination image.
+
+[[blocked-image]]
+For purpose of valid usage statements here and in related copy commands, a
+_blocked image_ is defined as:
+
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * an image with a _single-plane_, "`etext:_422`" format, which is treated
+    as a format with a 2 {times} 1 compressed texel block, or
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * a compressed image.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/buffer_image_copy_common.txt[]
+****
+
+include::{generated}/validity/structs/VkBufferImageCopy.txt[]
+--
+
+ifdef::VK_KHR_copy_commands2[]
+
+More extensible versions of the commands to copy between buffers and images
+are defined below.
+
+[open,refpage='vkCmdCopyBufferToImage2KHR',desc='Copy data from a buffer into an image',type='protos']
+--
+:refpage: vkCmdCopyBufferToImage2KHR
+
+To copy data from a buffer object to an image object, call:
+
+include::{generated}/api/protos/vkCmdCopyBufferToImage2KHR.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pCopyBufferToImageInfo is a pointer to a
+    slink:VkCopyBufferToImageInfo2KHR 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_buffer_to_image_command_buffer_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyBufferToImage2KHR.txt[]
+--
+
+[open,refpage='VkCopyBufferToImageInfo2KHR',desc='Structure specifying parameters of a buffer to image copy command',type='structs']
+--
+:refpage: VkCopyBufferToImageInfo2KHR
+:imageparam: pname:dstImage
+
+The sname:VkCopyBufferToImageInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkCopyBufferToImageInfo2KHR.txt[]
+
+  * pname:sType is the type of 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:VkBufferImageCopy2KHR
+    structures specifying the regions to copy.
+
+.Valid Usage
+****
+ifndef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-00172]]
+    The image region specified by each element of pname:pRegions must: be
+    contained within the specified pname:imageSubresource of pname:dstImage
+endif::VK_QCOM_rotated_copy_commands[]
+ifdef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkCopyBufferToImageInfo2KHR-pRegions-04565]]
+    If the image region specified by each element of pname:pRegions does not
+    contain slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
+    it must: be a region that is contained within the specified
+    pname:imageSubresource of pname:dstImage
+  * [[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: not be a <<blocked-image,blocked image>>
+  * [[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.txt[]
+  * [[VUID-VkCopyBufferToImageInfo2KHR-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-VkCopyBufferToImageInfo2KHR-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::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt[]
+****
+
+include::{generated}/validity/structs/VkCopyBufferToImageInfo2KHR.txt[]
+--
+
+[open,refpage='vkCmdCopyImageToBuffer2KHR',desc='Copy image data into a buffer',type='protos']
+--
+:refpage: vkCmdCopyImageToBuffer2KHR
+:imageparam: pname:srcImage
+
+To copy data from an image object to a buffer object, call:
+
+include::{generated}/api/protos/vkCmdCopyImageToBuffer2KHR.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pCopyImageToBufferInfo is a pointer to a
+    slink:VkCopyImageToBufferInfo2KHR 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.
+
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/copy_image_to_buffer_command_buffer_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyImageToBuffer2KHR.txt[]
+--
+
+[open,refpage='VkCopyImageToBufferInfo2KHR',desc='Structure specifying parameters of an image to buffer copy command',type='structs']
+--
+:refpage: VkCopyImageToBufferInfo2KHR
+
+The sname:VkCopyImageToBufferInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkCopyImageToBufferInfo2KHR.txt[]
+
+  * pname:sType is the type of 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:VkBufferImageCopy2KHR
+    structures specifying the regions to copy.
+
+.Valid Usage
+****
+ifndef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-00182]]
+    The image region specified by each element of pname:pRegions must: be
+    contained within the specified pname:imageSubresource of pname:srcImage
+endif::VK_QCOM_rotated_copy_commands[]
+ifdef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkCopyImageToBufferInfo2KHR-pRegions-04566]]
+    If the image region specified by each element of pname:pRegions does not
+    contain slink:VkCopyCommandTransformInfoQCOM in its pname:pNext chain,
+    it must: be contained within the specified pname:imageSubresource of
+    pname:srcImage
+  * [[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: not be a <<blocked-image,blocked image>>
+  * [[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.txt[]
+  * [[VUID-VkCopyImageToBufferInfo2KHR-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-VkCopyImageToBufferInfo2KHR-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::{chapters}/commonvalidity/copy_bufferimage_to_imagebuffer_common.txt[]
+****
+
+include::{generated}/validity/structs/VkCopyImageToBufferInfo2KHR.txt[]
+--
+
+[open,refpage='VkBufferImageCopy2KHR',desc='Structure specifying a buffer image copy operation',type='structs']
+--
+:refpage: VkBufferImageCopy2KHR
+
+For both flink:vkCmdCopyBufferToImage2KHR and
+flink:vkCmdCopyImageToBuffer2KHR, each element of pname:pRegions is a
+structure defined as:
+
+include::{generated}/api/structs/VkBufferImageCopy2KHR.txt[]
+
+  * pname:sType is the type of 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/buffer_image_copy_common.txt[]
+****
+
+include::{generated}/validity/structs/VkBufferImageCopy2KHR.txt[]
+--
+endif::VK_KHR_copy_commands2[]
+
+ifdef::VK_QCOM_rotated_copy_commands[]
+For both flink:vkCmdCopyBufferToImage2KHR and
+flink:vkCmdCopyImageToBuffer2KHR, each region copied can include a rotation.
+To specify a region with rotation, add the
+slink:VkCopyCommandTransformInfoQCOM to the pname:pNext chain of
+slink:VkBufferImageCopy2KHR.
+When a rotation is specified, <<copies-buffers-images-rotation-addressing,
+Buffer and Image Addressing with Rotation>> specifies how coordinates of
+texels in the source region are rotated by pname:transform to produce texel
+coordinates in the destination region.
+When rotation is specified, the source and destination images must: each be
+2D images.
+They must: not be <<blocked-image,blocked images>> or have a
+<<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>.
+
+[open,refpage='VkCopyCommandTransformInfoQCOM',desc='Structure describing transform parameters of rotated copy command',type='structs']
+--
+The sname:VkRenderPassTransformBeginInfoQCOM structure is defined as:
+
+include::{generated}/api/structs/VkCopyCommandTransformInfoQCOM.txt[]
+
+  * pname:sType is the type of 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.
+
+.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.txt[]
+--
+
+endif::VK_QCOM_rotated_copy_commands[]
+
+
+[[copies-buffers-images-addressing]]
+=== Buffer and Image Addressing
+
+Pseudocode for image/buffer addressing of uncompressed formats is:
+
+[source,c]
+---------------------------------------------------
+rowLength = region->bufferRowLength;
+if (rowLength == 0)
+    rowLength = region->imageExtent.width;
+
+imageHeight = region->bufferImageHeight;
+if (imageHeight == 0)
+    imageHeight = region->imageExtent.height;
+
+texelBlockSize = <texel block size of the format of the src/dstImage>;
+
+address of (x,y,z) = region->bufferOffset + (((z * imageHeight) + y) * rowLength + x) * texelBlockSize;
+
+where x,y,z range from (0,0,0) to region->imageExtent.{width,height,depth}.
+---------------------------------------------------
+
+Note that pname:imageOffset does not affect addressing calculations for
+buffer memory.
+Instead, pname:bufferOffset can: be used to select the starting address in
+buffer memory.
+
+For block-compressed formats, all parameters are still specified in texels
+rather than compressed texel blocks, but the addressing math operates on
+whole compressed texel blocks.
+Pseudocode for compressed copy addressing is:
+
+[source,c]
+---------------------------------------------------
+rowLength = region->bufferRowLength;
+if (rowLength == 0)
+    rowLength = region->imageExtent.width;
+
+imageHeight = region->bufferImageHeight;
+if (imageHeight == 0)
+    imageHeight = region->imageExtent.height;
+
+compressedTexelBlockSizeInBytes = <compressed texel block size taken from the src/dstImage>;
+rowLength = (rowLength + compressedTexelBlockWidth - 1) / compressedTexelBlockWidth;
+imageHeight = (imageHeight + compressedTexelBlockHeight - 1) / compressedTexelBlockHeight;
+
+address of (x,y,z) = region->bufferOffset + (((z * imageHeight) + y) * rowLength + x) * compressedTexelBlockSizeInBytes;
+
+where x,y,z range from (0,0,0) to region->imageExtent.{width/compressedTexelBlockWidth,height/compressedTexelBlockHeight,depth/compressedTexelBlockDepth}.
+---------------------------------------------------
+
+Copying to or from block-compressed images is typically done in multiples of
+the compressed texel block size.
+For this reason the pname:imageExtent must: be a multiple of the compressed
+texel block dimension.
+There is one exception to this rule which is required: to handle compressed
+images created with dimensions that are not a multiple of the compressed
+texel block dimensions:
+
+  * If pname:imageExtent.width is not a multiple of the compressed texel
+    block width, then [eq]#(pname:imageExtent.width {plus}
+    pname:imageOffset.x)# must: equal the image subresource width.
+  * If pname:imageExtent.height is not a multiple of the compressed texel
+    block height, then [eq]#(pname:imageExtent.height {plus}
+    pname:imageOffset.y)# must: equal the image subresource height.
+  * If pname:imageExtent.depth is not a multiple of the compressed texel
+    block depth, then [eq]#(pname:imageExtent.depth {plus}
+    pname:imageOffset.z)# must: equal the image subresource depth.
+
+This allows the last compressed texel block of the image in each
+non-multiple dimension to be included as a source or destination of the
+copy.
+
+ifdef::VK_QCOM_rotated_copy_commands[]
+include::VK_QCOM_rotated_copies/rotated_addressing_copies.txt[]
+endif::VK_QCOM_rotated_copy_commands[]
+
+
+[[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.txt[]
+
+  * 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, unscaled 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.txt[]
+include::{chapters}/commonvalidity/blit_image_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdBlitImage.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+****
+
+include::{generated}/validity/structs/VkImageBlit.txt[]
+--
+
+ifdef::VK_KHR_copy_commands2[]
+
+A more extensible version of the blit image command is defined below.
+
+[open,refpage='vkCmdBlitImage2KHR',desc='Copy regions of an image, potentially performing format conversion,',type='protos']
+--
+:refpage: vkCmdBlitImage2KHR
+
+To copy regions of a source image into a destination image, potentially
+performing format conversion, arbitrary scaling, and filtering, call:
+
+include::{generated}/api/protos/vkCmdBlitImage2KHR.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pBlitImageInfo is a pointer to a slink:VkBlitImageInfo2KHR
+    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.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdBlitImage2KHR.txt[]
+--
+
+[open,refpage='VkBlitImageInfo2KHR',desc='Structure specifying parameters of blit image command',type='structs']
+--
+:refpage: VkBlitImageInfo2KHR
+
+The sname:VkBlitImageInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkBlitImageInfo2KHR.txt[]
+
+  * pname:sType is the type of 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:VkImageBlit2KHR
+    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.txt[]
+ifdef::VK_QCOM_rotated_copy_commands[]
+  * [[VUID-VkBlitImageInfo2KHR-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[]
+****
+
+include::{generated}/validity/structs/VkBlitImageInfo2KHR.txt[]
+--
+
+[open,refpage='VkImageBlit2KHR',desc='Structure specifying an image blit operation',type='structs']
+--
+:refpage: VkImageBlit2KHR
+
+The sname:VkImageBlit2KHR structure is defined as:
+
+include::{generated}/api/structs/VkImageBlit2KHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+****
+
+include::{generated}/validity/structs/VkImageBlit2KHR.txt[]
+--
+
+ifdef::VK_QCOM_rotated_copy_commands[]
+For flink:vkCmdBlitImage2KHR, each region copied can include a rotation.
+To specify a rotated region, add slink:VkCopyCommandTransformInfoQCOM to the
+pname:pNext chain of slink:VkImageBlit2KHR.
+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.
+They must: not be <<blocked-image,blocked images>> or have a
+<<formats-requiring-sampler-ycbcr-conversion, multi-planar format>>.
+endif::VK_QCOM_rotated_copy_commands[]
+
+endif::VK_KHR_copy_commands2[]
+
+ifdef::VK_QCOM_rotated_copy_commands[]
+include::VK_QCOM_rotated_copies/rotated_addressing_blits.txt[]
+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.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/resolve_image_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdResolveImage.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+****
+
+include::{generated}/validity/structs/VkImageResolve.txt[]
+--
+
+ifdef::VK_AMD_buffer_marker[]
+include::VK_AMD_buffer_marker/copies.txt[]
+endif::VK_AMD_buffer_marker[]
+
+ifdef::VK_KHR_copy_commands2[]
+
+A more extensible version of the resolve image command is defined below.
+
+[open,refpage='vkCmdResolveImage2KHR',desc='Resolve regions of an image',type='protos']
+--
+:refpage: vkCmdResolveImage2KHR
+
+To resolve a multisample image to a non-multisample image, call:
+
+include::{generated}/api/protos/vkCmdResolveImage2KHR.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:pResolveImageInfo is a pointer to a slink:VkResolveImageInfo2KHR
+    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.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdResolveImage2KHR.txt[]
+--
+
+[open,refpage='VkResolveImageInfo2KHR',desc='Structure specifying parameters of resolve image command',type='structs']
+--
+:refpage: VkResolveImageInfo2KHR
+
+The sname:VkResolveImageInfo2KHR structure is defined as:
+
+include::{generated}/api/structs/VkResolveImageInfo2KHR.txt[]
+
+  * pname:sType is the type of 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:VkImageResolve2KHR
+    structures specifying the regions to resolve.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/resolve_image_common.txt[]
+****
+
+include::{generated}/validity/structs/VkResolveImageInfo2KHR.txt[]
+--
+
+[open,refpage='VkImageResolve2KHR',desc='Structure specifying an image resolve operation',type='structs']
+--
+:refpage: VkImageResolve2KHR
+
+The sname:VkImageResolve2KHR structure is defined as:
+
+include::{generated}/api/structs/VkImageResolve2KHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+****
+
+include::{generated}/validity/structs/VkImageResolve2KHR.txt[]
+--
+
+endif::VK_KHR_copy_commands2[]
diff --git a/registry/vulkan/chapters/debugging.txt b/registry/vulkan/chapters/debugging.txt
new file mode 100644
index 0000000..cfeba6c
--- /dev/null
+++ b/registry/vulkan/chapters/debugging.txt
@@ -0,0 +1,234 @@
+// Copyright 2015-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= 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.txt[]
+
+[[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
+| ename:VK_OBJECT_TYPE_SHADER_MODULE         | slink:VkShaderModule
+| 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[]
+| ename:VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE | slink:VkDescriptorUpdateTemplate
+endif::VK_VERSION_1_1,VK_KHR_descriptor_update_template[]
+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_NV_device_generated_commands[]
+| ename:VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV | slink:VkIndirectCommandsLayoutNV
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_debug_utils[]
+| ename:VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT | slink:VkDebugUtilsMessengerEXT
+endif::VK_EXT_debug_utils[]
+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_KHR_acceleration_structure[]
+| ename:VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR | slink:VkAccelerationStructureKHR
+endif::VK_KHR_acceleration_structure[]
+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_EXT_private_data[]
+| ename:VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT | slink:VkPrivateDataSlotEXT
+endif::VK_EXT_private_data[]
+|====
+--
+
+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::VK_EXT_debug_utils.txt[]
+endif::VK_EXT_debug_utils[]
+
+ifdef::VK_EXT_debug_marker[]
+include::VK_EXT_debug_marker.txt[]
+endif::VK_EXT_debug_marker[]
+
+ifdef::VK_EXT_debug_report[]
+include::VK_EXT_debug_report.txt[]
+endif::VK_EXT_debug_report[]
+
+ifdef::VK_NV_device_diagnostic_checkpoints[]
+include::VK_NV_device_diagnostic_checkpoints/device_diagnostic_checkpoints.txt[]
+endif::VK_NV_device_diagnostic_checkpoints[]
+
+
+ifdef::VK_EXT_tooling_info[]
+[[debugging-tooling-info]]
+== Active Tooling Information
+
+[open,refpage='vkGetPhysicalDeviceToolPropertiesEXT',desc='Reports properties of tools active on the specified physical device',type='protos']
+--
+Information about tools providing debugging, profiling, or similar services,
+active for a given physical device, can be obtained by calling:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceToolPropertiesEXT.txt[]
+
+  * 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:VkPhysicalDeviceToolPropertiesEXT 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/vkGetPhysicalDeviceToolPropertiesEXT.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceToolPropertiesEXT',desc='Structure providing information about an active tool',type='structs']
+--
+The slink:VkPhysicalDeviceToolPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceToolPropertiesEXT.txt[]
+
+  * pname:sType is the type of 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:VkToolPurposeFlagBitsEXT 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 that contains 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/VkPhysicalDeviceToolPropertiesEXT.txt[]
+--
+
+[open,refpage='VkToolPurposeFlagBitsEXT',desc='Bitmask specifying the purposes of an active tool',type='enums']
+--
+Bits which can: be set in slink:VkDeviceQueueCreateInfo::pname:purposes
+specifying the purposes of an active tool are:
+
+include::{generated}/api/enums/VkToolPurposeFlagBitsEXT.txt[]
+
+  * ename:VK_TOOL_PURPOSE_VALIDATION_BIT_EXT specifies that the tool
+    provides validation of API usage.
+  * ename:VK_TOOL_PURPOSE_PROFILING_BIT_EXT specifies that the tool provides
+    profiling of API usage.
+  * ename:VK_TOOL_PURPOSE_TRACING_BIT_EXT 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_EXT specifies that the
+    tool provides additional API features/extensions on top of the
+    underlying implementation.
+  * ename:VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT 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='VkToolPurposeFlagsEXT',desc='Bitmask of VkToolPurposeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkToolPurposeFlagsEXT.txt[]
+
+tlink:VkToolPurposeFlagsEXT is a bitmask type for setting a mask of zero or
+more elink:VkToolPurposeFlagBitsEXT.
+--
+endif::VK_EXT_tooling_info[]
diff --git a/registry/vulkan/chapters/descriptorsets.txt b/registry/vulkan/chapters/descriptorsets.txt
new file mode 100644
index 0000000..e47d128
--- /dev/null
+++ b/registry/vulkan/chapters/descriptorsets.txt
@@ -0,0 +1,4835 @@
+// Copyright 2015-2021 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 organised 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.
+
+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 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 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>>.
+
+The image subresources for a sampled image must: be in the
+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[]
+ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
+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-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.
+
+The image subresources for a combined image sampler must: be in the
+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[]
+ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
+ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, or
+ename:VK_IMAGE_LAYOUT_GENERAL layout in order to access its data in a
+shader.
+
+[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,formatted load
+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 image formats which report support for the
+<<formats-properties,ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT>>
+feature bit via flink:vkGetPhysicalDeviceFormatProperties in
+slink:VkFormatProperties::pname:bufferFeatures.
+
+
+[[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,formatted
+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 formats which report support for the
+<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT>>
+feature bit via flink:vkGetPhysicalDeviceFormatProperties in
+slink:VkFormatProperties::pname:bufferFeatures.
+
+Stores to storage texel buffers are supported in compute shaders for texel
+buffer formats which report support for the
+ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT feature via
+flink:vkGetPhysicalDeviceFormatProperties in
+slink:VkFormatProperties::pname:bufferFeatures.
+
+Atomic operations on storage texel buffers are supported in compute shaders
+for texel buffer formats which report support for the
+<<formats-properties,ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT>>
+feature via flink:vkGetPhysicalDeviceFormatProperties in
+slink:VkFormatProperties::pname:bufferFeatures.
+
+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_EXT_inline_uniform_block[]
+
+[[descriptorsets-inlineuniformblock]]
+=== Inline Uniform Block
+
+An _inline uniform block_
+(ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT) 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_EXT_inline_uniform_block[]
+
+
+[[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) or depth/stencil attachments
+(ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) for a given image
+tiling mode are also supported for input attachments.
+
+The image subresources for an input attachment must: be in a
+<<attachment-type-imagelayout, valid image layout>> in order to access its
+data in a shader.
+
+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_VALVE_mutable_descriptor_type[]
+[[descriptorsets-mutable]]
+=== Mutable
+
+A descriptor of _mutable_ (ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) type
+indicates that this descriptor can: mutate to any of the descriptor types
+given in the
+slink:VkMutableDescriptorTypeCreateInfoVALVE::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_VALVE 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_VALVE.
+
+An active descriptor type of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE 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_VALVE, the application can: use
+flink:vkGetDescriptorSetLayoutSupport with an
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE binding, with the list of descriptor
+types to query in the
+slink:VkMutableDescriptorTypeCreateInfoVALVE::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
+run-time 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_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.txt[]
+--
+
+[open,refpage='vkCreateDescriptorSetLayout',desc='Create a new descriptor set layout',type='protos']
+--
+To create descriptor set layout objects, call:
+
+include::{generated}/api/protos/vkCreateDescriptorSetLayout.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateDescriptorSetLayout.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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_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_EXT
+endif::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_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_VALVE
+  * [[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_VALVE
+endif::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_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_VALVE
+endif::VK_VALVE_mutable_descriptor_type[]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-04593]]
+    If any binding has a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, then a
+    slink:VkMutableDescriptorTypeCreateInfoVALVE must: be present in the
+    pname:pNext chain
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-04594]]
+    If a binding has a pname:descriptorType value of
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, then sname:pImmutableSamplers
+    must: be `NULL`
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-mutableDescriptorType-04595]]
+    If
+    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE::pname:mutableDescriptorType
+    is not enabled, pname:pBindings must: not contain a pname:descriptorType
+    of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
+  * [[VUID-VkDescriptorSetLayoutCreateInfo-flags-04596]]
+    If pname:flags contains
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE,
+    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE::pname:mutableDescriptorType
+    must: be enabled
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkDescriptorSetLayoutCreateInfo.txt[]
+--
+
+ifdef::VK_VALVE_mutable_descriptor_type[]
+
+[open,refpage='VkMutableDescriptorTypeCreateInfoVALVE',desc='Structure describing the list of possible active descriptor types for mutable type descriptors',type='structs']
+--
+Information about the possible descriptor types for mutable descriptor types
+is passed in a sname:VkMutableDescriptorTypeCreateInfoVALVE structure as a
+pname:pNext to a slink:VkDescriptorSetLayoutCreateInfo structure or a
+slink:VkDescriptorPoolCreateInfo structure.
+
+The sname:VkMutableDescriptorTypeCreateInfoVALVE structure is defined as:
+
+include::{generated}/api/structs/VkMutableDescriptorTypeCreateInfoVALVE.txt[]
+
+  * pname:sType is the type of 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:VkMutableDescriptorTypeListVALVE structures.
+
+If pname:mutableDescriptorTypeListCount is zero or if this structure is not
+included in the pname:pNext chain, the
+slink:VkMutableDescriptorTypeListVALVE 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:VkMutableDescriptorTypeCreateInfoVALVE::pname:pMutableDescriptorTypeLists[i].
+
+include::{generated}/validity/structs/VkMutableDescriptorTypeCreateInfoVALVE.txt[]
+--
+
+[open,refpage='VkMutableDescriptorTypeListVALVE',desc='Structure describing descriptor types that a given descriptor may mutate to',type='structs']
+--
+The list of potential descriptor types a given mutable descriptor can:
+mutate to is passed in a sname:VkMutableDescriptorTypeListVALVE structure.
+
+The sname:VkMutableDescriptorTypeListVALVE structure is defined as:
+
+include::{generated}/api/structs/VkMutableDescriptorTypeListVALVE.txt[]
+
+  * 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 which define
+    which descriptor types a given binding may mutate to.
+
+.Valid Usage
+****
+  * [[VUID-VkMutableDescriptorTypeListVALVE-descriptorTypeCount-04597]]
+    pname:descriptorTypeCount must: not be `0` if the corresponding binding
+    is of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
+  * [[VUID-VkMutableDescriptorTypeListVALVE-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_VALVE type
+  * [[VUID-VkMutableDescriptorTypeListVALVE-descriptorTypeCount-04599]]
+    pname:descriptorTypeCount must: be `0` if the corresponding binding is
+    not of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
+  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04600]]
+    pname:pDescriptorTypes must: not contain
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
+  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04601]]
+    pname:pDescriptorTypes must: not contain
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04602]]
+    pname:pDescriptorTypes must: not contain
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
+ifdef::VK_EXT_inline_uniform_block[]
+  * [[VUID-VkMutableDescriptorTypeListVALVE-pDescriptorTypes-04603]]
+    pname:pDescriptorTypes must: not contain
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
+endif::VK_EXT_inline_uniform_block[]
+****
+
+include::{generated}/validity/structs/VkMutableDescriptorTypeListVALVE.txt[]
+--
+
+endif::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
+to specify options for descriptor set layout are:
+
+include::{generated}/api/enums/VkDescriptorSetLayoutCreateFlagBits.txt[]
+
+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_VALVE_mutable_descriptor_type[]
+  * ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE 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_VALVE bit set.
+    Descriptor set layouts created with this bit have no expressable 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_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.txt[]
+
+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.txt[]
+
+  * 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_EXT_inline_uniform_block[array.]
+ifdef::VK_EXT_inline_uniform_block[]
+    array, except if pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT in which case
+    pname:descriptorCount is the size in bytes of the inline uniform block.
+endif::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_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-04604]]
+    If the <<features-inlineUniformBlock,inlineUniformBlock>> feature is not
+    enabled, pname:descriptorType must: not be
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-02209]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
+    pname:descriptorCount must: be a multiple of `4`
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-02210]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
+    pname:descriptorCount must: be less than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxInlineUniformBlockSize
+endif::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_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorSetLayoutBinding-descriptorType-04605]]
+    If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, then
+    sname:pImmutableSamplers must: be `NULL`
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkDescriptorSetLayoutBinding.txt[]
+--
+
+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.txt[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorSetLayoutBindingFlagsCreateInfoEXT.txt[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * pname:sType is the type of 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-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_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingInlineUniformBlockUpdateAfterBind-02211]]
+    If
+    slink:VkPhysicalDeviceInlineUniformBlockFeaturesEXT::pname:descriptorBindingInlineUniformBlockUpdateAfterBind
+    is not enabled, all bindings with descriptor type
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT must: not use
+    ename:VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT
+endif::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.txt[]
+--
+
+[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 to
+specify options for the corresponding descriptor set layout binding are:
+
+include::{generated}/api/enums/VkDescriptorBindingFlagBits.txt[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/enums/VkDescriptorBindingFlagBitsEXT.txt[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * 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.
+  * 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.
+    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 descriptor binding has a variable size that 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_EXT_inline_uniform_block[counted.]
+ifdef::VK_EXT_inline_uniform_block[]
+    counted, except for descriptor bindings with a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT where
+    pname:descriptorCount specifies the upper bound on the byte size of the
+    binding, thus it counts against the <<limits-maxInlineUniformBlockSize,
+    pname:maxInlineUniformBlockSize>> limit instead.
+endif::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.txt[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/flags/VkDescriptorBindingFlagsEXT.txt[]
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_maintenance3[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorSetLayoutSupportKHR.txt[]
+endif::VK_KHR_maintenance3[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountLayoutSupportEXT.txt[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * pname:sType is the type of 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_EXT_inline_uniform_block[]
+    If the highest numbered binding of the layout has a descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
+    pname:maxVariableDescriptorCount indicates the maximum byte size
+    supported for the binding, if that binding is variable-sized.
+endif::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 if the pname:descriptorCount is
+one, 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.txt[]
+--
+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
+    {
+        0,                                      // binding
+        VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,       // descriptorType
+        1,                                      // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
+        NULL                                    // pImmutableSamplers
+    },
+
+    // binding to an array of image descriptors
+    {
+        1,                                      // binding
+        VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,       // descriptorType
+        12,                                     // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
+        NULL                                    // pImmutableSamplers
+    },
+
+    // binding to a single uniform buffer descriptor
+    {
+        0,                                      // binding
+        VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,      // descriptorType
+        1,                                      // descriptorCount
+        VK_SHADER_STAGE_FRAGMENT_BIT,           // stageFlags
+        NULL                                    // pImmutableSamplers
+    }
+};
+
+const VkDescriptorSetLayoutCreateInfo myDescriptorSetLayoutCreateInfo[] =
+{
+    // Information for first descriptor set with two descriptor bindings
+    {
+        VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,    // sType
+        NULL,                                                   // pNext
+        0,                                                      // flags
+        2,                                                      // bindingCount
+        &myDescriptorSetLayoutBinding[0]                        // pBindings
+    },
+
+    // Information for second descriptor set with one descriptor binding
+    {
+        VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,    // sType
+        NULL,                                                   // pNext
+        0,                                                      // flags
+        1,                                                      // bindingCount
+        &myDescriptorSetLayoutBinding[2]                        // pBindings
+    }
+};
+
+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.txt[]
+
+  * 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.
+
+.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`
+****
+
+include::{generated}/validity/protos/vkDestroyDescriptorSetLayout.txt[]
+--
+
+
+[[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.txt[]
+--
+
+[open,refpage='vkCreatePipelineLayout',desc='Creates a new pipeline layout object',type='protos']
+--
+To create a pipeline layout, call:
+
+include::{generated}/api/protos/vkCreatePipelineLayout.txt[]
+
+  * 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::{generated}/validity/protos/vkCreatePipelineLayout.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * 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.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286]]
+    pname:setLayoutCount must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00287]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_SAMPLER and
+    ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any shader
+    stage across all elements of pname:pSetLayouts must: be less than or
+    equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00288]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any shader
+    stage across all elements of pname:pSetLayouts must: be less than or
+    equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00289]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any shader
+    stage across all elements of pname:pSetLayouts must: be less than or
+    equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00290]]
+    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 to any shader
+    stage across all elements of pname:pSetLayouts must: be less than or
+    equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00291]]
+    The total number of descriptors of the type
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any shader
+    stage across all elements of pname:pSetLayouts must: be less than or
+    equal to
+    sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01676]]
+    The total number of descriptors of the type
+    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_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02212]]
+    The total number of bindings with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxPerStageDescriptorInlineUniformBlocks
+endif::VK_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01677]]
+    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:VkPhysicalDeviceLimits::pname:maxDescriptorSetSamplers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01678]]
+    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:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01679]]
+    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:VkPhysicalDeviceLimits::pname:maxDescriptorSetUniformBuffersDynamic
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01680]]
+    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:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffers
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01681]]
+    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:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageBuffersDynamic
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01682]]
+    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:VkPhysicalDeviceLimits::pname:maxDescriptorSetSampledImages
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01683]]
+    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:VkPhysicalDeviceLimits::pname:maxDescriptorSetStorageImages
+  * [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-01684]]
+    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:VkPhysicalDeviceLimits::pname:maxDescriptorSetInputAttachments
+ifdef::VK_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02213]]
+    The total number of bindings with a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxDescriptorSetInlineUniformBlocks
+endif::VK_EXT_inline_uniform_block[]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03016]]
+    The total number of descriptors 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_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 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_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 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_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-03019]]
+    The total number of descriptors 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_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:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03020]]
+    The total number of descriptors 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_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 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_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_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02214]]
+    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_INLINE_UNIFORM_BLOCK_EXT accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxPerStageDescriptorInlineUniformBlocks
+endif::VK_EXT_inline_uniform_block[]
+  * [[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_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_EXT accessible to any
+    given shader stage across all elements of pname:pSetLayouts must: be
+    less than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
+endif::VK_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-03028]]
+    The total number of descriptors 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_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 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_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 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_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 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_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 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_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 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_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 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_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 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_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_EXT_inline_uniform_block[]
+  * [[VUID-VkPipelineLayoutCreateInfo-descriptorType-02216]]
+    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_INLINE_UNIFORM_BLOCK_EXT accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxDescriptorSetInlineUniformBlocks
+endif::VK_EXT_inline_uniform_block[]
+  * [[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_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_EXT accessible across all
+    shader stages and across all elements of pname:pSetLayouts must: be less
+    than or equal to
+    sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT::pname:maxDescriptorSetUpdateAfterBindInlineUniformBlocks
+endif::VK_EXT_inline_uniform_block[]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[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_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_VALVE bit set
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkPipelineLayoutCreateInfo.txt[]
+--
+
+[open,refpage='VkPipelineLayoutCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineLayoutCreateFlags.txt[]
+
+tname:VkPipelineLayoutCreateFlags is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
+
+[open,refpage='VkPushConstantRange',desc='Structure specifying a push constant range',type='structs']
+--
+The sname:VkPushConstantRange structure is defined as:
+
+include::{generated}/api/structs/VkPushConstantRange.txt[]
+
+  * 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.txt[]
+--
+
+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, or that are dead-code eliminated from any of the shaders.
+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, or for which the variables have been
+dead-code eliminated from any of the shaders.
+
+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_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_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.txt[]
+
+  * 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
+****
+  * [[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`
+  * [[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.txt[]
+--
+
+
+[[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, 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, if the previously bound descriptor sets for sets
+zero through N-1 were all bound using compatible pipeline layouts, then
+performing this binding does not disturb any of the lower numbered sets.
+If, additionally, the previously bound descriptor set for set N was bound
+using a pipeline layout compatible for set N, then the bindings in sets
+numbered greater than N are also not disturbed.
+
+Similarly, when binding a pipeline, the pipeline can: correctly access any
+previously bound descriptor sets which were bound with compatible pipeline
+layouts, as long as all lower numbered sets were also bound with compatible
+layouts.
+
+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.
+
+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[] =
+{
+    {
+        VK_SHADER_STAGE_VERTEX_BIT,    // stageFlags
+        0,                             // offset
+        4                              // size
+    },
+
+    {
+        VK_SHADER_STAGE_FRAGMENT_BIT,  // stageFlags
+        4,                             // offset
+        4                              // size
+    },
+};
+
+const VkPipelineLayoutCreateInfo createInfo =
+{
+    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,  // sType
+    NULL,                                           // pNext
+    0,                                              // flags
+    2,                                              // setLayoutCount
+    layouts,                                        // pSetLayouts
+    2,                                              // pushConstantRangeCount
+    ranges                                          // pPushConstantRanges
+};
+
+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.txt[]
+
+--
+
+[open,refpage='vkCreateDescriptorPool',desc='Creates a descriptor pool object',type='protos']
+--
+To create a descriptor pool object, call:
+
+include::{generated}/api/protos/vkCreateDescriptorPool.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateDescriptorPool.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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_VALVE_mutable_descriptor_type[]
+If a pname:pPoolSizes[i]::pname:type is
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, a
+slink:VkMutableDescriptorTypeCreateInfoVALVE struct in the pname:pNext chain
+can: be used to specify which mutable descriptor types can: be allocated
+from the pool.
+If present in the pname:pNext chain,
+slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pMutableDescriptorTypeLists[i]
+specifies which kind of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE descriptors
+can: be allocated from this pool entry.
+If slink:VkMutableDescriptorTypeCreateInfoVALVE does not exist in the
+pname:pNext chain, or
+slink:VkMutableDescriptorTypeCreateInfoVALVE::pname:pMutableDescriptorTypeLists[i]
+is out of range, the descriptor pool allocates enough memory to be able to
+allocate a ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE 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_VALVE 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:VkMutableDescriptorTypeListVALVE assigned to it
+is considered to partially overlap any other pool entry which has a
+sname:VkMutableDescriptorTypeListVALVE 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_VALVE_mutable_descriptor_type[]
+
+.Valid Usage
+****
+  * [[VUID-VkDescriptorPoolCreateInfo-maxSets-00301]]
+    pname:maxSets must: be greater than `0`
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorPoolCreateInfo-flags-04607]]
+    If pname:flags has the
+    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE bit set, then the
+    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit must: not be
+    set
+endif::VK_VALVE_mutable_descriptor_type[]
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkDescriptorPoolCreateInfo-mutableDescriptorType-04608]]
+    If
+    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE::pname:mutableDescriptorType
+    is not enabled, pname:pPoolSizes must: not contain a
+    pname:descriptorType of ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
+  * [[VUID-VkDescriptorPoolCreateInfo-flags-04609]]
+    If pname:flags has the
+    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE bit set,
+    slink:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE::pname:mutableDescriptorType
+    must: be enabled
+  * [[VUID-VkDescriptorPoolCreateInfo-pPoolSizes-04787]]
+    If pname:pPoolSizes contains a pname:descriptorType of
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, any other
+    ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE element in pname:pPoolSizes must:
+    not have sets of supported descriptor types which partially overlap
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkDescriptorPoolCreateInfo.txt[]
+--
+
+ifdef::VK_EXT_inline_uniform_block[]
+[open,refpage='VkDescriptorPoolInlineUniformBlockCreateInfoEXT',desc='Structure specifying the maximum number of inline uniform block bindings of a newly created descriptor pool',type='structs']
+--
+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_EXT.
+This can: be done by adding a
+sname:VkDescriptorPoolInlineUniformBlockCreateInfoEXT structure to the
+pname:pNext chain of slink:VkDescriptorPoolCreateInfo.
+
+The sname:VkDescriptorPoolInlineUniformBlockCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkDescriptorPoolInlineUniformBlockCreateInfoEXT.txt[]
+
+  * pname:sType is the type of 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/VkDescriptorPoolInlineUniformBlockCreateInfoEXT.txt[]
+--
+endif::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 to
+enable operations on a descriptor pool are:
+
+include::{generated}/api/enums/VkDescriptorPoolCreateFlagBits.txt[]
+
+  * 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_VALVE_mutable_descriptor_type[]
+  * ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE specifies that this
+    descriptor pool and the descriptor sets allocated from it reside
+    entirely in host memory and cannot be bound.
+    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_VALVE_mutable_descriptor_type[]
+--
+
+[open,refpage='VkDescriptorPoolCreateFlags',desc='Bitmask of VkDescriptorPoolCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkDescriptorPoolCreateFlags.txt[]
+
+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.txt[]
+
+  * pname:type is the type of descriptor.
+  * pname:descriptorCount is the number of descriptors of that type to
+    allocate.
+ifdef::VK_EXT_inline_uniform_block[]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
+    pname:descriptorCount is the number of bytes to allocate for descriptors
+    of this type.
+endif::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_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorPoolSize-type-02218]]
+    If pname:type is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
+    pname:descriptorCount must: be a multiple of `4`
+endif::VK_EXT_inline_uniform_block[]
+****
+
+include::{generated}/validity/structs/VkDescriptorPoolSize.txt[]
+--
+
+[open,refpage='vkDestroyDescriptorPool',desc='Destroy a descriptor pool object',type='protos']
+--
+To destroy a descriptor pool, call:
+
+include::{generated}/api/protos/vkDestroyDescriptorPool.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+--
+
+[open,refpage='vkAllocateDescriptorSets',desc='Allocate one or more descriptor sets',type='protos']
+--
+To allocate descriptor sets from a descriptor pool, call:
+
+include::{generated}/api/protos/vkAllocateDescriptorSets.txt[]
+
+  * 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.
+
+When a descriptor set is allocated, the initial state is largely
+uninitialized and all descriptors are undefined:.
+Descriptors also become undefined: if the underlying resource 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_EXT_inline_uniform_block[]
+  * Descriptor bindings with descriptor type of
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT can: be undefined:
+    when the descriptor set is <<descriptorsets-binding,consumed>>; though
+    values in that block will be undefined:.
+endif::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_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:VkDescriptorPoolInlineUniformBlockCreateInfoEXT::pname:maxInlineUniformBlockBindings
+used to create the descriptor pool.
+endif::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::{generated}/validity/protos/vkAllocateDescriptorSets.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-00306]]
+    pname:descriptorSetCount must: not be greater than the number of sets
+    that are currently available for allocation in pname:descriptorPool
+  * [[VUID-VkDescriptorSetAllocateInfo-descriptorPool-00307]]
+    pname:descriptorPool must: have enough free descriptor capacity
+    remaining to allocate the descriptor sets of the specified layouts
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+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
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::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_VALVE bit set,
+    pname:descriptorPool must: have been created with the
+    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE flag set
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkDescriptorSetAllocateInfo.txt[]
+--
+
+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 descriptor count bindings, one for each descriptor set being
+allocated.
+
+The sname:VkDescriptorSetVariableDescriptorCountAllocateInfo structure is
+defined as:
+
+include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountAllocateInfo.txt[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorSetVariableDescriptorCountAllocateInfoEXT.txt[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * pname:sType is the type of 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
+    descriptor count 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 count descriptor binding in the corresponding descriptor set
+layout.
+ifdef::VK_EXT_inline_uniform_block[]
+If the variable count descriptor binding in the corresponding descriptor set
+layout has a descriptor type of
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then
+pname:pDescriptorCounts[i] specifies the binding's capacity in bytes.
+endif::VK_EXT_inline_uniform_block[]
+If slink:VkDescriptorSetAllocateInfo::pname:pSetLayouts[i] does not include
+a variable count 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 descriptor count 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.txt[]
+--
+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.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkDescriptorPoolResetFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDescriptorPoolResetFlags.txt[]
+
+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.txt[]
+
+  * 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[]
+ifndef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-vkUpdateDescriptorSets-dstSet-00314]]
+    The pname:dstSet member of each element of pname:pDescriptorWrites or
+    pname:pDescriptorCopies must: not be used by any command that was
+    recorded to a command buffer which is in the <<commandbuffers-lifecycle,
+    pending state>>
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * [[VUID-vkUpdateDescriptorSets-None-03047]]
+    Descriptor bindings updated by this command 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
+    must: not be used by any command that was recorded to a command buffer
+    which is in the <<commandbuffers-lifecycle,pending state>>
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+****
+
+include::{generated}/validity/protos/vkUpdateDescriptorSets.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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_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_EXT then
+    pname:dstArrayElement specifies the starting byte offset within the
+    binding.
+endif::VK_EXT_inline_uniform_block[]
+  * pname:descriptorCount is the number of descriptors to update.
+ifdef::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_EXT, then
+    pname:descriptorCount specifies the number of bytes to update.
+    Otherwise,
+endif::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_EXT_inline_uniform_block[]
+  ** a value matching the pname:dataSize member of a
+     slink:VkWriteDescriptorSetInlineUniformBlockEXT structure in the
+     pname:pNext chain
+endif::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_VALVE_mutable_descriptor_type[]
+    If sname:VkDescriptorSetLayoutBinding for pname:dstSet at
+    pname:dstBinding is not equal to ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE,
+    pname:descriptorType must:
+endif::VK_VALVE_mutable_descriptor_type[]
+ifndef::VK_VALVE_mutable_descriptor_type[]
+    It must:
+endif::VK_VALVE_mutable_descriptor_type[]
+    be the same type as that 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_EXT_inline_uniform_block[]
+or none of them in case pname:descriptorType is
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, in which case the source
+data for the descriptor writes is taken from the
+slink:VkWriteDescriptorSetInlineUniformBlockEXT structure included in the
+pname:pNext chain of sname:VkWriteDescriptorSet,
+endif::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,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_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_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_inline_uniform_block[]
+[NOTE]
+.Note
+====
+The same behavior applies to bindings with a descriptor type of
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT 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_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_EXT_inline_uniform_block[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02219]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, pname:dstArrayElement
+    must: be an integer multiple of `4`
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02220]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, pname:descriptorCount
+    must: be an integer multiple of `4`
+endif::VK_EXT_inline_uniform_block[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00322]]
+    If 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:pImageInfo must: be a
+    valid pointer to an array of pname:descriptorCount valid
+    sname:VkDescriptorImageInfo structures
+  * [[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,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,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 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,
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
+    ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT and the
+    <<features-nullDescriptor,nullDescriptor>> feature is not enabled, the
+    pname:imageView member of each element of pname:pImageInfo must: not be
+    dlink:VK_NULL_HANDLE
+ifdef::VK_EXT_inline_uniform_block[]
+  * [[VUID-VkWriteDescriptorSet-descriptorType-02221]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, the pname:pNext chain
+    must: include a slink:VkWriteDescriptorSetInlineUniformBlockEXT
+    structure whose pname:dataSize member equals pname:descriptorCount
+endif::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 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 effective range if
+    pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to
+    sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00334]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that
+    each element of pname:pTexelBufferView was created from must: have been
+    created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set
+  * [[VUID-VkWriteDescriptorSet-descriptorType-00335]]
+    If pname:descriptorType is
+    ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that
+    each element of pname:pTexelBufferView was created from must: have been
+    created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set
+  * [[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_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkWriteDescriptorSet-dstSet-04611]]
+    If the sname:VkDescriptorSetLayoutBinding for pname:dstSet at
+    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the new
+    active descriptor type pname:descriptorType must: exist in the
+    corresponding pname:pMutableDescriptorTypeLists list for
+    pname:dstBinding
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkWriteDescriptorSet.txt[]
+--
+
+[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.txt[]
+
+  * 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_EXT_inline_uniform_block[]
+  * ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT specifies an
+    <<descriptorsets-inlineuniformblock, inline uniform block>>.
+endif::VK_EXT_inline_uniform_block[]
+ifdef::VK_VALVE_mutable_descriptor_type[]
+  * ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE specifies a
+    <<descriptorsets-mutable, descriptor of mutable type>>.
+endif::VK_VALVE_mutable_descriptor_type[]
+
+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_EXT_inline_uniform_block[]
+When updating descriptors with a pname:descriptorType of
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, 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:VkWriteDescriptorSetInlineUniformBlockEXT structure in
+the pname:pNext chain of sname:VkWriteDescriptorSet.
+endif::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.txt[]
+
+  * 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 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.
+
+.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,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.txt[]
+--
+
+[open,refpage='VkDescriptorImageInfo',desc='Structure specifying descriptor image information',type='structs']
+--
+The sname:VkDescriptorImageInfo structure is defined as:
+
+include::{generated}/api/structs/VkDescriptorImageInfo.txt[]
+
+  * 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-00343]]
+    pname:imageView must: not be 2D or 2D array image 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 ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT or (for three-plane formats only)
+    ename:VK_IMAGE_ASPECT_PLANE_2_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.txt[]
+--
+
+ifdef::VK_EXT_inline_uniform_block[]
+[open,refpage='VkWriteDescriptorSetInlineUniformBlockEXT',desc='Structure specifying inline uniform block data',type='structs']
+--
+If the pname:descriptorType member of slink:VkWriteDescriptorSet is
+ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then the data to write to
+the descriptor set is specified through a
+sname:VkWriteDescriptorSetInlineUniformBlockEXT structure included in the
+pname:pNext chain of sname:VkWriteDescriptorSet.
+
+The sname:VkWriteDescriptorSetInlineUniformBlockEXT structure is defined as:
+
+include::{generated}/api/structs/VkWriteDescriptorSetInlineUniformBlockEXT.txt[]
+
+  * pname:sType is the type of 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-VkWriteDescriptorSetInlineUniformBlockEXT-dataSize-02222]]
+    pname:dataSize must: be an integer multiple of `4`
+****
+
+include::{generated}/validity/structs/VkWriteDescriptorSetInlineUniformBlockEXT.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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,nullDescriptor>> feature is not
+    enabled, each element of pname:pAccelerationStructures must: not be
+    dlink:VK_NULL_HANDLE
+****
+
+include::{generated}/validity/structs/VkWriteDescriptorSetAccelerationStructureKHR.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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,nullDescriptor>> feature is not
+    enabled, each member of pname:pAccelerationStructures must: not be
+    dlink:VK_NULL_HANDLE
+****
+
+include::{generated}/validity/structs/VkWriteDescriptorSetAccelerationStructureNV.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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_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_EXT then
+    pname:srcArrayElement specifies the starting byte offset within the
+    binding to copy from.
+endif::VK_EXT_inline_uniform_block[]
+  * pname:dstSet, pname:dstBinding, and pname:dstArrayElement are the
+    destination set, binding, and array element, respectively.
+ifdef::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_EXT then
+    pname:dstArrayElement specifies the starting byte offset within the
+    binding to copy to.
+endif::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_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_EXT 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_EXT_inline_uniform_block[]
+
+ifdef::VK_VALVE_mutable_descriptor_type[]
+If the sname:VkDescriptorSetLayoutBinding for pname:dstBinding is
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE and pname:srcBinding is not
+ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, 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_VALVE, 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_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_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_EXT,
+    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_EXT,
+    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_EXT, pname:descriptorCount
+    must: be an integer multiple of `4`
+endif::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
+ifdef::VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkCopyDescriptorSet-srcSet-04885]]
+    If pname:srcSet's layout was created with neither
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT nor
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE flags
+    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
+endif::VK_VALVE_mutable_descriptor_type[]
+ifndef::VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkCopyDescriptorSet-srcSet-04886]]
+    If pname:srcSet's layout was created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
+    set, then pname:dstSet's layout must: also have been created without the
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag
+    set
+endif::VK_VALVE_mutable_descriptor_type[]
+  * [[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
+ifdef::VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkCopyDescriptorSet-srcSet-04887]]
+    If the descriptor pool from which pname:srcSet was allocated was created
+    with neither ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT nor
+    ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE flags 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_VALVE_mutable_descriptor_type[]
+ifndef::VK_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkCopyDescriptorSet-srcSet-04888]]
+    If the descriptor pool from which pname:srcSet was allocated was created
+    without 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 without the
+    ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set
+endif::VK_VALVE_mutable_descriptor_type[]
+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_VALVE_mutable_descriptor_type[]
+  * [[VUID-VkCopyDescriptorSet-dstSet-04612]]
+    If sname:VkDescriptorSetLayoutBinding for pname:dstSet at
+    pname:dstBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, 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_VALVE
+  * [[VUID-VkCopyDescriptorSet-srcSet-04613]]
+    If sname:VkDescriptorSetLayoutBinding for pname:srcSet at
+    pname:srcBinding is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE and the
+    sname:VkDescriptorSetLayoutBinding for pname:dstSet at pname:dstBinding
+    is not ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, 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_VALVE, and the new
+    active descriptor type is ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, the
+    pname:pMutableDescriptorTypeLists for pname:srcBinding and
+    pname:dstBinding must: match exactly
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/structs/VkCopyDescriptorSet.txt[]
+--
+
+
+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.txt[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/handles/VkDescriptorUpdateTemplateKHR.txt[]
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorUpdateTemplateCreateInfoKHR.txt[]
+endif::VK_KHR_descriptor_update_template[]
+
+  * pname:sType is the type of 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_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_VALVE
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+
+include::{generated}/validity/structs/VkDescriptorUpdateTemplateCreateInfo.txt[]
+--
+
+[open,refpage='VkDescriptorUpdateTemplateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDescriptorUpdateTemplateCreateFlags.txt[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/flags/VkDescriptorUpdateTemplateCreateFlagsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/enums/VkDescriptorUpdateTemplateTypeKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_descriptor_update_template[]
+or the equivalent
+
+include::{generated}/api/structs/VkDescriptorUpdateTemplateEntryKHR.txt[]
+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_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:dstBinding has a
+    descriptor type of ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
+    then pname:dstArrayElement specifies the starting byte offset to update.
+endif::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_EXT_inline_uniform_block[]
+    If the descriptor binding identified by pname:dstBinding has a
+    descriptor type of ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
+    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_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 informations 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_EXT_inline_uniform_block[]
+If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
+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_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_EXT_inline_uniform_block[]
+  * [[VUID-VkDescriptorUpdateTemplateEntry-descriptor-02226]]
+    If pname:descriptor type is
+    ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, 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_EXT, pname:descriptorCount
+    must: be an integer multiple of `4`
+endif::VK_EXT_inline_uniform_block[]
+****
+
+include::{generated}/validity/structs/VkDescriptorUpdateTemplateEntry.txt[]
+--
+
+[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.txt[]
+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.txt[]
+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.
+
+.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`
+****
+
+include::{generated}/validity/protos/vkDestroyDescriptorUpdateTemplate.txt[]
+--
+
+[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.txt[]
+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.txt[]
+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
+****
+
+include::{generated}/validity/protos/vkUpdateDescriptorSetWithTemplate.txt[]
+
+.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
+    {
+        0,                                           // binding
+        0,                                           // dstArrayElement
+        1,                                           // descriptorCount
+        VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,   // descriptorType
+        offsetof(AppDataStructure, imageInfo),       // offset
+        0                                            // stride is not required if descriptorCount is 1
+    },
+
+    // binding to an array of buffer descriptors
+    {
+        1,                                           // binding
+        0,                                           // dstArrayElement
+        3,                                           // descriptorCount
+        VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,           // descriptorType
+        offsetof(AppDataStructure, bufferInfoArray), // offset
+        sizeof(VkDescriptorBufferInfo)               // stride, descriptor buffer infos are compact
+    },
+
+    // binding to an array of buffer views
+    {
+        2,                                           // binding
+        0,                                           // dstArrayElement
+        2,                                           // descriptorCount
+        VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,     // descriptorType
+        offsetof(AppDataStructure, bufferView) +
+          offsetof(AppBufferView, bufferView),       // offset
+        sizeof(AppBufferView)                        // stride, bufferViews do not have to be compact
+    },
+};
+
+// create a descriptor update template for descriptor set updates
+const VkDescriptorUpdateTemplateCreateInfo createInfo =
+{
+    VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,  // sType
+    NULL,                                                      // pNext
+    0,                                                         // flags
+    3,                                                         // descriptorUpdateEntryCount
+    descriptorUpdateTemplateEntries,                           // pDescriptorUpdateEntries
+    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,         // templateType
+    myLayout,                                                  // descriptorSetLayout
+    0,                                                         // pipelineBindPoint, ignored by given templateType
+    0,                                                         // pipelineLayout, ignored by given templateType
+    0,                                                         // set, 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[]
+
+
+[[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.txt[]
+
+  * 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 causes the sets numbered [pname:firstSet..
+pname:firstSet+pname:descriptorSetCount-1] to use the bindings stored in
+pname:pDescriptorSets[0..descriptorSetCount-1] for subsequent
+<<pipeline-bindpoint-commands, bound pipeline commands>> set by
+pname:pipelineBindPoint.
+Any bindings that were previously applied via these sets 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.
+
+[[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.
+
+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 <<pipeline-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 effective offset, as defined
+    above, and the range of the binding must: be less than or equal to the
+    size of the buffer
+ifdef::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_VALVE flag set
+endif::VK_VALVE_mutable_descriptor_type[]
+****
+
+include::{generated}/validity/protos/vkCmdBindDescriptorSets.txt[]
+--
+
+
+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.txt[]
+
+  * 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 <<pipeline-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
+****
+
+include::{generated}/validity/protos/vkCmdPushDescriptorSetKHR.txt[]
+
+--
+
+
+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.txt[]
+
+  * 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
+****
+
+include::{generated}/validity/protos/vkCmdPushDescriptorSetWithTemplateKHR.txt[]
+
+.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
+    {
+        0,                                           // binding
+        0,                                           // dstArrayElement
+        1,                                           // descriptorCount
+        VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,   // descriptorType
+        offsetof(AppDataStructure, imageInfo),       // offset
+        0                                            // stride is not required if descriptorCount is 1
+    }
+};
+
+// create a descriptor update template for push descriptor set updates
+const VkDescriptorUpdateTemplateCreateInfo createInfo =
+{
+    VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,  // sType
+    NULL,                                                      // pNext
+    0,                                                         // flags
+    1,                                                         // descriptorUpdateEntryCount
+    descriptorUpdateTemplateEntries,                           // pDescriptorUpdateEntries
+    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,   // templateType
+    0,                                                         // descriptorSetLayout, ignored by given templateType
+    VK_PIPELINE_BIND_POINT_GRAPHICS,                           // pipelineBindPoint
+    myPipelineLayout,                                          // pipelineLayout
+    0,                                                         // set
+};
+
+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.txt[]
+
+  * 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_KHR_maintenance4[]
+Reads of undefined: push constant values by the executing shader return
+undefined: values.
+endif::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 <<pipeline-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.txt[]
+--
+
+
+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.txt[]
+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.txt[]
+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.txt[]
+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[]
+slink:VkBufferOpaqueCaptureAddressCreateInfo::pname:opaqueCaptureAddress
+ifdef::VK_EXT_buffer_device_address[or]
+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.
+
+.Valid Usage
+****
+  * [[VUID-vkGetBufferDeviceAddress-bufferDeviceAddress-03324]]
+    The <<features-bufferDeviceAddress,bufferDeviceAddress>> or
+    <<features-bufferDeviceAddressEXT,sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::pname:bufferDeviceAddress>>
+    feature must: be enabled
+  * [[VUID-vkGetBufferDeviceAddress-device-03325]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
+    or
+    <<features-bufferDeviceAddressMultiDeviceEXT,sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::pname:bufferDeviceAddressMultiDevice>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetBufferDeviceAddress.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferDeviceAddressInfoKHR.txt[]
+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.txt[]
+endif::VK_EXT_buffer_device_address[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+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.txt[]
+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,bufferDeviceAddress>> feature must:
+    be enabled
+  * [[VUID-vkGetBufferOpaqueCaptureAddress-device-03327]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetBufferOpaqueCaptureAddress.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
diff --git a/registry/vulkan/chapters/devsandqueues.txt b/registry/vulkan/chapters/devsandqueues.txt
new file mode 100644
index 0000000..1051739
--- /dev/null
+++ b/registry/vulkan/chapters/devsandqueues.txt
@@ -0,0 +1,2578 @@
+// Copyright 2015-2021 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.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceProperties',desc='Structure specifying physical device properties',type='structs']
+--
+The sname:VkPhysicalDeviceProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceProperties.txt[]
+
+  * 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.
+====
+
+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.txt[]
+--
+
+[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.txt[]
+
+[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::deviceName.
+
+include::{generated}/api/enums/VK_MAX_PHYSICAL_DEVICE_NAME_SIZE.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceProperties2',desc='Structure specifying physical device properties',type='structs']
+--
+The sname:VkPhysicalDeviceProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceProperties2.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceProperties2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+include::{chapters}/devsandqueues.txt[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.txt[tag=VK_KHR_maintenance2-properties]
+include::{chapters}/limits.txt[tag=VK_KHR_multiview-properties]
+include::{chapters}/limits.txt[tag=VK_KHR_protected_memory-properties]
+include::{chapters}/limits.txt[tag=VK_KHR_maintenance3-properties]
+
+:refpage: VkPhysicalDeviceVulkan11Properties
+include::{chapters}/limits.txt[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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+include::{chapters}/devsandqueues.txt[tag=VK_KHR_driver_properties-properties]
+include::{chapters}/limits.txt[tag=VK_KHR_shader_float_controls-properties]
+include::{chapters}/limits.txt[tag=VK_EXT_descriptor_indexing-properties]
+include::{chapters}/limits.txt[tag=VK_KHR_depth_stencil_resolve-properties]
+include::{chapters}/limits.txt[tag=VK_EXT_sampler_filter_minmax-properties]
+include::{chapters}/limits.txt[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.txt[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.txt[]
+--
+endif::VK_VERSION_1_2[]
+
+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.txt[]
+
+ifdef::VK_KHR_external_memory_capabilities[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceIDPropertiesKHR.txt[]
+endif::VK_KHR_external_memory_capabilities[]
+
+  * pname:sType is the type of 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.txt[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 can not 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.txt[]
+--
+
+[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::deviceUUID and
+slink:VkPhysicalDeviceIDProperties::driverUUID.
+
+include::{generated}/api/enums/VK_UUID_SIZE.txt[]
+--
+
+[open,refpage='VK_LUID_SIZE',desc='Length of a locally unique device identifier',type='consts']
+--
+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::deviceLUID.
+
+include::{generated}/api/enums/VK_LUID_SIZE.txt[]
+
+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.txt[]
+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.txt[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDriverPropertiesKHR.txt[]
+endif::VK_KHR_driver_properties[]
+
+  * pname:sType is the type of 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.txt[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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/enums/VkDriverIdKHR.txt[]
+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']
+--
+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::driverName.
+
+include::{generated}/api/enums/VK_MAX_DRIVER_NAME_SIZE.txt[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/enums/VK_MAX_DRIVER_NAME_SIZE_KHR.txt[]
+endif::VK_KHR_driver_properties[]
+--
+
+[open,refpage='VK_MAX_DRIVER_INFO_SIZE',desc='Length of a physical device driver information string',type='consts']
+--
+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::driverInfo.
+
+include::{generated}/api/enums/VK_MAX_DRIVER_INFO_SIZE.txt[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/enums/VK_MAX_DRIVER_INFO_SIZE_KHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_driver_properties[]
+or the equivalent
+
+include::{generated}/api/structs/VkConformanceVersionKHR.txt[]
+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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+These are properties of the PCI bus information of a physical device.
+
+include::{generated}/validity/structs/VkPhysicalDevicePCIBusInfoPropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+These are properties of the DRM information of a physical device.
+
+include::{generated}/validity/structs/VkPhysicalDeviceDrmPropertiesEXT.txt[]
+--
+endif::VK_EXT_physical_device_drm[]
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+ifdef::VK_KHR_shader_integer_dot_product[]
+[open,refpage='VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR',desc='Structure containing information about integer dot product support for a physical device',type='structs']
+--
+The sname:VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * 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>>.
+
+:refpage: VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR
+include::{chapters}/limits.txt[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/VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR.txt[]
+--
+endif::VK_KHR_shader_integer_dot_product[]
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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_KHR_synchronization2[]
+    flink:vkCmdWriteTimestamp2KHR or
+endif::VK_KHR_synchronization2[]
+    flink:vkCmdWriteTimestamp.
+    The valid range for the count is 36..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.txt[]
+--
+
+[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.txt[]
+
+  * 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::VK_KHR_video_decode_queue[]
+  * ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR specifies that queues in this queue
+    family support 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.
+endif::VK_KHR_video_encode_queue[]
+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 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 protected memory 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.txt[]
+
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkQueueFamilyProperties2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+ifdef::VK_EXT_global_priority_query[]
+
+[open,refpage='VkQueueFamilyGlobalPriorityPropertiesEXT',desc='Return structure for queue family global priority information query',type='structs']
+--
+
+The definition of slink:VkQueueFamilyGlobalPriorityPropertiesEXT is:
+
+include::{generated}/api/structs/VkQueueFamilyGlobalPriorityPropertiesEXT.txt[]
+
+  * pname:sType is the type of 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.
+
+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:VkQueueGlobalPriorityEXT 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_EXT,
+ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT and
+ename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT is not allowed.
+====
+
+include::{generated}/validity/structs/VkQueueFamilyGlobalPriorityPropertiesEXT.txt[]
+
+--
+
+endif::VK_EXT_global_priority_query[]
+
+ifdef::VK_NV_device_diagnostic_checkpoints[]
+include::VK_NV_device_diagnostic_checkpoints/queue_checkpoint_properties.txt[]
+endif::VK_NV_device_diagnostic_checkpoints[]
+
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+ifdef::VK_KHR_performance_query[]
+include::VK_KHR_performance_query/queuefamily.txt[]
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceGroupProperties',desc='Structure specifying physical device group properties',type='structs']
+--
+The sname:VkPhysicalDeviceGroupProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceGroupProperties.txt[]
+
+ifdef::VK_KHR_device_group_creation[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceGroupPropertiesKHR.txt[]
+endif::VK_KHR_device_group_creation[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VK_MAX_DEVICE_GROUP_SIZE',desc='Length of a physical device handle array',type='consts']
+--
+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::physicalDevices.
+
+include::{generated}/api/enums/VK_MAX_DEVICE_GROUP_SIZE.txt[]
+
+ifdef::VK_KHR_device_group_creation[]
+or the equivalent
+
+include::{generated}/api/enums/VK_MAX_DEVICE_GROUP_SIZE_KHR.txt[]
+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.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+
+After verifying and enabling the extensions the sname:VkDevice object is
+created and returned to the application.
+
+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).
+If that occurs, fname:vkCreateDevice will return
+ename:VK_ERROR_TOO_MANY_OBJECTS.
+
+.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
+****
+
+include::{generated}/validity/protos/vkCreateDevice.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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
+****
+ifndef::VK_VERSION_1_1[]
+  * [[VUID-VkDeviceCreateInfo-queueFamilyIndex-00372]]
+    The pname:queueFamilyIndex member of each element of
+    pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos
+endif::VK_VERSION_1_1[]
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkDeviceCreateInfo-queueFamilyIndex-02802]]
+    The pname:queueFamilyIndex member of each element of
+    pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos,
+    except that two members can share the same pname:queueFamilyIndex if one
+    is a protected-capable queue and one is not a protected-capable queue
+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]]
+    pname:ppEnabledExtensionNames must: not contain
+    `apiext:VK_AMD_negative_viewport_height`
+endif::VK_VERSION_1_1[]
+ifndef::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_VERSION_1_1[]
+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-ppEnabledExtensions-04476]]
+    If pname:ppEnabledExtensions 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-ppEnabledExtensions-02831]]
+    If pname:ppEnabledExtensions 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-ppEnabledExtensions-02832]]
+    If pname:ppEnabledExtensions 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-ppEnabledExtensions-02833]]
+    If pname:ppEnabledExtensions 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-ppEnabledExtensions-02834]]
+    If pname:ppEnabledExtensions 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-ppEnabledExtensions-02835]]
+    If pname:ppEnabledExtensions 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_KHR_portability_subset[]
+  * [[VUID-VkDeviceCreateInfo-pProperties-04451]]
+    If the `apiext:VK_KHR_portability_subset` extension is included in
+    pname:pProperties of flink:vkEnumerateDeviceExtensionProperties,
+    pname:ppEnabledExtensions 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 <<features-shadingRateImage,pname:shadingRateImage>> is enabled,
+    <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> must: not be enabled
+  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04479]]
+    If <<features-shadingRateImage,pname:shadingRateImage>> is enabled,
+    <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> must: not be enabled
+  * [[VUID-VkDeviceCreateInfo-shadingRateImage-04480]]
+    If <<features-shadingRateImage,pname:shadingRateImage>> is enabled,
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> 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 <<features-fragmentDensityMap,pname:fragmentDensityMap>> is enabled,
+    <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>> must: not be enabled
+  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04482]]
+    If <<features-fragmentDensityMap,pname:fragmentDensityMap>> is enabled,
+    <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>> must: not be enabled
+  * [[VUID-VkDeviceCreateInfo-fragmentDensityMap-04483]]
+    If <<features-fragmentDensityMap,pname:fragmentDensityMap>> is enabled,
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> 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[]
+****
+
+include::{generated}/validity/structs/VkDeviceCreateInfo.txt[]
+--
+
+[open,refpage='VkDeviceCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDeviceCreateFlags.txt[]
+
+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.txt[]
+
+ifdef::VK_KHR_device_group_creation[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupDeviceCreateInfoKHR.txt[]
+endif::VK_KHR_device_group_creation[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkMemoryOverallocationBehaviorAMD',desc='Specify memory overallocation behavior',type='enums']
+--
+Possible values for
+slink:VkDeviceMemoryOverallocationCreateInfoAMD::pname:overallocationBehavior
+include:
+
+include::{generated}/api/enums/VkMemoryOverallocationBehaviorAMD.txt[]
+
+  * 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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkDeviceDiagnosticsConfigFlagBitsNV
+    specifying addtional parameters for configuring diagnostic tools.
+
+include::{generated}/validity/structs/VkDeviceDiagnosticsConfigCreateInfoNV.txt[]
+--
+
+[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.txt[]
+
+  * 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[]
+    trace rays,
+endif::VK_NV_ray_tracing[]
+    and copies.
+    The CPU call stack at the time of the command will be associated as the
+    marker data for the automatically inserted checkpoints.
+--
+
+[open,refpage='VkDeviceDiagnosticsConfigFlagsNV',desc='Bitmask of VkDeviceDiagnosticsConfigFlagBitsNV',type='flags']
+--
+include::{generated}/api/flags/VkDeviceDiagnosticsConfigFlagsNV.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkDeviceMemoryReportFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkDeviceMemoryReportFlagsEXT.txt[]
+
+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.txt[]
+
+  * 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_EXT_private_data[]
+[open,refpage='VkDevicePrivateDataCreateInfoEXT',desc='Reserve private data slots',type='structs']
+--
+To reserve private data storage slots, add a
+slink:VkDevicePrivateDataCreateInfoEXT 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/VkDevicePrivateDataCreateInfoEXT.txt[]
+
+  * pname:sType is the type of 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/VkDevicePrivateDataCreateInfoEXT.txt[]
+--
+endif::VK_EXT_private_data[]
+
+
+[[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:.
+
+[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 commands that return
+a elink:VkResult may: return ename:VK_ERROR_DEVICE_LOST.
+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_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.txt[]
+
+  * 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.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkDestroyDevice-device-00378]]
+    All child objects created on pname:device must: have been destroyed
+    prior to destroying pname:device
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyDevice.txt[]
+--
+
+
+[[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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 queue.
+endif::VK_VERSION_1_1[]
+  * pname:queueFamilyIndex is an unsigned integer indicating the index of
+    the queue family in which to create the queue 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.
+  * 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, protected memory>> 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[]
+****
+
+include::{generated}/validity/structs/VkDeviceQueueCreateInfo.txt[]
+--
+
+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 to
+specify usage behavior of the queue are:
+
+include::{generated}/api/enums/VkDeviceQueueCreateFlagBits.txt[]
+
+  * 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.txt[]
+
+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[]
+[open,refpage='VkDeviceQueueGlobalPriorityCreateInfoEXT',desc='Specify a system wide priority',type='structs']
+--
+A queue can: be created with a system-wide priority by adding a
+sname:VkDeviceQueueGlobalPriorityCreateInfoEXT structure to the pname:pNext
+chain of slink:VkDeviceQueueCreateInfo.
+
+The sname:VkDeviceQueueGlobalPriorityCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkDeviceQueueGlobalPriorityCreateInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:globalPriority is the system-wide priority associated to this
+    queue as specified by elink:VkQueueGlobalPriorityEXT
+
+A queue created without specifying
+sname:VkDeviceQueueGlobalPriorityCreateInfoEXT will default to
+ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT.
+
+include::{generated}/validity/structs/VkDeviceQueueGlobalPriorityCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkQueueGlobalPriorityEXT',desc='Values specifying a system-wide queue priority',type='enums']
+--
+Possible values of
+slink:VkDeviceQueueGlobalPriorityCreateInfoEXT::pname:globalPriority,
+specifying a system-wide priority level are:
+
+include::{generated}/api/enums/VkQueueGlobalPriorityEXT.txt[]
+
+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_EXT is below the system default.
+    Useful for non-interactive tasks.
+  * ename:VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT is the system default
+    priority.
+  * ename:VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT is above the system default.
+  * ename:VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT 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_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.
+
+ifdef::VK_EXT_global_priority_query[]
+If the <<features-globalPriorityQuery, pname:globalPriorityQuery>> feature
+is enabled and the requested global priority is not reported via
+slink:VkQueueFamilyGlobalPriorityPropertiesEXT, the driver implementation
+must: fail the queue creation.
+In this scenario, ename:VK_ERROR_INITIALIZATION_FAILED is returned.
+endif::VK_EXT_global_priority_query[]
+endif::VK_EXT_global_priority[]
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 within this queue family of the queue to
+    retrieve.
+
+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.
+If no matching pname:flags were specified at device creation time, then the
+handle returned in pname:pQueue must: be `NULL`.
+
+.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.txt[]
+--
+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_KHR_synchronization2[]
+flink:vkQueueSubmit2KHR or
+endif::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.
+
+
+[[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.
+
+
+[[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/registry/vulkan/chapters/dispatch.txt b/registry/vulkan/chapters/dispatch.txt
new file mode 100644
index 0000000..a5b247b
--- /dev/null
+++ b/registry/vulkan/chapters/dispatch.txt
@@ -0,0 +1,229 @@
+// Copyright 2015-2021 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.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
+  * [[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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
+  * [[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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+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.txt[]
+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.txt[]
+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.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
+  * [[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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+  * [[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.txt[]
+--
+endif::VK_HUAWEI_subpass_shading[]
diff --git a/registry/vulkan/chapters/drawing.txt b/registry/vulkan/chapters/drawing.txt
new file mode 100644
index 0000000..1a348a5
--- /dev/null
+++ b/registry/vulkan/chapters/drawing.txt
@@ -0,0 +1,1705 @@
+// Copyright 2015-2021 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
+pipeline.
+A graphics pipeline 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[]
+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[]
+
+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.txt[]
+
+  * pname:sType is the type of 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
+    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
+****
+ifndef::VK_EXT_primitive_topology_list_restart[]
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428]]
+    If 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,
+    ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pname:primitiveRestartEnable
+    must: be ename:VK_FALSE
+endif::VK_EXT_primitive_topology_list_restart[]
+ifdef::VK_EXT_primitive_topology_list_restart[]
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06252]]
+    If 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, and
+    pname:primitiveRestartEnable is ename:VK_TRUE, the
+    <<features-primitiveTopologyListRestart,pname:primitiveTopologyListRestart>>
+    feature must: be enabled
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06253]]
+    If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, and
+    pname:primitiveRestartEnable is ename:VK_TRUE, the
+    <<features-primitiveTopologyPatchListRestart,pname:primitiveTopologyPatchListRestart>>
+    feature must: be enabled
+endif::VK_EXT_primitive_topology_list_restart[]
+  * [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429]]
+    If the <<features-geometryShader,geometry shaders>> 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,tessellation shaders>> 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.txt[]
+--
+
+[open,refpage='VkPipelineInputAssemblyStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineInputAssemblyStateCreateFlags.txt[]
+
+tname:VkPipelineInputAssemblyStateCreateFlags is a bitmask type for setting
+a mask, but is currently reserved for future use.
+--
+
+ifdef::VK_EXT_extended_dynamic_state2[]
+[open,refpage='vkCmdSetPrimitiveRestartEnableEXT',desc='Set primitive assembly restart state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically control>> whether a special vertex
+index value is treated as restarting the assembly of primitives, call:
+
+include::{generated}/api/protos/vkCmdSetPrimitiveRestartEnableEXT.txt[]
+
+  * 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 when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineInputAssemblyStateCreateInfo::pname:primitiveRestartEnable
+value used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetPrimitiveRestartEnableEXT-None-04866]]
+    The <<features-extendedDynamicState2, extendedDynamicState2>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetPrimitiveRestartEnableEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state2[]
+
+
+[[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[]
+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[]
+
+[open,refpage='VkPrimitiveTopology',desc='Supported primitive topologies',type='enums']
+--
+The primitive topologies defined by elink:VkPrimitiveTopology are:
+
+include::{generated}/api/enums/VkPrimitiveTopology.txt[]
+
+  * 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_EXT_extended_dynamic_state[]
+[open,refpage='vkCmdSetPrimitiveTopologyEXT',desc='Set primitive topology state dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> primitive topology, call:
+
+include::{generated}/api/protos/vkCmdSetPrimitiveTopologyEXT.txt[]
+
+  * 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
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology value used to
+create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetPrimitiveTopologyEXT-None-03347]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetPrimitiveTopologyEXT.txt[]
+--
+
+
+[[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_EXT_extended_dynamic_state[]
+
+
+[[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[]
+  ** For draws using mesh shaders, the order is provided by <<mesh-ordering,
+     mesh shading>>.
+endif::VK_NV_mesh_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']
+--
+To bind an index buffer to a command buffer, call:
+
+include::{generated}/api/protos/vkCmdBindIndexBuffer.txt[]
+
+  * 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
+****
+  * [[VUID-vkCmdBindIndexBuffer-offset-00431]]
+    pname:offset must: be less than the size of pname:buffer
+  * [[VUID-vkCmdBindIndexBuffer-offset-00432]]
+    The sum of pname:offset and the address of the range of
+    sname:VkDeviceMemory object that is backing pname:buffer, must: be a
+    multiple of the type indicated by pname:indexType
+  * [[VUID-vkCmdBindIndexBuffer-buffer-00433]]
+    pname:buffer must: have been created with the
+    ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT flag
+  * [[VUID-vkCmdBindIndexBuffer-buffer-00434]]
+    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-vkCmdBindIndexBuffer-indexType-02507]]
+    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-vkCmdBindIndexBuffer-indexType-02765]]
+    If pname:indexType is ename:VK_INDEX_TYPE_UINT8_EXT, the
+    <<features-indexTypeUint8,indexTypeUint8>> feature must: be enabled
+endif::VK_EXT_index_type_uint8[]
+****
+
+include::{generated}/validity/protos/vkCmdBindIndexBuffer.txt[]
+--
+
+[open,refpage='VkIndexType',desc='Type of index buffer indices',type='enums']
+--
+Possible values of flink:vkCmdBindIndexBuffer::pname:indexType, specifying
+the size of indices, are:
+
+include::{generated}/api/enums/VkIndexType.txt[]
+
+  * 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, Robust
+Buffer Access>> feature.
+
+[open,refpage='vkCmdDraw',desc='Draw primitives',type='protos']
+--
+:refpage: vkCmdDraw
+
+To record a non-indexed draw, call:
+
+include::{generated}/api/protos/vkCmdDraw.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdDraw.txt[]
+--
+
+[open,refpage='vkCmdDrawIndexed',desc='Draw primitives with indexed vertices',type='protos']
+--
+:refpage: vkCmdDrawIndexed
+
+To record an indexed draw, call:
+
+include::{generated}/api/protos/vkCmdDrawIndexed.txt[]
+
+  * 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 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 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.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+  * [[VUID-vkCmdDrawIndexed-firstIndex-04932]]
+    [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
+****
+
+include::{generated}/validity/protos/vkCmdDrawIndexed.txt[]
+--
+
+ifdef::VK_EXT_multi_draw[]
+[open,refpage='vkCmdDrawMultiEXT',desc='Draw primitives',type='protos']
+--
+:refpage: vkCmdDrawMultiEXT
+
+To record an ordered sequence of drawing operations which have no state
+changes between them, call:
+
+include::{generated}/api/protos/vkCmdDrawMultiEXT.txt[]
+
+  * 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 to draw.
+  * pname:firstInstance is the instance ID of the first instance to draw.
+  * pname:stride is the byte stride between consecutive elements of
+    pname:pVertexInfo.
+
+pname:drawCount draws are executed with parameters taken from
+pname:pVertexInfo.
+The number of draw commands recorded is pname:drawCount, with each command
+reading, sequentially, a pname:firstVertex and a pname:vertexCount from
+pname:pVertexInfo.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/draw_common.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+  * [[VUID-vkCmdDrawMultiEXT-None-04933]]
+    The <<features-multiDraw,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.txt[]
+--
+
+[open,refpage='vkCmdDrawMultiIndexedEXT',desc='Draw primitives',type='protos']
+--
+:refpage: vkCmdDrawMultiIndexedEXT
+
+To record an ordered sequence of indexed drawing operations which have no
+state changes between them, call:
+
+include::{generated}/api/protos/vkCmdDrawMultiIndexedEXT.txt[]
+
+  * 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 to draw.
+  * pname:firstInstance is the instance ID of the first instance to 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.
+
+pname:drawCount indexed draws are executed with parameters taken from
+pname:pIndexInfo.
+The number of draw commands recorded is pname:drawCount, with each command
+reading, sequentially, a pname:firstIndex and an pname:indexCount from
+pname:pIndexInfo.
+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.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+  * [[VUID-vkCmdDrawMultiIndexedEXT-None-04937]]
+    The <<features-multiDraw,multiDraw>> feature must: be enabled
+  * [[VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938]]
+    [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
+  * [[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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+--
+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.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
+include::{chapters}/commonvalidity/draw_indirect_drawcount.txt[]
+  * [[VUID-vkCmdDrawIndirect-firstInstance-00478]]
+    If the <<features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
+    feature is not enabled, all the pname:firstInstance members of the
+    sname:VkDrawIndirectCommand structures accessed by this command must: be
+    code:0
+  * [[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.txt[]
+--
+
+[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.txt[]
+
+  * 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,drawIndirectFirstInstance>>
+    feature is not enabled, pname:firstInstance must: be code:0
+****
+
+include::{generated}/validity/structs/VkDrawIndirectCommand.txt[]
+
+--
+
+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.txt[]
+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.txt[]
+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.txt[]
+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.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
+include::{chapters}/commonvalidity/draw_indirect_count_common.txt[]
+  * [[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.txt[]
+
+--
+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.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
+include::{chapters}/commonvalidity/draw_indirect_drawcount.txt[]
+  * [[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-firstInstance-00530]]
+    If the <<features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
+    feature is not enabled, all the pname:firstInstance members of the
+    sname:VkDrawIndexedIndirectCommand structures accessed by this command
+    must: be code:0
+  * [[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.txt[]
+--
+
+[open,refpage='VkDrawIndexedIndirectCommand',desc='Structure specifying a indexed indirect drawing command',type='structs',xrefs='vkCmdDrawIndexedIndirect']
+--
+The sname:VkDrawIndexedIndirectCommand structure is defined as:
+
+include::{generated}/api/structs/VkDrawIndexedIndirectCommand.txt[]
+
+  * 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
+****
+  * [[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-indexSize-00553]]
+    [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
+  * [[VUID-VkDrawIndexedIndirectCommand-firstInstance-00554]]
+    If the <<features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
+    feature is not enabled, pname:firstInstance must: be code:0
+****
+
+include::{generated}/validity/structs/VkDrawIndexedIndirectCommand.txt[]
+--
+
+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.txt[]
+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.txt[]
+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.txt[]
+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.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+include::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
+include::{chapters}/commonvalidity/draw_indirect_count_common.txt[]
+  * [[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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/draw_vertex_binding.txt[]
+  * [[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
+    slink:VkPhysicalDeviceLimits::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.txt[]
+--
+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,
+inherited conditional rendering>> 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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkConditionalRenderingBeginInfoEXT',desc='Structure specifying conditional rendering begin information',type='structs']
+--
+The sname:VkConditionalRenderingBeginInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkConditionalRenderingBeginInfoEXT.txt[]
+
+  * pname:sType is the type of 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.txt[]
+
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
+endif::VK_EXT_conditional_rendering[]
+
+ifdef::VK_NV_mesh_shader[]
+include::VK_NV_mesh_shader/drawing.txt[]
+endif::VK_NV_mesh_shader[]
diff --git a/registry/vulkan/chapters/extensions.txt b/registry/vulkan/chapters/extensions.txt
new file mode 100644
index 0000000..3145960
--- /dev/null
+++ b/registry/vulkan/chapters/extensions.txt
@@ -0,0 +1,942 @@
+// Copyright 2015-2021 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
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+that enumerate physical device properties, or
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+that accept a slink:VkDevice object or any of a device's child objects as a
+parameter, are considered device-level functionality.
+
+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.
+This is always 0 for the Vulkan API.
+
+[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 Specification.
+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.
+====
+
+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.txt[]
+--
+
+[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.txt[]
+--
+
+[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.txt[]
+--
+
+[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.txt[]
+--
+
+[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.txt[]
+--
+
+[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.txt[]
+--
+
+[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.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+--
+
+[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.txt[]
+
+  * pname:major is the major version number.
+  * pname:minor is the minor version number.
+  * pname:patch is the patch version number.
+--
+
+[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.txt[]
+--
+
+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.txt[]
+--
+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.txt[]
+--
+endif::VK_VERSION_1_2[]
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkLayerProperties',desc='Structure specifying layer properties',type='structs']
+--
+The sname:VkLayerProperties structure is defined as:
+
+include::{generated}/api/structs/VkLayerProperties.txt[]
+
+  * 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.txt[]
+--
+
+[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::layerName,
+slink:VkExtensionProperties::extensionName, and other queries.
+
+include::{generated}/api/enums/VK_MAX_EXTENSION_NAME_SIZE.txt[]
+--
+
+[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::description and other queries.
+
+include::{generated}/api/enums/VK_MAX_DESCRIPTION_SIZE.txt[]
+--
+
+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.
+
+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.
+
+[open,refpage='vkEnumerateDeviceLayerProperties',desc='Returns properties of available physical device layers',type='protos']
+--
+To enumerate device layers, call:
+
+include::{generated}/api/protos/vkEnumerateDeviceLayerProperties.txt[]
+
+  * 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.
+
+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.
+
+include::{generated}/validity/protos/vkEnumerateDeviceLayerProperties.txt[]
+--
+
+The pname:ppEnabledLayerNames and pname:enabledLayerCount members of
+slink:VkDeviceCreateInfo are deprecated and their values must: be ignored by
+implementations.
+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 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.
+====
+
+
+=== 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.txt[]
+
+  * 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.txt[]
+--
+
+
+=== 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']
+--
+To query the extensions available to a given physical device, call:
+
+include::{generated}/api/protos/vkEnumerateDeviceExtensionProperties.txt[]
+
+  * 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.
+
+include::{generated}/validity/protos/vkEnumerateDeviceExtensionProperties.txt[]
+--
+
+[open,refpage='VkExtensionProperties',desc='Structure specifying an extension properties',type='structs']
+--
+The sname:VkExtensionProperties structure is defined as:
+
+include::{generated}/api/structs/VkExtensionProperties.txt[]
+
+  * 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.txt[]
+--
+
+
+[[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 ename:VK_COLORSPACE_SRGB_NONLINEAR_KHR token aliases
+ename:VK_COLOR_SPACE_SRGB_NONLINEAR_KHR.
+The ename: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.txt, 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/registry/vulkan/chapters/features.txt b/registry/vulkan/chapters/features.txt
new file mode 100755
index 0000000..096264d
--- /dev/null
+++ b/registry/vulkan/chapters/features.txt
@@ -0,0 +1,5061 @@
+// Copyright 2015-2021 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
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceFeatures2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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 in the device in lieu
+of pname:pEnabledFeatures.
+
+include::{generated}/validity/structs/VkPhysicalDeviceFeatures2.txt[]
+--
+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.txt[]
+
+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,pname:cooperativeMatrixRobustBufferAccess>>
+      feature is not enabled, then accesses using
+      code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
+      may: not be bounds-checked.
+endif::VK_NV_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,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,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,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,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,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.
+  * [[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,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,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 require a format qualifier to be specified when reading.
+ifdef::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_KHR_format_feature_flags2[]
+  * [[features-shaderStorageImageWriteWithoutFormat]]
+    pname:shaderStorageImageWriteWithoutFormat specifies whether storage
+    images require a format qualifier to be specified when writing.
+ifdef::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_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.
+  * [[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>>.
+  * [[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.
+  * [[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.
+  * [[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.
+  * [[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.
+  * [[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.
+  * [[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.
+  * [[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.
+  * [[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.
+  * [[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.
+
+include::{generated}/validity/structs/VkPhysicalDeviceFeatures.txt[]
+--
+
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+:anchor-prefix:
+include::{chapters}/features.txt[tag=VK_KHR_16bit_storage-features]
+include::{chapters}/features.txt[tag=VK_KHR_multiview-features]
+include::{chapters}/features.txt[tag=VK_KHR_variable_pointers-features]
+include::{chapters}/features.txt[tag=VK_KHR_protected_memory-features]
+include::{chapters}/features.txt[tag=VK_KHR_sampler_ycbcr_conversion-features]
+include::{chapters}/features.txt[tag=VK_KHR_shader_draw_parameters-features]
+
+:refpage: VkPhysicalDeviceVulkan11Features
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkan11Features.txt[]
+--
+
+[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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=VK_KHR_8bit_storage-features]
+include::{chapters}/features.txt[tag=VK_KHR_shader_atomic_int64-features]
+include::{chapters}/features.txt[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.txt[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 no slink:VkSamplerCreateInfo
+    pname:pNext chain can include a slink:VkSamplerReductionModeCreateInfo
+    structure.
+include::{chapters}/features.txt[tag=VK_EXT_scalar_block_layout-features]
+include::{chapters}/features.txt[tag=VK_KHR_imageless_framebuffer-features]
+include::{chapters}/features.txt[tag=VK_KHR_uniform_buffer_standard_layout-features]
+include::{chapters}/features.txt[tag=VK_KHR_shader_subgroup_extended_types-features]
+include::{chapters}/features.txt[tag=VK_KHR_separate_depth_stencil_layouts-features]
+include::{chapters}/features.txt[tag=VK_EXT_host_query_reset-features]
+include::{chapters}/features.txt[tag=VK_KHR_timeline_semaphore-features]
+include::{chapters}/features.txt[tag=VK_EXT_buffer_device_address-features]
+include::{chapters}/features.txt[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 vertex or
+    tessellation evaluation shaders.
+    If this feature is not enabled, the code:ViewportIndex built-in
+    decoration must: not be used on outputs in 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 vertex or tessellation evaluation shaders.
+    If this feature is not enabled, the code:Layer built-in decoration must:
+    not be used on outputs in 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkan12Features.txt[]
+--
+endif::VK_VERSION_1_2[]
+
+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.txt[]
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/structs/VkPhysicalDeviceVariablePointerFeatures.txt[]
+endif::VK_VERSION_1_1[]
+
+ifdef::VK_KHR_variable_pointers[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceVariablePointersFeaturesKHR.txt[]
+
+include::{generated}/api/structs/VkPhysicalDeviceVariablePointerFeaturesKHR.txt[]
+endif::VK_KHR_variable_pointers[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_multiview[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewFeaturesKHR.txt[]
+endif::VK_KHR_multiview[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[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.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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 memory.
+  * [[features-shaderSharedFloat32AtomicAdd]]
+    pname:shaderSharedFloat32AtomicAdd indicates whether shaders can:
+    perform 32-bit floating-point add atomic operations on shared memory.
+  * [[features-shaderSharedFloat64Atomics]] pname:shaderSharedFloat64Atomics
+    indicates whether shaders can: perform 64-bit floating-point load, store
+    and exchange atomic operations on shared memory.
+  * [[features-shaderSharedFloat64AtomicAdd]]
+    pname:shaderSharedFloat64AtomicAdd indicates whether shaders can:
+    perform 64-bit floating-point add atomic operations on shared 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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 memory.
+  * [[features-shaderSharedFloat16AtomicAdd]]
+    pname:shaderSharedFloat16AtomicAdd indicates whether shaders can:
+    perform 16-bit floating-point add atomic operations on shared memory.
+  * [[features-shaderSharedFloat16AtomicMinMax]]
+    pname:shaderSharedFloat16AtomicMinMax indicates whether shaders can:
+    perform 16-bit floating-point min and max atomic operations on shared
+    memory.
+  * [[features-shaderSharedFloat32AtomicMinMax]]
+    pname:shaderSharedFloat32AtomicMinMax indicates whether shaders can:
+    perform 32-bit floating-point min and max atomic operations on shared
+    memory.
+  * [[features-shaderSharedFloat64AtomicMinMax]]
+    pname:shaderSharedFloat64AtomicMinMax indicates whether shaders can:
+    perform 64-bit floating-point min and max atomic operations on shared
+    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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_shader_atomic_int64[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderAtomicInt64FeaturesKHR.txt[]
+endif::VK_KHR_shader_atomic_int64[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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 memory.
+// end::VK_KHR_shader_atomic_int64-features[]
+
+:refpage: VkPhysicalDeviceShaderAtomicInt64Features
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderAtomicInt64Features.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_8bit_storage[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDevice8BitStorageFeaturesKHR.txt[]
+endif::VK_KHR_8bit_storage[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevice8BitStorageFeatures.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_16bit_storage[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDevice16BitStorageFeaturesKHR.txt[]
+endif::VK_KHR_16bit_storage[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevice16BitStorageFeatures.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_shader_float16_int8[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderFloat16Int8FeaturesKHR.txt[]
+
+include::{generated}/api/structs/VkPhysicalDeviceFloat16Int8FeaturesKHR.txt[]
+endif::VK_KHR_shader_float16_int8[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderFloat16Int8Features.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderClockFeaturesKHR.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR.txt[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSamplerYcbcrConversionFeatures.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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 protected memory is supported.
+// end::VK_KHR_protected_memory-features[]
+
+:refpage: VkPhysicalDeviceProtectedMemoryFeatures
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryFeatures.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceConditionalRenderingFeaturesEXT.txt[]
+--
+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.txt[]
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderDrawParameterFeatures.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderDrawParametersFeatures.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-taskShader]] pname:taskShader indicates whether the task
+    shader stage is supported.
+  * [[features-meshShader]] pname:meshShader indicates whether the mesh
+    shader stage is supported.
+
+:refpage: VkPhysicalDeviceMeshShaderFeaturesNV
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderFeaturesNV.txt[]
+--
+endif::VK_NV_mesh_shader[]
+
+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.txt[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingFeaturesEXT.txt[]
+endif::VK_EXT_descriptor_indexing[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingFeatures.txt[]
+--
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceASTCDecodeFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackFeaturesEXT.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_vulkan_memory_model[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.txt[]
+endif::VK_KHR_vulkan_memory_model[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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 the Vulkan Memory Model is supported, as defined in
+    <<memory-model,Vulkan Memory Model>>.
+    This also 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVulkanMemoryModelFeatures.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+ifdef::VK_EXT_inline_uniform_block[]
+[open,refpage='VkPhysicalDeviceInlineUniformBlockFeaturesEXT',desc='Structure describing inline uniform block features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceInlineUniformBlockFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockFeaturesEXT.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[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_EXT must: not be used.
+  * [[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_EXT.
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+:refpage: VkPhysicalDeviceInlineUniformBlockFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockFeaturesEXT.txt[]
+--
+endif::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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExclusiveScissorFeaturesNV.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCornerSampledImageFeaturesNV.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.txt[]
+--
+endif::VK_NV_compute_shader_derivatives[]
+
+ifdef::VK_NV_fragment_shader_barycentric[]
+[open,refpage='VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV',desc='Structure describing barycentric support in fragment shaders that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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:BaryCoordNV and
+    code:BaryCoordNoPerspNV SPIR-V fragment shader built-ins and supports
+    the code:PerVertexNV SPIR-V decoration on fragment shader input
+    variables.
+
+See <<primsrast-barycentric,Barycentric Interpolation>> for more
+information.
+
+:refpage: VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV.txt[]
+--
+endif::VK_NV_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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderImageFootprintFeaturesNV.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImageFeaturesNV.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapFeaturesEXT.txt[]
+--
+endif::VK_EXT_fragment_density_map[]
+
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2FeaturesEXT.txt[]
+--
+endif::VK_EXT_fragment_density_map2[]
+
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceInvocationMaskFeaturesHUAWEI.txt[]
+--
+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.txt[]
+
+ifdef::VK_EXT_scalar_block_layout[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceScalarBlockLayoutFeaturesEXT.txt[]
+endif::VK_EXT_scalar_block_layout[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceScalarBlockLayoutFeatures.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_uniform_buffer_standard_layout[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR.txt[]
+endif::VK_KHR_uniform_buffer_standard_layout[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDepthClipEnableFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMemoryPriorityFeaturesEXT.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceBufferDeviceAddressFeaturesKHR.txt[]
+endif::VK_KHR_buffer_device_address[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBufferDeviceAddressFeatures.txt[]
+--
+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.txt[]
+
+include::{generated}/api/structs/VkPhysicalDeviceBufferAddressFeaturesEXT.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[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.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_imageless_framebuffer[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceImagelessFramebufferFeaturesKHR.txt[]
+endif::VK_KHR_imageless_framebuffer[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImagelessFramebufferFeatures.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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:CooperativeMatrixNV SPIR-V
+    capability.
+  * [[features-cooperativeMatrixRobustBufferAccess]]
+    pname:cooperativeMatrixRobustBufferAccess indicates that the
+    implementation supports robust buffer access for SPIR-V
+    code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
+    instructions.
+
+:refpage: VkPhysicalDeviceCooperativeMatrixFeaturesNV
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixFeaturesNV.txt[]
+--
+endif::VK_NV_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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceYcbcrImageArraysFeaturesEXT.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_shader_subgroup_extended_types[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR.txt[]
+endif::VK_KHR_shader_subgroup_extended_types[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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 that specifies 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.txt[]
+--
+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.txt[]
+
+ifdef::VK_EXT_host_query_reset[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceHostQueryResetFeaturesEXT.txt[]
+endif::VK_EXT_host_query_reset[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceHostQueryResetFeatures.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCoverageReductionModeFeaturesNV.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphoreFeaturesKHR.txt[]
+endif::VK_KHR_timeline_semaphore[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreFeatures.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_timeline_semaphore[]
+
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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
+    flink:vkCmdBindIndexBuffer.
+
+:refpage: VkPhysicalDeviceIndexTypeUint8FeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceIndexTypeUint8FeaturesEXT.txt[]
+--
+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.txt[]
+
+The members of the
+sname:VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT structure
+describe the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsFeaturesNV.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_separate_depth_stencil_layouts[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR.txt[]
+endif::VK_KHR_separate_depth_stencil_layouts[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR.txt[]
+--
+endif::VK_KHR_pipeline_executable_properties[]
+
+ifdef::VK_EXT_shader_demote_to_helper_invocation[]
+[open,refpage='VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT',desc='Structure describing the shader demote to helper invocations features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderDemoteToHelperInvocation]]
+    pname:shaderDemoteToHelperInvocation indicates whether the
+    implementation supports the SPIR-V code:DemoteToHelperInvocationEXT
+    capability.
+
+:refpage: VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.txt[]
+--
+endif::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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
+    rather than
+    slink:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment.
+
+:refpage: VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT.txt[]
+--
+endif::VK_EXT_texel_buffer_alignment[]
+
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+[open,refpage='VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT',desc='Structure describing ASTC HDR features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[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_EXT
+  ** ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT
+  ** ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT
++
+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.
+
+:refpage: VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT.txt[]
+--
+endif::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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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, or with
+    ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT lines if
+    slink:VkPhysicalDeviceLimits::pname:strictLines is ename:VK_TRUE.
+  * [[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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationFeaturesEXT.txt[]
+--
+endif::VK_EXT_line_rasterization[]
+
+ifdef::VK_EXT_subgroup_size_control[]
+[open,refpage='VkPhysicalDeviceSubgroupSizeControlFeaturesEXT',desc='Structure describing the subgroup size control features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlFeaturesEXT.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[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_EXT
+    flag and the
+    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure.
+  * [[features-computeFullSubgroups]] pname:computeFullSubgroups indicates
+    whether the implementation supports requiring full subgroups in compute
+    shaders via the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
+    flag.
+
+:refpage: VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+[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.
+====
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlFeaturesEXT.txt[]
+--
+endif::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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCoherentMemoryFeaturesAMD.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceAccelerationStructureFeaturesKHR.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[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.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayQueryFeaturesKHR.txt[]
+--
+endif::VK_KHR_ray_query[]
+
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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_EXT
+  ** ename:VK_DYNAMIC_STATE_FRONT_FACE_EXT
+  ** ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT
+  ** ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
+  ** ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
+  ** ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT
+  ** ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT
+  ** ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT
+  ** ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT
+  ** ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT
+  ** ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT
+  ** ename:VK_DYNAMIC_STATE_STENCIL_OP_EXT
+
+:refpage: VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicStateFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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_EXT
+  ** ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT
+  ** ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT
+  * [[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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state2[]
+
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.txt[]
+--
+endif::VK_NV_device_generated_commands[]
+
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDiagnosticsConfigFeaturesNV.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDeviceMemoryReportFeaturesEXT.txt[]
+--
+endif::VK_EXT_device_memory_report[]
+
+ifdef::VK_EXT_global_priority_query[]
+[open,refpage='VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT',desc='Structure describing whether global priority query can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT.txt[]
+
+The members of the sname:VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT
+structure describe the following features:
+
+  * pname:sType is the type of 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: VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT.txt[]
+--
+endif::VK_EXT_global_priority_query[]
+
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+[open,refpage='VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT',desc='Structure describing whether pipeline cache control can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[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_EXT
+  *** ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
+  ** The following can: be used in
+     slink:VkPipelineCacheCreateInfo::pname:flags:
+  *** ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT
+
+:refpage: VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT.txt[]
+--
+endif::VK_EXT_pipeline_creation_cache_control[]
+
+ifdef::VK_KHR_zero_initialize_workgroup_memory[]
+[open,refpage='VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR',desc='Structure describing support for zero initialization of workgroup memory by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR structure
+is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderZeroInitializeWorkgroupMemory]]
+    pname:shaderZeroInitializeWorkgroupMemory specifies whether the
+    implementation supports initializing a variable in Workgroup storage
+    class.
+
+:refpage: VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR.txt[]
+--
+endif::VK_KHR_zero_initialize_workgroup_memory[]
+
+ifdef::VK_EXT_private_data[]
+[open,refpage='VkPhysicalDevicePrivateDataFeaturesEXT',desc='Structure specifying physical device support',type='structs']
+--
+
+The sname:VkPhysicalDevicePrivateDataFeaturesEXT structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDevicePrivateDataFeaturesEXT.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-privateData]] pname:privateData indicates whether the
+    implementation supports private data.
+    See <<private-data, Private Data>>.
+
+:refpage: VkPhysicalDevicePrivateDataFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePrivateDataFeaturesEXT.txt[]
+--
+endif::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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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: VkPhysicalDevicePrivateDataFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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,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,robustStorageBufferAccessSizeAlignment>>.
+    Out of bounds buffer loads will return zero values, and formatted loads
+    will have [eq]#(0,0,1)# values 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 image loads 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.
+  * [[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.txt[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.txt[]
+--
+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_EXT_image_robustness[]
+[open,refpage='VkPhysicalDeviceImageRobustnessFeaturesEXT',desc='Structure describing the out-of-bounds behavior for an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceImageRobustnessFeaturesEXT structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceImageRobustnessFeaturesEXT.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[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.
+
+:refpage: VkPhysicalDeviceImageRobustnessFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceImageRobustnessFeaturesEXT.txt[]
+--
+endif::VK_EXT_image_robustness[]
+
+ifdef::VK_KHR_shader_terminate_invocation[]
+[open,refpage='VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR',desc='Structure describing support for the SPIR-V code:SPV_KHR_terminate_invocation extension',type='structs']
+--
+The sname:VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderTerminateInvocation]] pname:shaderTerminateInvocation
+    specifies whether the implementation supports SPIR-V modules that use
+    the `SPV_KHR_terminate_invocation` extension.
+
+:refpage: VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR.txt[]
+--
+endif::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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBorderColorSwizzleFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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,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,tessellation shaders>> 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,tessellation shaders>> 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetFeaturesKHR.txt[]
+--
+endif::VK_KHR_portability_subset[]
+
+ifdef::VK_KHR_performance_query[]
+include::VK_KHR_performance_query/features.txt[]
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevice4444FormatsFeaturesEXT.txt[]
+--
+endif::VK_EXT_4444_formats[]
+
+ifdef::VK_VALVE_mutable_descriptor_type[]
+[open,refpage='VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE',desc='Structure describing whether the mutable descriptor type is supported',type='structs']
+--
+The sname:VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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_VALVE 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:VkMutableDescriptorTypeListVALVE for
+     ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE 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_VALVE 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:VkMutableDescriptorTypeListVALVE for
+     ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE have the corresponding dynamic
+     indexing features enabled.
+  ** ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE must: be
+     supported.
+  ** ename:VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE must: be supported.
+
+:refpage: VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE.txt[]
+--
+endif::VK_VALVE_mutable_descriptor_type[]
+
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.txt[]
+--
+endif::VK_KHR_workgroup_memory_explicit_layout[]
+
+ifdef::VK_KHR_synchronization2[]
+[open,refpage='VkPhysicalDeviceSynchronization2FeaturesKHR',desc='Structure describing whether the implementation supports v2 synchronization commands',type='structs']
+--
+The sname:VkPhysicalDeviceSynchronization2FeaturesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSynchronization2FeaturesKHR.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-synchronization2]] pname:synchronization2 indicates whether
+    the implementation supports the new set of synchronization commands
+    introduced in `apiext:VK_KHR_synchronization2`.
+
+:refpage: VkPhysicalDeviceSynchronization2FeaturesKHR
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSynchronization2FeaturesKHR.txt[]
+--
+endif::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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT.txt[]
+--
+endif::VK_EXT_vertex_input_dynamic_state[]
+
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.txt[]
+--
+endif::VK_KHR_fragment_shading_rate[]
+
+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.txt[]
+
+This structure describes the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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_EXT_extended_dynamic_state[]
+      ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
+      ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_discard_rectangles[]
+      ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceInheritedViewportScissorFeaturesNV.txt[]
+--
+endif::VK_NV_inherited_viewport_scissor[]
+
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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_EXT
+    ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT
+    ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT
+    ** ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT
+
+:refpage: VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceColorWriteEnableFeaturesEXT.txt[]
+--
+endif::VK_EXT_color_write_enable[]
+
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+ifdef::VK_EXT_transform_feedback[]
+When sname:VkPhysicalDeviceProvokingVertexFeaturesEXT is in the pname:pNext
+chain of slink:VkDeviceCreateInfo but the
+<<features-transformFeedback,transform feedback feature>> is not enabled,
+the value of pname:transformFeedbackPreservesProvokingVertex is ignored.
+endif::VK_EXT_transform_feedback[]
+
+include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexFeaturesEXT.txt[]
+--
+endif::VK_EXT_provoking_vertex[]
+
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT.txt[]
+--
+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.txt[]
+
+The members of the sname:VkPhysicalDeviceMultiDrawFeaturesEXT structure
+describe the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawFeaturesEXT.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRayTracingMotionBlurFeaturesNV.txt[]
+--
+endif::VK_NV_ray_tracing_motion_blur[]
+
+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.txt[]
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingFeaturesHUAWEI.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryRDMAFeaturesNV.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePresentIdFeaturesKHR.txt[]
+--
+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.txt[]
+
+This structure describes the following feature:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDevicePresentWaitFeaturesKHR.txt[]
+--
+endif::VK_KHR_present_wait[]
+
+ifdef::VK_KHR_shader_integer_dot_product[]
+[open,refpage='VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR',desc='Structure describing integer dot product features that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR.txt[]
+
+The members of the sname:VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
+structure describe the following features:
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[features-shaderIntegerDotProduct]] pname:shaderIntegerDotProduct
+    specifies whether shader modules can: declare the
+    code:DotProductInputAllKHR, code:DotProductInput4x8BitKHR,
+    code:DotProductInput4x8BitPackedKHR and code:DotProductKHR capabilities.
+
+:refpage: VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR.txt[]
+--
+endif::VK_KHR_shader_integer_dot_product[]
+
+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.txt[]
+
+The members of the sname:VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT
+structure describe the following features:
+
+  * pname:sType is the type of 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.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT.txt[]
+--
+endif::VK_EXT_rgba10x6_formats[]
+
+ifdef::VK_KHR_maintenance4[]
+[open,refpage='VkPhysicalDeviceMaintenance4FeaturesKHR',desc='Structure describing whether the implementation supports maintenance4 functionality',type='structs']
+--
+The sname:VkPhysicalDeviceMaintenance4FeaturesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance4FeaturesKHR.txt[]
+
+This structure describes the following features:
+
+  * [[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.
+
+:refpage: VkPhysicalDeviceMaintenance4FeaturesKHR
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4FeaturesKHR.txt[]
+--
+endif::VK_KHR_maintenance4[]
+
+ifdef::VK_KHR_dynamic_rendering[]
+[open,refpage='VkPhysicalDeviceDynamicRenderingFeaturesKHR',desc='Structure indicating support for dynamic render pass instances',type='structs']
+--
+The sname:VkPhysicalDeviceDynamicRenderingFeaturesKHR structure is defined
+as:
+
+include::{generated}/api/structs/VkPhysicalDeviceDynamicRenderingFeaturesKHR.txt[]
+
+The members of the sname:VkPhysicalDeviceDynamicRenderingFeaturesKHR
+structure describe the following features:
+
+  * [[features-dynamicRendering]] pname:dynamicRendering specifies that the
+    implementation supports dynamic render pass instances using the
+    flink:vkCmdBeginRenderingKHR command.
+
+:refpage: VkPhysicalDeviceDynamicRenderingFeaturesKHR
+include::{chapters}/features.txt[tag=features]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDynamicRenderingFeaturesKHR.txt[]
+--
+endif::VK_KHR_dynamic_rendering[]
+
+
+[[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::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,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_EXT_inline_uniform_block[]
+  * <<features-inlineUniformBlock,pname:inlineUniformBlock>>, if the
+    `apiext:VK_EXT_inline_uniform_block` extension is supported.
+ifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+  * <<features-descriptorBindingInlineUniformBlockUpdateAfterBind,
+    pname:descriptorBindingInlineUniformBlockUpdateAfterBind>>, if 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_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_EXT_subgroup_size_control[]
+  * <<features-subgroupSizeControl, pname:subgroupSizeControl>>, if the
+    `apiext:VK_EXT_subgroup_size_control` extension is supported.
+  * <<features-computeFullSubgroups, pname:computeFullSubgroups>>, if the
+    `apiext:VK_EXT_subgroup_size_control` extension is supported.
+endif::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_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.
+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,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-accelerationStructure,pname:accelerationStructure>> from
+     `apiext:VK_KHR_acceleration_structure`
+  ** <<features-rayTracingPipeline, pname:rayTracingPipeline>>
+  ** <<features-rayTracingPipelineTraceRaysIndirect,
+     pname:rayTracingPipelineTraceRaysIndirect>>
+  ** <<features-rayTraversalPrimitiveCulling,
+     pname:rayTraversalPrimitiveCulling>>, if <<features-rayQuery,
+     pname:rayQuery>> is supported from `apiext:VK_KHR_ray_query`
+  ** the `apiext:VK_KHR_pipeline_library` extension.
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_ray_query[]
+  * If the `apiext:VK_KHR_ray_query` extension is supported:
+  ** <<features-accelerationStructure,pname:accelerationStructure>> from
+     `apiext:VK_KHR_acceleration_structure`
+  ** <<features-rayQuery, pname:rayQuery>>
+endif::VK_KHR_ray_query[]
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+  * <<features-pipelineCreationCacheControl,
+    pname:pipelineCreationCacheControl>>, if the
+    `apiext:VK_EXT_pipeline_creation_cache_control` extension is supported.
+endif::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_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_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_EXT_shader_demote_to_helper_invocation[]
+  * <<features-shaderDemoteToHelperInvocation,
+    pname:shaderDemoteToHelperInvocation>>, if the
+    `apiext:VK_EXT_shader_demote_to_helper_invocation` extension is
+    supported.
+endif::VK_EXT_shader_demote_to_helper_invocation[]
+ifdef::VK_EXT_texel_buffer_alignment[]
+  * <<features-texelBufferAlignment, pname:texelBufferAlignment>>, if the
+    `apiext:VK_EXT_texel_buffer_alignment` extension is supported.
+endif::VK_EXT_texel_buffer_alignment[]
+ifdef::VK_KHR_vulkan_memory_model[]
+  * <<features-vulkanMemoryModel, pname:vulkanMemoryModel>>, if the
+    `apiext:VK_KHR_vulkan_memory_model` extension is supported.
+endif::VK_KHR_vulkan_memory_model[]
+ifdef::VK_KHR_buffer_device_address[]
+  * <<features-bufferDeviceAddress, pname:bufferDeviceAddress>>, if the
+    `apiext:VK_KHR_buffer_device_address` extension is supported.
+endif::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_EXT_image_robustness[]
+  * <<features-robustImageAccess, pname:robustImageAccess>>, if the
+    `apiext:VK_EXT_image_robustness` extension is supported.
+endif::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_VALVE_mutable_descriptor_type[]
+  * <<features-mutableDescriptorType, pname:mutableDescriptorType>>, if the
+    `apiext:VK_VALVE_mutable_descriptor_type` extension is supported.
+endif::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_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_KHR_shader_terminate_invocation[]
+  * <<features-shaderTerminateInvocation, pname:shaderTerminateInvocation>>
+    if the `apiext:VK_KHR_shader_terminate_invocation` extension is
+    supported.
+endif::VK_KHR_shader_terminate_invocation[]
+ifdef::VK_KHR_zero_initialize_workgroup_memory[]
+  * <<features-shaderZeroInitializeWorkgroupMemory,
+    pname:shaderZeroInitializeWorkgroupMem>>, if the
+    `apiext:VK_KHR_zero_initialize_workgroup_memory` extension is supported.
+endif::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_KHR_synchronization2[]
+  * <<features-synchronization2, pname:synchronization2>> if the
+    `apiext:VK_KHR_synchronization2` extension is supported.
+endif::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_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_KHR_shader_integer_dot_product[]
+  * <<features-shaderIntegerDotProduct, pname:shaderIntegerDotProduct>> if
+    the `apiext:VK_KHR_shader_integer_dot_product` extension is supported.
+endif::VK_KHR_shader_integer_dot_product[]
+ifdef::VK_KHR_maintenance4[]
+  * <<features-maintenance4, pname:maintenance4>>, if the
+    `apiext:VK_KHR_maintenance4` extension is supported.
+endif::VK_KHR_maintenance4[]
+
+All other features defined in the Specification are optional:.
diff --git a/registry/vulkan/chapters/formats.txt b/registry/vulkan/chapters/formats.txt
new file mode 100644
index 0000000..3b3c7a3
--- /dev/null
+++ b/registry/vulkan/chapters/formats.txt
@@ -0,0 +1,4008 @@
+// Copyright 2015-2021 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.txt[]
+
+  * 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_EXT_4444_formats[]
+  * ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT 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_EXT 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_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.
+  * 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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT 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_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_EXT_texture_compression_astc_hdr[]
+  * ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT 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_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_EXT_ycbcr_2plane_444_formats[]
+  * ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT 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_EXT 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_EXT 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_EXT 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_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_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 _compatible_ with single-plane
+formats if they occupy the same number of bits per texel block.
+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>>.
+
+.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
+4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM*
+^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h/2
+^| 2     ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h/2
+4+| *ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM*
+^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R8G8_UNORM ^| w/2 ^| h/2
+4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM*
+^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h
+^| 2     ^| ename:VK_FORMAT_R8_UNORM ^| w/2 ^| h
+4+| *ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM*
+^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R8G8_UNORM ^| w/2 ^| h
+4+| *ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM*
+^| 0     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
+^| 2     ^| ename:VK_FORMAT_R8_UNORM ^| w ^| h
+4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h/2
+^| 2     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h/2
+4+| *ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 ^| w/2 ^| h/2
+4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h
+^| 2     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w/2 ^| h
+4+| *ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 ^| w/2 ^| h
+4+| *ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
+^| 2     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16 ^| w ^| h
+4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h/2
+^| 2     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h/2
+4+| *ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 ^| w/2 ^| h/2
+4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h
+^| 2     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w/2 ^| h
+4+| *ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 ^| w/2 ^| h
+4+| *ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16*
+^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
+^| 2     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16 ^| w ^| h
+4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM*
+^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h/2
+^| 2     ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h/2
+4+| *ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM*
+^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R16G16_UNORM ^| w/2 ^| h/2
+4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM*
+^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h
+^| 2     ^| ename:VK_FORMAT_R16_UNORM ^| w/2 ^| h
+4+| *ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM*
+^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R16G16_UNORM ^| w/2 ^| h
+4+| *ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM*
+^| 0     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
+^| 2     ^| ename:VK_FORMAT_R16_UNORM ^| w ^| h
+ifdef::VK_EXT_ycbcr_2plane_444_formats[]
+4+| *ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT*
+^| 0     ^| ename:VK_FORMAT_R8_UNORM   ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R8G8_UNORM ^| w ^| h
+4+| *ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT*
+^| 0     ^| ename:VK_FORMAT_R10X6_UNORM_PACK16       ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 ^| w ^| h
+4+| *ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT*
+^| 0     ^| ename:VK_FORMAT_R12X4_UNORM_PACK16       ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 ^| w ^| h
+4+| *ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT*
+^| 0     ^| ename:VK_FORMAT_R16_UNORM    ^| w ^| h
+^| 1     ^| ename:VK_FORMAT_R16G16_UNORM ^| w ^| h
+endif::VK_EXT_ycbcr_2plane_444_formats[]
+|====
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+
+[[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.
+
+  * <<formats-packed-8-bit,Packed into 8-bit data types>>:
+  ** ename:VK_FORMAT_R4G4_UNORM_PACK8
+  * <<formats-packed-16-bit,Packed into 16-bit data types>>:
+  ** ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16
+  ** ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16
+ifdef::VK_EXT_4444_formats[]
+  ** ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT
+  ** ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT
+endif::VK_EXT_4444_formats[]
+  ** 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
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  ** ename:VK_FORMAT_R10X6_UNORM_PACK16
+  ** ename:VK_FORMAT_R12X4_UNORM_PACK16
+  ** ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16
+  ** ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16
+  ** ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
+  ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
+  ** ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
+  ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
+  ** ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
+  ** ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
+  ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
+  ** ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
+  ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
+  ** ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
+  ** ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT
+  ** ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT
+  ** ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
+  ** ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
+  ** ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
+  ** ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
+  ** ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
+  ** ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * <<formats-packed-32-bit,Packed into 32-bit data types>>:
+  ** ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32
+  ** ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32
+  ** ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32
+  ** ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32
+  ** ename:VK_FORMAT_A8B8G8R8_UINT_PACK32
+  ** ename:VK_FORMAT_A8B8G8R8_SINT_PACK32
+  ** ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32
+  ** 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
+  ** ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32
+  ** ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32
+  ** ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32
+  ** ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
+  ** ename:VK_FORMAT_A2B10G10R10_SINT_PACK32
+  ** ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
+  ** ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
+  ** ename:VK_FORMAT_X8_D24_UNORM_PACK32
+
+
+=== 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,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[]
+
+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[]
+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_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_EXT_4444_formats[]
+16+^h|ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT
+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_EXT
+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_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_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 that 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.
+Compressed color formats are compatible with each other if the only
+difference between them is the numerical type of the uncompressed pixels
+(e.g. signed vs. unsigned, or SRGB vs. UNORM encoding).
+Each depth/stencil format is only compatible with itself.
+In the <<formats-compatibility,following>> table, all the formats in the
+same row are compatible.
+
+
+[[formats-compatibility]]
+.Compatible Formats
+[width="90%",cols="4,10",options="header"]
+|====
+| Class, Texel Block Size, # Texels/Block | Formats
+| 8-bit +
+  Block size 1 byte +
+  1 texel/block
+                  | ename:VK_FORMAT_R4G4_UNORM_PACK8, +
+                    ename:VK_FORMAT_R8_UNORM, +
+                    ename:VK_FORMAT_R8_SNORM, +
+                    ename:VK_FORMAT_R8_USCALED, +
+                    ename:VK_FORMAT_R8_SSCALED, +
+                    ename:VK_FORMAT_R8_UINT, +
+                    ename:VK_FORMAT_R8_SINT, +
+                    ename:VK_FORMAT_R8_SRGB
+| 16-bit +
+  Block size 2 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16, +
+                    ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16, +
+ifdef::VK_EXT_4444_formats[]
+                    ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT, +
+                    ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT, +
+endif::VK_EXT_4444_formats[]
+                    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_R8G8_UNORM, +
+                    ename:VK_FORMAT_R8G8_SNORM, +
+                    ename:VK_FORMAT_R8G8_USCALED, +
+                    ename:VK_FORMAT_R8G8_SSCALED, +
+                    ename:VK_FORMAT_R8G8_UINT, +
+                    ename:VK_FORMAT_R8G8_SINT, +
+                    ename:VK_FORMAT_R8G8_SRGB, +
+                    ename:VK_FORMAT_R16_UNORM, +
+                    ename:VK_FORMAT_R16_SNORM, +
+                    ename:VK_FORMAT_R16_USCALED, +
+                    ename:VK_FORMAT_R16_SSCALED, +
+                    ename:VK_FORMAT_R16_UINT, +
+                    ename:VK_FORMAT_R16_SINT, +
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+                    ename:VK_FORMAT_R16_SFLOAT
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+                    ename:VK_FORMAT_R16_SFLOAT, +
+                    ename:VK_FORMAT_R10X6_UNORM_PACK16, +
+                    ename:VK_FORMAT_R12X4_UNORM_PACK16
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+| 24-bit +
+  Block size 3 bytes +
+  1 texel/block
+                  | 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
+| 32-bit +
+  Block size 4 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R8G8B8A8_UNORM, +
+                    ename:VK_FORMAT_R8G8B8A8_SNORM, +
+                    ename:VK_FORMAT_R8G8B8A8_USCALED, +
+                    ename:VK_FORMAT_R8G8B8A8_SSCALED, +
+                    ename:VK_FORMAT_R8G8B8A8_UINT, +
+                    ename:VK_FORMAT_R8G8B8A8_SINT, +
+                    ename:VK_FORMAT_R8G8B8A8_SRGB, +
+                    ename:VK_FORMAT_B8G8R8A8_UNORM, +
+                    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, +
+                    ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32, +
+                    ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32, +
+                    ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32, +
+                    ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32, +
+                    ename:VK_FORMAT_A8B8G8R8_UINT_PACK32, +
+                    ename:VK_FORMAT_A8B8G8R8_SINT_PACK32, +
+                    ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32, +
+                    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, +
+                    ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32, +
+                    ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32, +
+                    ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32, +
+                    ename:VK_FORMAT_A2B10G10R10_UINT_PACK32, +
+                    ename:VK_FORMAT_A2B10G10R10_SINT_PACK32, +
+                    ename:VK_FORMAT_R16G16_UNORM, +
+                    ename:VK_FORMAT_R16G16_SNORM, +
+                    ename:VK_FORMAT_R16G16_USCALED, +
+                    ename:VK_FORMAT_R16G16_SSCALED, +
+                    ename:VK_FORMAT_R16G16_UINT, +
+                    ename:VK_FORMAT_R16G16_SINT, +
+                    ename:VK_FORMAT_R16G16_SFLOAT, +
+                    ename:VK_FORMAT_R32_UINT, +
+                    ename:VK_FORMAT_R32_SINT, +
+                    ename:VK_FORMAT_R32_SFLOAT, +
+                    ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32, +
+ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+                    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+                    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, +
+                    ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16, +
+                    ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16
+| 32-bit G8B8G8R8 +
+  Block size 4 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G8B8G8R8_422_UNORM
+| 32-bit B8G8R8G8 +
+  Block size 4 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_B8G8R8G8_422_UNORM
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+| 48-bit +
+  Block size 6 bytes +
+  1 texel/block
+                  | 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
+| 64-bit +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R16G16B16A16_UNORM, +
+                    ename:VK_FORMAT_R16G16B16A16_SNORM, +
+                    ename:VK_FORMAT_R16G16B16A16_USCALED, +
+                    ename:VK_FORMAT_R16G16B16A16_SSCALED, +
+                    ename:VK_FORMAT_R16G16B16A16_UINT, +
+                    ename:VK_FORMAT_R16G16B16A16_SINT, +
+                    ename:VK_FORMAT_R16G16B16A16_SFLOAT, +
+                    ename:VK_FORMAT_R32G32_UINT, +
+                    ename:VK_FORMAT_R32G32_SINT, +
+                    ename:VK_FORMAT_R32G32_SFLOAT, +
+                    ename:VK_FORMAT_R64_UINT, +
+                    ename:VK_FORMAT_R64_SINT, +
+                    ename:VK_FORMAT_R64_SFLOAT
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+| 64-bit R10G10B10A10 +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
+| 64-bit G10B10G10R10 +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
+| 64-bit B10G10R10G10 +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
+| 64-bit R12G12B12A12 +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
+| 64-bit G12B12G12R12 +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
+| 64-bit B12G12R12G12 +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
+| 64-bit G16B16G16R16 +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G16B16G16R16_422_UNORM
+| 64-bit B16G16R16G16 +
+  Block size 8 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_B16G16R16G16_422_UNORM
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+| 96-bit +
+  Block size 12 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R32G32B32_UINT, +
+                    ename:VK_FORMAT_R32G32B32_SINT, +
+                    ename:VK_FORMAT_R32G32B32_SFLOAT
+| 128-bit +
+  Block size 16 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R32G32B32A32_UINT, +
+                    ename:VK_FORMAT_R32G32B32A32_SINT, +
+                    ename:VK_FORMAT_R32G32B32A32_SFLOAT, +
+                    ename:VK_FORMAT_R64G64_UINT, +
+                    ename:VK_FORMAT_R64G64_SINT, +
+                    ename:VK_FORMAT_R64G64_SFLOAT
+| 192-bit +
+  Block size 24 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R64G64B64_UINT, +
+                    ename:VK_FORMAT_R64G64B64_SINT, +
+                    ename:VK_FORMAT_R64G64B64_SFLOAT
+| 256-bit +
+  Block size 32 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_R64G64B64A64_UINT, +
+                    ename:VK_FORMAT_R64G64B64A64_SINT, +
+                    ename:VK_FORMAT_R64G64B64A64_SFLOAT
+| BC1_RGB (64 bit) +
+  Block size 8 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK, +
+                    ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK
+| BC1_RGBA (64 bit) +
+  Block size 8 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK, +
+                    ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK
+| BC2 (128 bit) +
+  Block size 16 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_BC2_UNORM_BLOCK, +
+                    ename:VK_FORMAT_BC2_SRGB_BLOCK
+| BC3 (128 bit) +
+  Block size 16 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_BC3_UNORM_BLOCK, +
+                    ename:VK_FORMAT_BC3_SRGB_BLOCK
+| BC4 (64 bit) +
+  Block size 8 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_BC4_UNORM_BLOCK, +
+                    ename:VK_FORMAT_BC4_SNORM_BLOCK
+| BC5 (128 bit) +
+  Block size 16 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_BC5_UNORM_BLOCK, +
+                    ename:VK_FORMAT_BC5_SNORM_BLOCK
+| BC6H (128 bit) +
+  Block size 16 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_BC6H_UFLOAT_BLOCK, +
+                    ename:VK_FORMAT_BC6H_SFLOAT_BLOCK
+| BC7 (128 bit) +
+  Block size 16 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_BC7_UNORM_BLOCK, +
+                    ename:VK_FORMAT_BC7_SRGB_BLOCK
+| ETC2_RGB (64 bit) +
+  Block size 8 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, +
+                    ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
+| ETC2_RGBA (64 bit) +
+  Block size 8 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, +
+                    ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
+| ETC2_EAC_RGBA (64 bit) +
+  Block size 8 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, +
+                    ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
+| EAC_R (64 bit) +
+  Block size 8 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_EAC_R11_UNORM_BLOCK, +
+                    ename:VK_FORMAT_EAC_R11_SNORM_BLOCK
+| EAC_RG (128 bit) +
+  Block size 16 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK, +
+                    ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK
+| ASTC_4x4 (128 bit) +
+  Block size 16 bytes +
+  16 texels/block
+                  | ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK
+| ASTC_5x4 (128 bit) +
+  Block size 16 bytes +
+  20 texels/block
+                  | ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK
+| ASTC_5x5 (128 bit) +
+  Block size 16 bytes +
+  25 texels/block
+                  | ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK
+| ASTC_6x5 (128 bit) +
+  Block size 16 bytes +
+  30 texels/block
+                  | ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK
+| ASTC_6x6 (128 bit) +
+  Block size 16 bytes +
+  36 texels/block
+                  | ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK
+| ASTC_8x5 (128 bit) +
+  Block size 16 bytes +
+  40 texels/block
+                  | ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK
+| ASTC_8x6 (128 bit) +
+  Block size 16 bytes +
+  48 texels/block
+                  | ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK
+| ASTC_8x8 (128 bit) +
+  Block size 16 bytes +
+  64 texels/block
+                  | ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK
+| ASTC_10x5 (128 bit) +
+  Block size 16 bytes +
+  50 texels/block
+                  | ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK
+| ASTC_10x6 (128 bit) +
+  Block size 16 bytes +
+  60 texels/block
+                  | ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK
+| ASTC_10x8 (128 bit) +
+  Block size 16 bytes +
+  80 texels/block
+                  | ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK
+| ASTC_10x10 (128 bit) +
+  Block size 16 bytes +
+  100 texels/block
+                  | ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK
+| ASTC_12x10 (128 bit) +
+  Block size 16 bytes +
+  120 texels/block
+                  | ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK
+| ASTC_12x12 (128 bit) +
+  Block size 16 bytes +
+  144 texels/block
+                  | ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK, +
+ifdef::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT, +
+endif::VK_EXT_texture_compression_astc_hdr[]
+                    ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK
+| D16 (16 bit) +
+  Block size 2 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_D16_UNORM
+| D24 (32 bit) +
+  Block size 4 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_X8_D24_UNORM_PACK32
+| D32 (32 bit) +
+  Block size 4 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_D32_SFLOAT
+| S8 (8 bit) +
+  Block size 1 byte +
+  1 texel/block
+                  | ename:VK_FORMAT_S8_UINT
+| D16S8 (24 bit) +
+  Block size 3 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_D16_UNORM_S8_UINT
+| D24S8 (32 bit) +
+  Block size 4 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_D24_UNORM_S8_UINT
+| D32S8 (40 bit) +
+  Block size 5 bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_D32_SFLOAT_S8_UINT
+ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+| 8-bit 3-plane 420 +
+  Block size (1,1,1) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
+| 8-bit 2-plane 420 +
+  Block size (1,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
+| 8-bit 3-plane 422 +
+  Block size (1,1,1) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
+| 8-bit 2-plane 422 +
+  Block size (1,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM
+| 8-bit 3-plane 444 +
+  Block size (1,1,1) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
+| 10-bit 3-plane 420 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
+| 10-bit 2-plane 420 +
+  Block size (2,4) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
+| 10-bit 3-plane 422 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
+| 10-bit 2-plane 422 +
+  Block size (2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
+| 10-bit 3-plane 444 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
+| 12-bit 3-plane 420 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
+| 12-bit 2-plane 420 +
+  Block size (2,4) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
+| 12-bit 3-plane 422 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
+| 12-bit 2-plane 422 +
+  Block size (2,4) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
+| 12-bit 3-plane 444 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
+| 16-bit 3-plane 420 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
+| 16-bit 2-plane 420 +
+  Block size (2,4) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM
+| 16-bit 3-plane 422 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
+| 16-bit 2-plane 422 +
+  Block size (2,4) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM
+| 16-bit 3-plane 444 +
+  Block size (2,2,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
+ifdef::VK_EXT_ycbcr_2plane_444_formats[]
+| 8-bit 2-plane 444 +
+  Block size (1,2) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT
+| 10-bit 2-plane 444 +
+  Block size (2,4) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT
+| 12-bit 2-plane 444 +
+  Block size (2,4) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT
+| 16-bit 2-plane 444 +
+  Block size (2,4) bytes +
+  1 texel/block
+                  | ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT
+endif::VK_EXT_ycbcr_2plane_444_formats[]
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+|====
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkFormatProperties',desc='Structure specifying image format properties',type='structs']
+--
+The sname:VkFormatProperties structure is defined as:
+
+include::{generated}/api/structs/VkFormatProperties.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+These values
+ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+ifdef::VK_KHR_format_feature_flags2[]
+all have the same meaning as the equivalently named values for
+tlink:VkFormatFeatureFlags2KHR and
+endif::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 and as an input attachment.
+  * 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_KHR_copy_commands2[]
+    fname:vkCmdBlitImage command.
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage commands.
+endif::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_KHR_copy_commands2[]
+    fname:vkCmdBlitImage command.
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage commands.
+endif::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_KHR_copy_commands2[]
+    fname:vkCmdBlitImage
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage
+endif::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>>.
+  * 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>>.
+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 numeric
+    type 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 an output for
+    <<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 a DPB for
+    <<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 input to
+    <<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 a DPB for
+    <<video-encode-operations,video encode operations>>
+endif::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[]
+
+--
+
+[open,refpage='VkFormatFeatureFlags',desc='Bitmask of VkFormatFeatureFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkFormatFeatureFlags.txt[]
+
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkFormatProperties2',desc='Structure specifying image format properties',type='structs']
+--
+The sname:VkFormatProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkFormatProperties2.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkFormatProperties2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+ifdef::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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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:VkFormatFeatureFlagBits2KHR that are supported by any image
+    created with pname:format and pname:drmFormatModifier.
+include::{generated}/validity/structs/VkDrmFormatModifierProperties2EXT.txt[]
+--
+endif::VK_KHR_format_feature_flags2[]
+endif::VK_EXT_image_drm_format_modifier[]
+
+ifdef::VK_KHR_format_feature_flags2[]
+[open,refpage='VkFormatProperties3KHR',desc='Structure specifying image format properties',type='structs']
+--
+
+To query supported format extended features which are properties of the
+physical device, add slink:VkFormatProperties3KHR structure to the
+pname:pNext chain of slink:VkFormatProperties2.
+
+The slink:VkFormatProperties3KHR structure is defined as:
+
+include::{generated}/api/structs/VkFormatProperties3KHR.txt[]
+
+  * pname:linearTilingFeatures is a bitmask of
+    elink:VkFormatFeatureFlagBits2KHR specifying features supported by
+    images created with a pname:tiling parameter of
+    ename:VK_IMAGE_TILING_LINEAR.
+  * pname:optimalTilingFeatures is a bitmask of
+    elink:VkFormatFeatureFlagBits2KHR specifying features supported by
+    images created with a pname:tiling parameter of
+    ename:VK_IMAGE_TILING_OPTIMAL.
+  * pname:bufferFeatures is a bitmask of elink:VkFormatFeatureFlagBits2KHR
+    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/VkFormatProperties3KHR.txt[]
+--
+
+[open,refpage='VkFormatFeatureFlagBits2KHR',desc='Bitmask specifying features supported by a buffer',type='enums']
+--
+Bits which can: be set in the slink:VkFormatProperties3KHR features
+pname:linearTilingFeatures, pname:optimalTilingFeatures, and
+pname:bufferFeatures are:
+
+include::{generated}/api/enums/VkFormatFeatureFlagBits2KHR.txt[]
+
+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_KHR specifies that an image
+    view can: be <<descriptorsets-sampledimage, sampled from>>.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR specifies that an image
+    view can: be used as a <<descriptorsets-storageimage, storage image>>.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR specifies that an
+    image view can: be used as storage image that supports atomic
+    operations.
+  * ename:VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR 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_KHR specifies that
+    an image view can: be used as a framebuffer color attachment that
+    supports blending and as an input attachment.
+  * ename:VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR 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_KHR specifies that an image can:
+    be used as pname:srcImage for the
+ifndef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage command.
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage commands.
+endif::VK_KHR_copy_commands2[]
+  * ename:VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR specifies that an image can:
+    be used as pname:dstImage for the
+ifndef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage command.
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage commands.
+endif::VK_KHR_copy_commands2[]
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR specifies
+    that if ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR 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_KHR is also set, an image can
+    be used as the pname:srcImage to
+ifndef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+    fname:vkCmdBlitImage2KHR and fname:vkCmdBlitImage
+endif::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_2_SAMPLED_IMAGE_BIT_KHR or
+    ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR.
++
+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_KHR specifies that an image
+    can: be used as a source image for <<copies, copy commands>>.
+  * ename:VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR 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_KHR 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_KHR.
+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_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_2_SAMPLED_IMAGE_BIT_KHR.
+    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_KHR 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_KHR.
+  * ename:VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR 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_KHR nor
+    ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR 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_KHR
+    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_KHR
+    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_KHR
+    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_KHR
+    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_KHR
+    it must: also support
+    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR.
+  * ename:VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR 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_KHR 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 numeric
+    type 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 an output for
+    <<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 a DPB for
+    <<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 input to
+    <<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 a DPB for
+    <<video-encode-operations,video encode operations>>
+endif::VK_KHR_video_encode_queue[]
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR specifies
+    that image views created with this format can: be used as
+    <<descriptorsets-storageimage, storage images>> for read operations
+    without specifying a format.
+  * ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR specifies
+    that image views created with this format can: be used as
+    <<descriptorsets-storageimage, storage images>> for write operations
+    without specifying a format.
+  * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR
+    specifies that image views created with this format can: be used for
+    depth comparison performed by code:OpImage*Dref instructions.
+
+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_KHR 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_KHR 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_KHR 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_KHR 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[]
+--
+
+[open,refpage='VkFormatFeatureFlags2KHR',desc='Bitmask of VkFormatFeatureFlagBits2KHR',type='flags']
+--
+include::{generated}/api/flags/VkFormatFeatureFlags2KHR.txt[]
+
+tname:VkFormatFeatureFlags2KHR is a bitmask type for setting a mask of zero
+or more elink:VkFormatFeatureFlagBits2KHR.
+--
+endif::VK_KHR_format_feature_flags2[]
+endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
+
+
+[[potential-format-features]]
+=== Potential Format Features
+
+Some <<fundamentals-validusage,valid usage conditions>> depend on the format
+features supported by an 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_KHR_format_feature_flags2[]
+    and elink:VkFormatFeatureFlagBits2KHR,
+endif::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[]
+    if elink:VkFormat is not ename:VK_FORMAT_UNDEFINED
+  * slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures
+ifdef::VK_KHR_format_feature_flags2[]
+    and
+    slink:VkAndroidHardwareBufferFormatProperties2ANDROID::pname:formatFeatures
+endif::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[]
+
+[[features-required-format-support]]
+== Required Format Support
+
+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_EXT_4444_formats[]
+| ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT      | {sym2} | {sym2} | {sym2} |   |   |   |   |   |   |   |   |   |
+| ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT      | {sym3} | {sym3} | {sym3} |   |   |   |   |   |   |   |   |   |
+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_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                |        |        |        |        |   |        |        |        |   |        |        |   |
+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} |   | {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+|
+If 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 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 ename:VK_FORMAT_R32_SFLOAT.
+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.
+|====
+
+<<<
+
+[[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_EXT_ycbcr_2plane_444_formats[]
+| ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT                     | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT    | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT    | 2 |  |        |        |        |        | | | | |
+| ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT                  | 2 |  |        |        |        |        | | | | |
+endif::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,fragment density
+map 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[]
+
+
+[[formats-without-shader-storage-format]]
+=== Formats without shader storage format
+
+The device-level features for using a storage image with an image format of
+code:Unknown,
+<<features-shaderStorageImageReadWithoutFormat,shaderStorageImageReadWithoutFormat>>
+and
+<<features-shaderStorageImageWriteWithoutFormat,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
+
+[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_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,shaderStorageImageReadWithoutFormat>>
+must: support ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR
+for that same format if 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,shaderStorageImageWriteWithoutFormat>>
+must: support ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR
+for that same format if the `apiext:VK_KHR_format_feature_flags2` extension
+is supported.
+endif::VK_KHR_format_feature_flags2[]
+
+
+ifdef::VK_KHR_format_feature_flags2[]
+=== Depth comparison format support
+
+If 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_KHR.
+
+endif::VK_KHR_format_feature_flags2[]
diff --git a/registry/vulkan/chapters/fragmentdensitymapops.txt b/registry/vulkan/chapters/fragmentdensitymapops.txt
new file mode 100644
index 0000000..e8a5f4c
--- /dev/null
+++ b/registry/vulkan/chapters/fragmentdensitymapops.txt
@@ -0,0 +1,128 @@
+// Copyright 2018-2021 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
+
+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]
+
+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
+density map layer that the texel is fetched from 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/registry/vulkan/chapters/fragops.txt b/registry/vulkan/chapters/fragops.txt
new file mode 100644
index 0000000..3d82836
--- /dev/null
+++ b/registry/vulkan/chapters/fragops.txt
@@ -0,0 +1,1793 @@
+// Copyright 2015-2021 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>>
+  ** <<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_KHR_shader_terminate_invocation[]
+  * code:OpTerminateInvocation
+endif::VK_KHR_shader_terminate_invocation[]
+ifdef::VK_EXT_shader_demote_to_helper_invocation[]
+  * code:OpDemoteToHelperInvocationEXT
+endif::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 the <<fragops-shader, fragment shader>> 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[]
+
+If the <<fragops-shader, fragment shader>> declares the
+code:EarlyFragmentTests execution mode, <<fragops-shader,fragment shading>>
+and <<fragops-covg, multisample coverage>> operations are instead performed
+after <<fragops-samplecount, sample counting>>.
+
+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::offset.x, slink:VkRect2D::offset.x {plus}
+slink:VkRect2D::extent.x)#, and [eq]#y~f~# is in the range
+[eq]#[slink:VkRect2D::offset.y, slink:VkRect2D::offset.y {plus}
+slink:VkRect2D::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.txt[]
+
+  * pname:sType is the type of 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.
+
+When this structure is included in the pname:pNext chain of
+slink:VkGraphicsPipelineCreateInfo, it defines parameters of the discard
+rectangle test.
+If 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.txt[]
+--
+
+[open,refpage='VkPipelineDiscardRectangleStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineDiscardRectangleStateCreateFlagsEXT.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+
+  * 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
+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.txt[]
+--
+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::offset.x, slink:VkRect2D::offset.x {plus}
+slink:VkRect2D::extent.x)#, and [eq]#y~f~# is in the range
+[eq]#[slink:VkRect2D::offset.y, slink:VkRect2D::offset.y {plus}
+slink:VkRect2D::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.txt[]
+
+  * 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
+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,multiple viewports>> feature is not
+    enabled, pname:firstScissor must: be `0`
+  * [[VUID-vkCmdSetScissor-scissorCount-00594]]
+    If the <<features-multiViewport,multiple viewports>> 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.txt[]
+--
+
+
+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::offset.x,
+slink:VkRect2D::offset.x {plus} slink:VkRect2D::extent.x)#, and [eq]#y~f~#
+is in the range [eq]#[slink:VkRect2D::offset.y, slink:VkRect2D::offset.y
+{plus} slink:VkRect2D::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.txt[]
+
+  * pname:sType is the type of 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,multiple viewports>> 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.txt[]
+--
+
+[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.txt[]
+
+  * 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 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,exclusive scissor>> 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,multiple viewports>> feature is not
+    enabled, pname:firstExclusiveScissor must: be `0`
+  * [[VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-02036]]
+    If the <<features-multiViewport,multiple viewports>> 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.txt[]
+--
+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.
+
+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.
+
+
+[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.
+
+
+[[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.
+
+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 buffers, or
+by 1.0 for floating-point buffers.
+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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * 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 the comparison operator used in 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 control the 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,depth bounds testing>> 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[]
+****
+
+include::{generated}/validity/structs/VkPipelineDepthStencilStateCreateInfo.txt[]
+--
+
+[open,refpage='VkPipelineDepthStencilStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineDepthStencilStateCreateFlags.txt[]
+
+tname:VkPipelineDepthStencilStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+
+[[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_EXT_extended_dynamic_state[]
+flink:vkCmdSetDepthBoundsTestEnableEXT and
+endif::VK_EXT_extended_dynamic_state[]
+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_EXT_extended_dynamic_state[]
+[open,refpage='vkCmdSetDepthBoundsTestEnableEXT',desc='Set depth bounds test enable dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically enable or disable>> the depth
+bounds test, call:
+
+include::{generated}/api/protos/vkCmdSetDepthBoundsTestEnableEXT.txt[]
+
+  * 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
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthBoundsTestEnable
+value used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDepthBoundsTestEnableEXT-None-03349]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthBoundsTestEnableEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state[]
+
+[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.txt[]
+
+  * 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
+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
+****
+ifdef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-vkCmdSetDepthBounds-minDepthBounds-00600]]
+    Unless the `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
+    pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifndef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-vkCmdSetDepthBounds-minDepthBounds-02508]]
+    pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifdef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-vkCmdSetDepthBounds-maxDepthBounds-00601]]
+    Unless the `apiext:VK_EXT_depth_range_unrestricted` extension is enabled
+    pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+ifndef::VK_EXT_depth_range_unrestricted[]
+  * [[VUID-vkCmdSetDepthBounds-maxDepthBounds-02509]]
+    pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive
+endif::VK_EXT_depth_range_unrestricted[]
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthBounds.txt[]
+--
+
+
+[[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_EXT_extended_dynamic_state[]
+flink:vkCmdSetStencilTestEnableEXT or
+endif::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 performed is based on the elink:VkCompareOp, compare mask
+[eq]#s~c~# , and stencil reference value [eq]#s~r~# of the relevant state
+set.
+The compare mask and stencil reference value are set by either the
+slink:VkPipelineDepthStencilStateCreateInfo structure during pipeline
+creation, or by the flink:vkCmdSetStencilCompareMask and
+flink:vkCmdSetStencilReference commands respectively.
+The compare operation is set by slink:VkStencilOpState::pname:compareOp
+during pipeline creation.
+
+The stencil reference and attachment values [eq]#s~r~# and [eq]#s~a~# are
+each independently combined with the compare mask [eq]#s~c~# using a logical
+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 [eq]#A# and [eq]#B#, respectively,
+in the operation specified by 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_EXT_extended_dynamic_state[]
+flink:vkCmdSetStencilOpEXT or
+endif::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
+slink:VkPipelineDepthStencilStateCreateInfo::pname:writeMask as:
+
+  {empty}:: [eq]#s~a~ = (s~a~ & ¬s~w~) | (s~g~ & s~w~)#
+
+If there is no stencil attachment, no value is written.
+
+ifdef::VK_EXT_extended_dynamic_state[]
+
+[open,refpage='vkCmdSetStencilTestEnableEXT',desc='Set stencil test enable dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically enable or disable>> the stencil
+test, call:
+
+include::{generated}/api/protos/vkCmdSetStencilTestEnableEXT.txt[]
+
+  * 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
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:stencilTestEnable value
+used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetStencilTestEnableEXT-None-03350]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetStencilTestEnableEXT.txt[]
+--
+
+[open,refpage='vkCmdSetStencilOpEXT',desc='Set stencil operation dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the stencil operation, call:
+
+include::{generated}/api/protos/vkCmdSetStencilOpEXT.txt[]
+
+  * 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
+the graphics pipeline is created with ename:VK_DYNAMIC_STATE_STENCIL_OP_EXT
+set in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+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.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetStencilOpEXT-None-03351]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetStencilOpEXT.txt[]
+--
+
+endif::VK_EXT_extended_dynamic_state[]
+
+[open,refpage='VkStencilOpState',desc='Structure specifying stencil operation state',type='structs']
+--
+The sname:VkStencilOpState structure is defined as:
+
+include::{generated}/api/structs/VkStencilOpState.txt[]
+
+  * 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 reference value that is used in the
+    unsigned stencil comparison.
+
+include::{generated}/validity/structs/VkStencilOpState.txt[]
+--
+
+[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.txt[]
+
+  * 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
+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:VkPipelineDepthStencilStateCreateInfo::pname:compareMask value used to
+create the currently active pipeline, for both front and back faces.
+
+include::{generated}/validity/protos/vkCmdSetStencilCompareMask.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+
+--
+
+[open,refpage='VkStencilFaceFlags',desc='Bitmask of VkStencilFaceFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkStencilFaceFlags.txt[]
+
+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.txt[]
+
+  * 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
+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
+slink:VkPipelineDepthStencilStateCreateInfo::pname:writeMask value used to
+create the currently active pipeline, for both front and back faces.
+
+include::{generated}/validity/protos/vkCmdSetStencilWriteMask.txt[]
+--
+
+[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.txt[]
+
+  * 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 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.txt[]
+--
+
+[open,refpage='VkCompareOp',desc='Stencil comparison function',type='enums']
+--
+Possible values of slink:VkStencilOpState::pname:compareOp, specifying the
+stencil comparison function, are:
+
+include::{generated}/api/enums/VkCompareOp.txt[]
+
+  * ename:VK_COMPARE_OP_NEVER specifies that the test evaluates to false.
+  * ename:VK_COMPARE_OP_LESS specifies that the test evaluates [eq]#A < B#.
+  * ename:VK_COMPARE_OP_EQUAL specifies that the test evaluates [eq]#A = B#.
+  * ename:VK_COMPARE_OP_LESS_OR_EQUAL specifies that the test evaluates
+    [eq]#A {leq} B#.
+  * ename:VK_COMPARE_OP_GREATER specifies that the test evaluates [eq]#A >
+    B#.
+  * ename:VK_COMPARE_OP_NOT_EQUAL specifies that the test evaluates [eq]#A
+    {neq} B#.
+  * ename:VK_COMPARE_OP_GREATER_OR_EQUAL specifies that the test evaluates
+    [eq]#A {geq} B#.
+  * ename:VK_COMPARE_OP_ALWAYS specifies that the test evaluates to true.
+--
+
+[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.txt[]
+
+  * 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, before the sample's [eq]#z~f~# is compared to [eq]#z~a~#,
+[eq]#z~f~# is clamped to [eq]#[min(n,f),max(n,f)]#, where [eq]#n# and
+[eq]#f# are the pname:minDepth and pname:maxDepth depth range values of the
+viewport used by this fragment, respectively.
+
+If depth clamping is not enabled and [eq]#z~f~# is not in the range [eq]#[0,
+1]#
+ifdef::VK_EXT_depth_range_unrestricted[]
+and either apiext:VK_EXT_depth_range_unrestricted is not enabled, or the
+depth attachment has a fixed-point format,
+endif::VK_EXT_depth_range_unrestricted[]
+then [eq]#z~f~# is undefined: following this step.
+
+
+=== Depth Comparison
+
+If the depth test is not enabled, as specified by
+ifdef::VK_EXT_extended_dynamic_state[]
+flink:vkCmdSetDepthTestEnableEXT or
+endif::VK_EXT_extended_dynamic_state[]
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthTestEnable, then
+this step is skipped.
+
+The comparison performed is based on the elink:VkCompareOp, set by
+ifdef::VK_EXT_extended_dynamic_state[]
+flink:vkCmdSetDepthCompareOpEXT or
+endif::VK_EXT_extended_dynamic_state[]
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp during
+pipeline creation.
+[eq]#z~f~# and [eq]#z~a~# are used as [eq]#A# and [eq]#B#, 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 Buffer Writes
+
+If depth writes are enabled, as specified by
+ifdef::VK_EXT_extended_dynamic_state[]
+flink:vkCmdSetDepthWriteEnableEXT or
+endif::VK_EXT_extended_dynamic_state[]
+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_EXT_extended_dynamic_state[]
+[open,refpage='vkCmdSetDepthTestEnableEXT',desc='Set depth test enable dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically enable or disable>> the depth
+test, call:
+
+include::{generated}/api/protos/vkCmdSetDepthTestEnableEXT.txt[]
+
+  * 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 when
+the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthTestEnable value
+used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDepthTestEnableEXT-None-03352]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthTestEnableEXT.txt[]
+--
+
+[open,refpage='vkCmdSetDepthCompareOpEXT',desc='Set depth comparison operator dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the depth compare operator,
+call:
+
+include::{generated}/api/protos/vkCmdSetDepthCompareOpEXT.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded.
+  * pname:depthCompareOp specifies the depth comparison operator.
+
+This command sets the depth comparison operator for subsequent drawing
+commands when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthCompareOp value used
+to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDepthCompareOpEXT-None-03353]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthCompareOpEXT.txt[]
+--
+
+[open,refpage='vkCmdSetDepthWriteEnableEXT',desc='Set depth write enable dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the depth write enable,
+call:
+
+include::{generated}/api/protos/vkCmdSetDepthWriteEnableEXT.txt[]
+
+  * 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
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineDepthStencilStateCreateInfo::pname:depthWriteEnable value
+used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDepthWriteEnableEXT-None-03354]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthWriteEnableEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state[]
+
+
+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 that control the representative fragment
+test.
+
+The sname:VkPipelineRepresentativeFragmentTestStateCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineRepresentativeFragmentTestStateCreateInfoNV.txt[]
+
+  * pname:sType is the type of 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 specifies the code:EarlyFragmentTests
+execution mode, the representative fragment shader test has no effect, even
+if enabled.
+
+include::{generated}/validity/structs/VkPipelineRepresentativeFragmentTestStateCreateInfoNV.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineCoverageToColorStateCreateFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCoverageToColorStateCreateFlagsNV.txt[]
+
+tname:VkPipelineCoverageToColorStateCreateFlagsNV is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+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 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_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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineCoverageReductionStateCreateFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCoverageReductionStateCreateFlagsNV.txt[]
+
+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.txt[]
+
+  * 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.
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineCoverageModulationStateCreateFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCoverageModulationStateCreateFlagsNV.txt[]
+
+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.txt[]
+
+  * 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.
+--
+
+endif::VK_NV_framebuffer_mixed_samples[]
diff --git a/registry/vulkan/chapters/framebuffer.txt b/registry/vulkan/chapters/framebuffer.txt
new file mode 100644
index 0000000..c0f0820
--- /dev/null
+++ b/registry/vulkan/chapters/framebuffer.txt
@@ -0,0 +1,705 @@
+// Copyright 2015-2021 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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:logicOpEnable controls whether to apply <<framebuffer-logicop,
+    Logical Operations>>.
+  * pname:logicOp selects which logical operation to apply.
+  * pname:attachmentCount is the number of
+    sname:VkPipelineColorBlendAttachmentState elements in
+    pname:pAttachments.
+  * pname:pAttachments is a pointer to an array of per target attachment
+    states.
+  * 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>>.
+
+Each element of the pname:pAttachments array is a
+slink:VkPipelineColorBlendAttachmentState structure specifying per-target
+blending state for each individual color attachment.
+If the <<features-independentBlend,independent blending>> feature is not
+enabled on the device, all slink:VkPipelineColorBlendAttachmentState
+elements in the pname:pAttachments array must: be identical.
+
+The value of pname:attachmentCount must: be greater than the index of all
+color attachments that are not ename:VK_ATTACHMENT_UNUSED in
+sname:VkSubpassDescription::pname:pColorAttachments
+ifdef::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+or sname:VkSubpassDescription2::pname:pColorAttachments
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
+for the subpass in which this pipeline is used.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605]]
+    If the <<features-independentBlend,independent blending>> feature is not
+    enabled, all elements of pname:pAttachments must: be identical
+  * [[VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606]]
+    If the <<features-logicOp,logic operations>> 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
+****
+
+include::{generated}/validity/structs/VkPipelineColorBlendStateCreateInfo.txt[]
+--
+
+[open,refpage='VkPipelineColorBlendStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineColorBlendStateCreateFlags.txt[]
+
+tname:VkPipelineColorBlendStateCreateFlags is a bitmask type for setting a
+mask, but is currently reserved for future use.
+--
+
+[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.txt[]
+
+  * 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 use 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,dual source blending>> 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,dual source blending>> 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,dual source blending>> 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,dual source blending>> 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.txt[]
+--
+
+
+[[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.txt[]
+
+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.txt[]
+
+  * 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 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.txt[]
+--
+
+
+[[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.
+
+When using a fragment shader with dual-source blending functions, the color
+outputs are 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 result of the
+blending operation is not defined.
+
+
+[[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.txt[]
+
+<<<
+
+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 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 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 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::VK_EXT_blend_operation_advanced/advanced_blend.txt[]
+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_state2[]
+It 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.txt[]
+
+<<<
+
+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_state2[]
+[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.txt[]
+
+  * 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 when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineColorBlendStateCreateInfo::pname:logicOp value used to
+create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetLogicOpEXT-None-04867]]
+    The <<features-extendedDynamicState2LogicOp,
+    extendedDynamicState2LogicOp>> feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetLogicOpEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state2[]
+
+
+[[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 to determine
+whether the final color values [eq]#R, G, B# and [eq]#A# are written to the
+framebuffer attachment are:
+
+include::{generated}/api/enums/VkColorComponentFlagBits.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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,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,colorWriteEnable>> feature is not
+    enabled, all elements of pname:pColorWriteEnables must: be ename:VK_TRUE
+  * [[VUID-VkPipelineColorWriteCreateInfoEXT-attachmentCount-04802]]
+    pname:attachmentCount must: be equal to the pname:attachmentCount member
+    of the sname:VkPipelineColorBlendStateCreateInfo structure specified
+    during pipeline creation
+****
+
+include::{generated}/validity/structs/VkPipelineColorWriteCreateInfoEXT.txt[]
+--
+
+[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.txt[]
+
+  * 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
+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, colorWriteEnable>> feature must: be
+    enabled
+  * [[VUID-vkCmdSetColorWriteEnableEXT-attachmentCount-04804]]
+    pname:attachmentCount must: be equal to the pname:attachmentCount member
+    of the sname:VkPipelineColorBlendStateCreateInfo structure specified
+    during pipeline creation
+****
+
+include::{generated}/validity/protos/vkCmdSetColorWriteEnableEXT.txt[]
+--
+endif::VK_EXT_color_write_enable[]
diff --git a/registry/vulkan/chapters/fundamentals.txt b/registry/vulkan/chapters/fundamentals.txt
new file mode 100644
index 0000000..ba072a8
--- /dev/null
+++ b/registry/vulkan/chapters/fundamentals.txt
@@ -0,0 +1,1641 @@
+// Copyright 2015-2021 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:
+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[]
+graphics, compute, transfer and sparse memory management.
+
+[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,
+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 (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 either perform actions (draw, dispatch,
+clear, copy, query/timestamp operations, begin/end subpass operations), set
+state (bind pipelines, descriptor sets, and buffers, set dynamic state, push
+constants, set render pass/subpass state), or perform synchronization
+(set/wait events, pipeline barrier, render pass/subpass dependencies).
+Some commands perform more than one of these tasks.
+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_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_EXT_private_data[]
+ifndef::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.
+
+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 into.
+Ownership of such memory must: be released back to the application at the
+end of the duration of the command, so that the application can: alter or
+free this memory as soon as all the commands that acquired it have returned.
+
+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:
+
+  * sname:VkShaderModule
+  * sname:VkPipelineCache
+ifdef::VK_EXT_validation_cache[]
+  * sname:VkValidationCacheEXT
+endif::VK_EXT_validation_cache[]
+
+A sname:VkRenderPass
+ifdef::VK_KHR_maintenance4[]
+or sname:VkPipelineLayout
+endif::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_KHR_maintenance4[]
+A sname:VkPipelineLayout object must: not be destroyed while any command
+buffer that uses it is in the recording state.
+endif::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
+  * sname:VkQueryPool
+  * 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[]
+  * sname:VkDescriptorPool
+  * sname:VkFramebuffer
+  * sname:VkRenderPass
+  * sname:VkCommandBuffer
+  * sname:VkCommandPool
+  * sname:VkDeviceMemory
+  * 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[]
+
+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
+  * sname:VkCommandPool
+
+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 <<pipeline-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.
+  * 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.
+  * 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
+  ** sname:VkQueryPool
+  ** sname:VkBuffer
+  ** sname:VkBufferView
+  ** sname:VkImage
+  ** sname:VkImageView
+  ** sname:VkShaderModule
+  ** 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
+  ** sname:VkDescriptorPool
+  ** sname:VkFramebuffer
+  ** sname:VkRenderPass
+  ** sname:VkCommandPool
+  ** sname:VkCommandBuffer
+  ** sname:VkDeviceMemory
+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[]
+  * 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.txt[]
+
+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.txt[]
+--
+
+[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.txt[]
+--
+
+
+[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.txt[]
+--
+
+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.txt[]
+--
+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.
+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.
+
+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.txt[]
+
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+For slink:VkPipelineCache objects created with pname:flags containing
+ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, the above
+table is extended with the pname:pipelineCache parameter to
+ftext:vkCreate*Pipelines being externally synchronized.
+endif::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.txt[]
+
+In addition, there are some implicit parameters that need to be externally
+synchronized.
+For example, all pname:commandBuffer parameters that need to be externally
+synchronized imply that the pname:commandPool that was passed in when
+creating that command buffer also needs to be externally synchronized.
+The implicit parameters and their associated object are listed below.
+
+include::{generated}/hostsynctable/implicit.txt[]
+
+
+[[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, protected memory>> 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.
+Once validated, released applications should: not enable validation layers
+by default.
+
+
+[[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.
+A enumerant is valid if:
+
+  * The enumerant is defined as part of the enumerated type.
+  * The enumerant is not the special value (suffixed with
+    etext:_MAX_ENUM^1^) defined for the enumerated type.
+
+1::
+    This special value exists only to ensure that C `enum` types are 32 bits
+    in size.
+    It is not part of the API, and should: not be used by applications.
+
+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
+====
+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']
+--
+A collection of flags is represented by a bitmask using the type
+basetype:VkFlags:
+
+include::{generated}/api/basetypes/VkFlags.txt[]
+
+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.
+A bit flag is valid if:
+
+  * The bit flag is defined as part of the 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.
+  * The flag is allowed in the context in which it is being used.
+    For example, in some cases, certain bit flags or combinations of bit
+    flags are mutually exclusive.
+
+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.
+====
+--
+
+
+
+[[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 `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 "`Extension Interactions`".
+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.txt[]
+
+  * 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.txt[]
+
+  * 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 functionality or behavior added by a <<extensions, device extension>>
+to the API 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.txt[]
+
+[[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_EXT_pipeline_creation_cache_control[]
+  * ename:VK_PIPELINE_COMPILE_REQUIRED_EXT A requested pipeline creation
+    would have required compilation, but the application requested
+    compilation to not be performed.
+endif::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 exlusive full-screen access.
+    This may: occur due to implementation-dependent reasons, outside of the
+    application's control.
+endif::VK_EXT_full_screen_exclusive[]
+  * 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.
+
+[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.
+====
+
+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.
+
+--
+
+
+[[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.
+
+
+[[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.txt[]
+
+  * pname:x is the x offset.
+  * pname:y is the y offset.
+
+include::{generated}/validity/structs/VkOffset2D.txt[]
+--
+
+[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.txt[]
+
+  * pname:x is the x offset.
+  * pname:y is the y offset.
+  * pname:z is the z offset.
+
+include::{generated}/validity/structs/VkOffset3D.txt[]
+--
+
+
+=== 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.txt[]
+
+  * pname:width is the width of the extent.
+  * pname:height is the height of the extent.
+
+include::{generated}/validity/structs/VkExtent2D.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+
+=== 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.txt[]
+
+  * 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.txt[]
+--
+
+
+// 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 of ename:VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, and thus
+its pname:sType member must: equal that when 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.txt[]
+--
diff --git a/registry/vulkan/chapters/fxvertex.txt b/registry/vulkan/chapters/fxvertex.txt
new file mode 100644
index 0000000..9cecf97
--- /dev/null
+++ b/registry/vulkan/chapters/fxvertex.txt
@@ -0,0 +1,925 @@
+// Copyright 2015-2021 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
+
+Vertex shaders allow code:Location and code:Component decorations on input
+variable declarations.
+The code:Location decoration specifies which vertex input attribute is used
+to read and interpret the data that a variable will consume.
+The code:Component decoration allows the location to be more finely
+specified for scalars and vectors, down to the individual components within
+a location that are consumed.
+The components within a location are 0, 1, 2, and 3.
+A variable starting at component N will consume components N, N+1, N+2, ...
+up through its size.
+For single precision types, it is invalid if the sequence of components gets
+larger than 3.
+
+When a vertex shader input variable declared using a 16- or 32-bit scalar or
+vector data type is assigned a 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 location.
+For 16-bit and 32-bit data types, missing components are filled in with
+default values as described <<fxvertex-input-extraction,below>>.
+
+
+[[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 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 location _i_, its values are taken from consecutive
+input attributes starting with the corresponding
+sname:VkVertexInputAttributeDescription::pname:location.
+The locations and components 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.
+Input attributes which have one- or two-component 64-bit formats will
+consume a single location.
+Input attributes which have three- or four-component 64-bit formats will
+consume two consecutive locations.
+A 64-bit scalar data type will consume two components, and a 64-bit
+two-component vector data type will consume all four components available
+within a location.
+A three- or four-component 64-bit data type must: not specify a component.
+A three-component 64-bit data type will consume all four components of the
+first location and components 0 and 1 of the second location.
+This leaves components 2 and 3 available for other component-qualified
+declarations.
+A four-component 64-bit data type will consume all four components of the
+first location and all four components of the second location.
+It is invalid for a scalar or two-component 64-bit data type to specify a
+component of 1 or 3.
+
+[[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 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 location immediately following the last
+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.
+_Location aliasing_ is causing two variables to have the same location
+number.
+_Component aliasing_ is assigning the same (or overlapping) component number
+for two location aliases.
+Location aliasing is allowed only if it does not cause component aliasing.
+Further, when location aliasing, the aliases sharing the location must: all
+have the same SPIR-V floating-point component type or all have the same
+width integer-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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineVertexInputStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineVertexInputStateCreateFlags.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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]]
+    pname:format must: be allowed as a vertex buffer format, as specified by
+    the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in
+    sname:VkFormatProperties::pname:bufferFeatures returned by
+    fname:vkGetPhysicalDeviceFormatProperties
+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.txt[]
+--
+
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+[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.txt[]
+
+  * 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 when the graphics
+pipeline is created with ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkGraphicsPipelineCreateInfo::pname:pVertexInputState values used to
+create the currently active pipeline.
+
+ifdef::VK_EXT_extended_dynamic_state[]
+If the bound pipeline state object was also created with the
+ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic state
+enabled, then flink:vkCmdBindVertexBuffers2EXT can be used instead of
+fname:vkCmdSetVertexInputEXT to dynamically set the stride.
+endif::VK_EXT_extended_dynamic_state[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetVertexInputEXT-None-04790]]
+    The <<features-vertexInputDynamicState, vertexInputDynamicState>>
+    feature must: be enabled
+  * [[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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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,
+    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,
+    vertexAttributeInstanceRateZeroDivisor>> feature is not enabled,
+    pname:divisor must: not be `0`
+  * [[VUID-VkVertexInputBindingDescription2EXT-divisor-04799]]
+    If the <<features-vertexAttributeInstanceRateDivisor,
+    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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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]]
+    pname:format must: be allowed as a vertex buffer format, as specified by
+    the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in
+    sname:VkFormatProperties::pname:bufferFeatures returned by
+    fname:vkGetPhysicalDeviceFormatProperties
+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.txt[]
+--
+endif::VK_EXT_vertex_input_dynamic_state[]
+
+[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.txt[]
+
+  * 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,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,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.txt[]
+--
+
+ifdef::VK_EXT_extended_dynamic_state[]
+[open,refpage='vkCmdBindVertexBuffers2EXT',desc='Bind vertex buffers to a command buffer and dynamically set strides',type='protos']
+--
+Alternatively, to bind vertex buffers, along with their sizes and strides,
+to a command buffer for use in subsequent drawing commands, call:
+
+include::{generated}/api/protos/vkCmdBindVertexBuffers2EXT.txt[]
+
+  * 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].
+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,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 when the graphics pipeline is created
+with ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+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[]
+If the bound pipeline state object was also created with the
+ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then
+flink:vkCmdSetVertexInputEXT can: be used instead of
+fname:vkCmdBindVertexBuffers2EXT to set the stride.
+endif::VK_EXT_vertex_input_dynamic_state[]
+
+.Valid Usage
+****
+  * [[VUID-vkCmdBindVertexBuffers2EXT-firstBinding-03355]]
+    pname:firstBinding must: be less than
+    sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-vkCmdBindVertexBuffers2EXT-firstBinding-03356]]
+    The sum of pname:firstBinding and pname:bindingCount must: be less than
+    or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
+  * [[VUID-vkCmdBindVertexBuffers2EXT-pOffsets-03357]]
+    All elements of pname:pOffsets must: be less than the size of the
+    corresponding element in pname:pBuffers
+  * [[VUID-vkCmdBindVertexBuffers2EXT-pSizes-03358]]
+    If pname:pSizes is not `NULL`, all elements of pname:pOffsets plus
+    pname:pSizes must: be less than or equal to the size of the
+    corresponding element in pname:pBuffers
+  * [[VUID-vkCmdBindVertexBuffers2EXT-pBuffers-03359]]
+    All elements of pname:pBuffers must: have been created with the
+    ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag
+  * [[VUID-vkCmdBindVertexBuffers2EXT-pBuffers-03360]]
+    Each element of pname:pBuffers that is non-sparse must: be bound
+    completely and contiguously to a single sname:VkDeviceMemory object
+  * [[VUID-vkCmdBindVertexBuffers2EXT-pBuffers-04111]]
+    If the <<features-nullDescriptor,nullDescriptor>> feature is not
+    enabled, all elements of pname:pBuffers must: not be
+    dlink:VK_NULL_HANDLE
+ifdef::VK_EXT_robustness2[]
+  * [[VUID-vkCmdBindVertexBuffers2EXT-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-vkCmdBindVertexBuffers2EXT-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-vkCmdBindVertexBuffers2EXT-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/vkCmdBindVertexBuffers2EXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state[]
+
+
+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
+<<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.txt[]
+
+  * pname:sType is the type of 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, which
+    specifies the divisor value for each binding.
+
+include::{generated}/validity/structs/VkPipelineVertexInputDivisorStateCreateInfoEXT.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+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 for
+    fname:vkCmdDrawIndexed), and let code:instanceIndex be the instance
+    number of the draw (a value between pname:firstInstance and
+    pname:firstInstance+pname:instanceCount).
+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)
+    vertexOffset = vertexIndex * bindingDesc.stride;
+else
+ifndef::VK_EXT_vertex_attribute_divisor[]
+    vertexOffset = instanceIndex * bindingDesc.stride;
+endif::VK_EXT_vertex_attribute_divisor[]
+ifdef::VK_EXT_vertex_attribute_divisor[]
+    if (divisor == 0)
+        vertexOffset = firstInstance * bindingDesc.stride;
+    else
+        vertexOffset = (firstInstance + ((instanceIndex - firstInstance) / divisor)) * bindingDesc.stride;
+endif::VK_EXT_vertex_attribute_divisor[]
+
+attribAddress = bufferBindingAddress + vertexOffset + 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 base
+type of the format; the base type of the format must: match the base 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/registry/vulkan/chapters/geometry.txt b/registry/vulkan/chapters/geometry.txt
new file mode 100644
index 0000000..c1f497d
--- /dev/null
+++ b/registry/vulkan/chapters/geometry.txt
@@ -0,0 +1,234 @@
+// Copyright 2015-2021 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 that specifies 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 to that 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 to that 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/registry/vulkan/chapters/initialization.txt b/registry/vulkan/chapters/initialization.txt
new file mode 100644
index 0000000..59cd710
--- /dev/null
+++ b/registry/vulkan/chapters/initialization.txt
@@ -0,0 +1,504 @@
+// Copyright 2015-2021 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 with the command:
+
+include::{generated}/api/protos/vkGetInstanceProcAddr.txt[]
+
+  * 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:
+ifdef::VK_VERSION_1_2[]
+| `NULL`           | flink:vkGetInstanceProcAddr                  | fp^5^
+endif::VK_VERSION_1_2[]
+| `NULL`           | _global command_^2^                          | 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::
+    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.txt[]
+--
+
+[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 fname: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 with the command:
+
+include::{generated}/api/protos/vkGetDeviceProcAddr.txt[]
+
+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         | core device-level dispatchable command^2^ | fp^3^
+| device         | enabled extension device-level dispatchable command^2^ | 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::
+    In this function, device-level excludes all physical-device-level
+    commands.
+
+3::
+    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.txt[]
+--
+
+[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.txt[]
+--
+
+
+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
+
+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[]
+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.txt[]
+--
+
+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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * 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.
+
+.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[]
+****
+endif::VK_EXT_debug_report,VK_EXT_debug_utils[]
+
+include::{generated}/validity/structs/VkInstanceCreateInfo.txt[]
+--
+
+[open,refpage='VkInstanceCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkInstanceCreateFlags.txt[]
+
+tname:VkInstanceCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+ifdef::VK_EXT_validation_flags[]
+include::VK_EXT_validation_flags.txt[]
+endif::VK_EXT_validation_flags[]
+
+ifdef::VK_EXT_validation_features[]
+include::VK_EXT_validation_features.txt[]
+endif::VK_EXT_validation_features[]
+
+[open,refpage='VkApplicationInfo',desc='Structure specifying application information',type='structs']
+--
+The sname:VkApplicationInfo structure is defined as:
+
+include::{generated}/api/structs/VkApplicationInfo.txt[]
+
+  * pname:sType is the type of 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.
+    Only the major and minor versions of the instance must: match those
+    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.
+
+[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.
+====
+
+Implicit layers must: be disabled if they do not support a version at least
+as high as pname:apiVersion.
+See the <<LoaderInterfaceArchitecture, "`Architecture of the Vulkan Loader
+Interfaces`">> document for additional information.
+
+[NOTE]
+.Note
+====
+Providing a `NULL` slink:VkInstanceCreateInfo::pname:pApplicationInfo or
+providing an pname:apiVersion of 0 is equivalent to providing an
+pname:apiVersion of `VK_MAKE_API_VERSION(0,1,0,0)`.
+====
+endif::VK_VERSION_1_1[]
+
+.Valid Usage
+****
+  * [[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
+****
+
+include::{generated}/validity/structs/VkApplicationInfo.txt[]
+--
+
+[open,refpage='vkDestroyInstance',desc='Destroy an instance of Vulkan',type='protos']
+--
+To destroy an instance, call:
+
+include::{generated}/api/protos/vkDestroyInstance.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyInstance.txt[]
+--
diff --git a/registry/vulkan/chapters/interfaces.txt b/registry/vulkan/chapters/interfaces.txt
new file mode 100755
index 0000000..2b8ba40
--- /dev/null
+++ b/registry/vulkan/chapters/interfaces.txt
@@ -0,0 +1,4401 @@
+// Copyright 2015-2021 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:Vk*PipelineCreateInfo 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>>
+  * <<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>>
+
+Interface definitions make use of the following SPIR-V decorations:
+
+  * code:DescriptorSet and code:Binding
+  * code:Location, code:Component, and code:Index
+  * code:Flat, code:NoPerspective, code:Centroid, and code:Sample
+  * code:Block and code:BufferBlock
+  * code:InputAttachmentIndex
+  * code:Offset, code:ArrayStride, and code:MatrixStride
+  * code:BuiltIn
+ifdef::VK_NV_geometry_shader_passthrough[]
+  * <<geometry-passthrough-passthrough,code:PassthroughNV>>
+endif::VK_NV_geometry_shader_passthrough[]
+
+
+This specification describes valid uses for Vulkan of these 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 Private and
+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.
+
+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 SPIR-V numerical types or, recursively, composite types of
+such types.
+ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
+By default, the components of such types have a width of 32 or 64 bits.
+If an implementation supports
+<<features-storageInputOutput16,storageInputOutput16>>, components can: also
+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:
+  ** <<shaders-interpolation-decorations,Interpolation decorations>>
+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`
+  * 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_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_KHR_maintenance4[]
+ifdef::VK_NV_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[]
+  ** 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).
+====
+
+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 location assignments for user-defined variables and
+how many locations 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
+locations 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,components>> within these vector
+locations.
+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
+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 locations.
+
+If a declared input or output is an array of size _n_ and each element takes
+_m_ locations, it will be assigned _m_ {times} _n_ consecutive locations
+starting with the location specified.
+
+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 locations starting with
+the location specified.
+The number of locations 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 locations in
+declaration order, starting from the first member, which is assigned the
+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 locations 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 location, either explicitly or implicitly.
+Any two outputs listed as operands on the same code:OpEntryPoint must: not
+be assigned the same location, either explicitly or implicitly.
+
+The number of input and output locations available for a shader input or
+output interface are 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
+locations 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_NV_mesh_shader[]
+// we forgot to add maxMeshOutputComponents
+| mesh output                   | pname:maxFragmentInputComponents / 4
+endif::VK_NV_mesh_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 components within
+a location that are consumed.
+The components within a location are 0, 1, 2, and 3.
+A variable or block member starting at component N will consume components
+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 components gets larger than 3.
+A scalar 64-bit type will consume two of these components in sequence, and a
+two-component 64-bit vector type will consume all four components available
+within a location.
+A three- or four-component 64-bit vector type must: not specify a
+code:Component decoration.
+A three-component 64-bit vector type will consume all four components of the
+first location and components 0 and 1 of the second location.
+This leaves components 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.
+
+
+[[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 locations 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_KHR_dynamic_rendering[]
+the element of slink:VkRenderingInfoKHR::pname:pColorAttachments with a
+pname:location equal to _i_.
+When using render pass objects, it is associated with
+endif::VK_KHR_dynamic_rendering[]
+the color attachment indicated by 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 locations is given by the
+pname:maxFragmentOutputAttachments member of the
+sname:VkPhysicalDeviceLimits structure.
+
+Components of the output variables are assigned as described in
+<<interfaces-iointerfaces-components,Component Assignment>>.
+Output components 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 location, they must: have the
+same underlying type (floating-point or integer).
+The input values to blending or color attachment writes are undefined: for
+components which do not correspond to a fragment shader output.
+
+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.
+
+No _component aliasing_ of output variables is allowed, that is there must:
+not be two output variables which have the same location, component, and
+index, 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.
+
+
+[[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 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.
+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 basic data type (floating-point, integer, unsigned integer) of the
+subpass input must: match the basic format of the corresponding input
+attachment, or the values of subpass loads from these variables are
+undefined:.
+
+See <<descriptorsets-inputattachment>> for more details.
+
+
+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 which contain data tracked for the entire lifetime of the
+   ray.
+ * Hit attributes which contain 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_KHR_format_feature_flags2[]
+  * For code:OpImageWrite, if the image format supports
+    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR and the
+    shader module declares the code:StorageImageWriteWithoutFormat
+    capability.
+endif::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_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_KHR
+    and the shader module declares the code:StorageImageReadWithoutFormat
+    capability.
+endif::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_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_EXT.
+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_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_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_EXT_inline_uniform_block[]
+| inline uniform block   | ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
+endif::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[]
+|====
+
+[[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_EXT_inline_uniform_block[]
+| inline uniform block
+        | code:Uniform | code:OpTypeStruct
+        | code:Block, code:Offset, (code:ArrayStride), (code:MatrixStride)
+endif::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[]
+|====
+
+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_VALVE_mutable_descriptor_type[]
+The ename:VK_DESCRIPTOR_TYPE_MUTABLE_VALVE 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:VkMutableDescriptorTypeListVALVE.
+If multiple descriptor types in slink:VkMutableDescriptorTypeListVALVE map
+to the same resource limit, only one descriptor is consumed for purposes of
+computing resource limits.
+endif::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://www.khronos.org/registry/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
+.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
+.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_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_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://www.khronos.org/registry/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.
+
+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 or matrix 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.
+
+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 row-major matrix of [eq]#C# columns has a base alignment equal to the
+    base alignment of a vector of [eq]#C# matrix components.
+  * A column-major matrix has a base alignment equal to the base alignment
+    of the matrix column type.
+
+The _extended alignment_ of the type of an code:OpTypeStruct member is
+similarly defined as follows:
+
+  * A scalar, vector or matrix 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.
+
+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 or an array and the next multiple of the alignment of
+    that structure or array.
+
+[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[]
+[[interfaces-builtin-variables-barycoordnv]]
+[open,refpage='BaryCoordNV',desc='Barycentric coordinates of a fragment',type='builtins']
+--
+:refpage: BaryCoordNV
+
+code:BaryCoordNV::
+
+The code:BaryCoordNV 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}-BaryCoordNV-04154]]
+    The code:BaryCoordNV decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordNV-04155]]
+    The variable decorated with code:BaryCoordNV must: be declared using the
+    code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordNV-04156]]
+    The variable decorated with code:BaryCoordNV must: be declared as a
+    three-component vector of 32-bit floating-point values
+****
+--
+endif::VK_NV_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[]
+[[interfaces-builtin-variables-barycoordnoperspnv]]
+[open,refpage='BaryCoordNoPerspNV',desc='Barycentric coordinates of a fragment in screen-space',type='builtins']
+--
+:refpage: BaryCoordNoPerspNV
+
+code:BaryCoordNoPerspNV::
+
+The code:BaryCoordNoPerspNV 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}-BaryCoordNoPerspNV-04160]]
+    The code:BaryCoordNoPerspNV decoration must: be used only within the
+    code:Fragment {ExecutionModel}
+  * [[VUID-{refpage}-BaryCoordNoPerspNV-04161]]
+    The variable decorated with code:BaryCoordNoPerspNV must: be declared
+    using the code:Input {StorageClass}
+  * [[VUID-{refpage}-BaryCoordNoPerspNV-04162]]
+    The variable decorated with code:BaryCoordNoPerspNV must: be declared as
+    a three-component vector of 32-bit floating-point values
+****
+--
+endif::VK_NV_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[]
+
+[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 <<pipeline-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: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: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[]
+
+[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: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: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_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 drawing command that invoked the current
+ifdef::VK_NV_mesh_shader[]
+task, mesh, or
+endif::VK_NV_mesh_shader[]
+vertex shader invocation.
+For _indirect drawing commands_, code:DrawIndex begins at zero and
+increments by one for each drawing command executed.
+The number of drawing commands 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 command.
+Otherwise
+endif::VK_EXT_multi_draw[]
+code:DrawIndex is always zero.
+code:DrawIndex is dynamically uniform.
+
+ifdef::VK_NV_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[]
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-DrawIndex-04207]]
+    The code:DrawIndex decoration must: be used only within the code:Vertex,
+    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[]
+
+[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_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[]
+
+
+[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[]
+[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[]
+
+[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: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
+****
+--
+
+[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[]
+
+[[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
+****
+--
+
+[[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[]
+
+[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[]
+
+[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::
+
+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[]
+mesh,
+endif::VK_NV_mesh_shader[]
+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
+<<pipeline-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
+<<pipeline-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 <<pipeline-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_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:MeshNV,
+    code:Vertex, code:TessellationEvaluation, code:Geometry, or
+    code:Fragment {ExecutionModel}
+ifdef::VK_VERSION_1_2[]
+  * [[VUID-{refpage}-Layer-04273]]
+    If the <<features-shaderOutputLayer,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: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
+****
+--
+
+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[]
+
+[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_NV_mesh_shader[]
+task, mesh, or
+endif::VK_NV_mesh_shader[]
+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: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
+****
+--
+
+[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: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[]
+[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: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[]
+
+[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 {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[]
+
+[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
+****
+--
+
+[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
+****
+--
+
+[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.
+The value written to the variable decorated with code:PointSize by the last
+<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> in the pipeline is used as the framebuffer-space size of points
+produced by rasterization.
+
+[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:MeshNV,
+    code:Vertex, code:TessellationControl, code:TessellationEvaluation, or
+    code:Geometry {ExecutionModel}
+  * [[VUID-{refpage}-PointSize-04315]]
+    The variable decorated with code:PointSize within the 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
+****
+--
+
+[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 <<pipeline-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:MeshNV,
+    code:Vertex, code:TessellationControl, code:TessellationEvaluation, or
+    code:Geometry {ExecutionModel}
+  * [[VUID-{refpage}-Position-04319]]
+    The variable decorated with code:Position within 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
+    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
+<<pipeline-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
+<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> is available as an input in the subsequent
+<<pipeline-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[]
+
+[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[]
+mesh shader if a mesh shader is present, or the primitive index written by
+the
+endif::VK_NV_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[]
+mesh shader or
+endif::VK_NV_mesh_shader[]
+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,]
+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: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:MeshNV
+    {ExecutionModel} and a variable decorated with code:PrimitiveId is read
+    from code:Fragment shader, then the 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: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: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
+****
+--
+
+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_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
+<<pipeline-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
+<<pipeline-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: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
+****
+--
+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 given by 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[]
+
+[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
+****
+--
+
+[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[]
+[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[]
+[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: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].
+
+[NOTE]
+.Note
+====
+There is no direct relationship between code:SubgroupLocalInvocationId and
+code:LocalInvocationId or code:LocalInvocationIndex.
+ifdef::VK_EXT_subgroup_size_control[]
+If the pipeline was created with
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT,
+applications can compute their own local invocation index to serve the same
+purpose:
+
+[eq]#index = code:SubgroupLocalInvocationId + code:SubgroupId *
+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_EXT_subgroup_size_control[]
+====
+
+.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_EXT_subgroup_size_control[]
+If the pipeline was created with the
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
+flag set, the code:SubgroupSize decorated variable will contain the subgroup
+size for each subgroup that gets dispatched.
+This value must: be between <<limits-min-subgroup-size,minSubgroupSize>> and
+<<limits-max-subgroup-size,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:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure, the
+code:SubgroupSize decorated variable will match
+<<pipelines-required-subgroup-size, pname:requiredSubgroupSize>>.
++
+If the pipeline was not created with the
+ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
+flag set and no slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+structure was chained, the
+endif::VK_EXT_subgroup_size_control[]
+ifndef::VK_EXT_subgroup_size_control[]
+The
+endif::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.
+
+.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[]
+
+[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
+****
+--
+
+[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, which controls 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
+****
+--
+
+[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, which controls 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
+****
+--
+
+[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_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: not be used within the
+    code:GLCompute {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[]
+mesh,
+endif::VK_NV_mesh_shader[]
+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
+_<<pipeline-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
+<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> shader entry point's interface does not include a variable decorated
+with code:ViewportIndex, then the first viewport is used.
+If a <<pipeline-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.
+
+.Valid Usage
+****
+  * [[VUID-{refpage}-ViewportIndex-04404]]
+    The code:ViewportIndex decoration must: be used only within the
+    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,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: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
+****
+--
+
+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
+_<<pipeline-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
+<<pipeline-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 <<pipeline-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
+<<pipeline-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
+<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>> is not available as an input in the subsequent
+<<pipeline-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[]
+
+[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: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
+****
+--
+
+[open,refpage='WorkgroupSize',desc='Size of a workgroup',type='builtins']
+--
+:refpage: WorkgroupSize
+
+code:WorkgroupSize::
+
+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_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: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 given by 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 given by 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[]
diff --git a/registry/vulkan/chapters/introduction.txt b/registry/vulkan/chapters/introduction.txt
new file mode 100644
index 0000000..a7e2e1b
--- /dev/null
+++ b/registry/vulkan/chapters/introduction.txt
@@ -0,0 +1,169 @@
+// Copyright 2015-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+
+[[introduction]]
+= Introduction
+
+This document, referred to as the "`Vulkan Specification`" or just the
+"`Specification`" hereafter, describes the Vulkan Application Programming
+Interface (API).
+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.
+
+The canonical version of the Specification is available in the official
+https://www.khronos.org/registry/vulkan/[Vulkan Registry]
+(https://www.khronos.org/registry/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).
+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://www.khronos.org/registry/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://www.khronos.org/registry/spir-v/ .
+
+[[spirv-spec]] John Kessenich, Boaz Ouriel, and Raun Krisch.
+_SPIR-V Specification, Version 1.5, Revision 3, Unified_ (April 24, 2020).
+https://www.khronos.org/registry/spir-v/ .
+
+[[vulkan-registry]] Jon Leech.
+_The Khronos Vulkan API Registry_.
+https://www.khronos.org/registry/vulkan/specs/1.2/registry.html .
+
+[[vulkan-styleguide]] Jon Leech and Tobias Hector.
+_Vulkan Documentation and Extensions: Procedures and Conventions_.
+https://www.khronos.org/registry/vulkan/specs/1.2/styleguide.html .
+
+[[LoaderInterfaceArchitecture]]
+_Architecture of the Vulkan Loader Interfaces_ (October, 2021).
+https://github.com/KhronosGroup/Vulkan-Loader/blob/master/docs/LoaderInterfaceArchitecture.md
+.
+
diff --git a/registry/vulkan/chapters/limits.txt b/registry/vulkan/chapters/limits.txt
new file mode 100644
index 0000000..2682910
--- /dev/null
+++ b/registry/vulkan/chapters/limits.txt
@@ -0,0 +1,3873 @@
+// Copyright 2015-2021 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.txt[]
+
+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.
+  * [[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,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.
+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.
+    (This is equivalent to using the GLSL std430 layout rules.)
+  * [[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_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_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,fullDrawIndexUint32>>.
+  * [[limits-maxDrawIndirectCount]] pname:maxDrawIndirectCount is the
+    maximum draw count that is supported for indirect draw calls.
+    See <<features-multiDrawIndirect,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>>.
+  * [[limits-minTexelBufferOffsetAlignment]]
+    pname:minTexelBufferOffsetAlignment is the minimum required: alignment,
+    in bytes, for the pname:offset member of the
+    slink:VkBufferViewCreateInfo structure for texel buffers.
+ifdef::VK_EXT_texel_buffer_alignment[]
+    If <<features-texelBufferAlignment,texelBufferAlignment>> is enabled,
+    this limit is equivalent to the maximum of the
+    <<limits-uniformTexelBufferOffsetAlignmentBytes,
+    pname:uniformTexelBufferOffsetAlignmentBytes>> and
+    <<limits-storageTexelBufferOffsetAlignmentBytes,
+    pname:storageTexelBufferOffsetAlignmentBytes>> members of
+    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT, but smaller
+    alignment is optionally: allowed by
+    <<limits-storageTexelBufferOffsetSingleTexelAlignment,
+    pname:storageTexelBufferOffsetSingleTexelAlignment>> and
+    <<limits-uniformTexelBufferOffsetSingleTexelAlignment,
+    pname:uniformTexelBufferOffsetSingleTexelAlignment>>.
+    If <<features-texelBufferAlignment,texelBufferAlignment>> is not
+    enabled,
+endif::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.
+  * [[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.
+  * [[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.
+  * [[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 that specifies 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_KHR_copy_commands2[]
+    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+    flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage,
+    flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer.
+endif::VK_KHR_copy_commands2[]
+    The per texel alignment requirements are enforced, but applications
+    should: use the optimal alignment for optimal performance and power use.
+  * [[limits-optimalBufferCopyRowPitchAlignment]]
+    pname:optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch
+    alignment in bytes for
+ifndef::VK_KHR_copy_commands2[]
+    flink:vkCmdCopyBufferToImage and flink:vkCmdCopyImageToBuffer.
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+    flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyBufferToImage,
+    flink:vkCmdCopyImageToBuffer2KHR, and flink:vkCmdCopyImageToBuffer.
+endif::VK_KHR_copy_commands2[]
+    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.
+  * [[limits-nonCoherentAtomSize]] pname:nonCoherentAtomSize is the size and
+    alignment in bytes that bounds concurrent access to
+    <<memory-device-hostaccess, host-mapped device memory>>.
+
+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.txt[]
+--
+
+
+[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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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 created with
+    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set.
+
+:refpage: VkPhysicalDevicePushDescriptorPropertiesKHR
+include::{chapters}/limits.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePushDescriptorPropertiesKHR.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_multiview[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMultiviewPropertiesKHR.txt[]
+endif::VK_KHR_multiview[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiviewProperties.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_shader_float_controls[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[]
+endif::VK_KHR_shader_float_controls[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFloatControlsProperties.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_shader_float_controls[]
+or the equivalent
+
+include::{generated}/api/enums/VkShaderFloatControlsIndependenceKHR.txt[]
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDiscardRectanglePropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSampleLocationsPropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDevicePointClippingPropertiesKHR.txt[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePointClippingProperties.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[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.txt[]
+--
+
+[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.txt[]
+
+  * [[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.txt[]
+
+tname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or
+more elink:VkSubgroupFeatureFlagBits.
+--
+
+ifdef::VK_EXT_subgroup_size_control[]
+[open,refpage='VkPhysicalDeviceSubgroupSizeControlPropertiesEXT',desc='Structure describing the control subgroup size properties of an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-min-subgroup-size]] 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,subgroupSize>>.
+  * [[limits-max-subgroup-size]] 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,subgroupSize>>.
+  * [[limits-max-subgroups-per-workgroup]]
+    pname:maxComputeWorkgroupSubgroups is the maximum number of subgroups
+    supported by the implementation within a workgroup.
+  * [[limits-required-subgroup-size-stages]]
+    pname:requiredSubgroupSizeStages is a bitfield of what shader stages
+    support having a required subgroup size specified.
+
+:refpage: VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
+include::{chapters}/limits.txt[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/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.txt[]
+--
+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.txt[]
+
+ifdef::VK_EXT_sampler_filter_minmax[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT.txt[]
+endif::VK_EXT_sampler_filter_minmax[]
+
+  * pname:sType is the type of 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.txt[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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceProtectedMemoryProperties.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_maintenance3[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance3PropertiesKHR.txt[]
+endif::VK_KHR_maintenance3[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMaintenance3Properties.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance3[]
+
+ifdef::VK_KHR_maintenance4[]
+[open,refpage='VkPhysicalDeviceMaintenance4PropertiesKHR',desc='Structure describing various implementation-defined properties introduced with VK_KHR_maintenance4',type='structs']
+--
+The sname:VkPhysicalDeviceMaintenance4PropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxBufferSize]] pname:maxBufferSize is the maximum size
+    sname:VkBuffer that can: be created.
+
+:refpage: VkPhysicalDeviceMaintenance4PropertiesKHR
+include::{chapters}/limits.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMaintenance4PropertiesKHR.txt[]
+--
+endif::VK_KHR_maintenance4[]
+
+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.txt[]
+
+  * pname:sType is the type of 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_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_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_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_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 multi-view
+    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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMeshShaderPropertiesNV.txt[]
+--
+endif::VK_NV_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.txt[]
+
+ifdef::VK_EXT_descriptor_indexing[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDescriptorIndexingPropertiesEXT.txt[]
+endif::VK_EXT_descriptor_indexing[]
+
+  * pname:sType is the type of 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 in 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 level of detail 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDescriptorIndexingProperties.txt[]
+--
+endif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
+
+ifdef::VK_EXT_inline_uniform_block[]
+[open,refpage='VkPhysicalDeviceInlineUniformBlockPropertiesEXT',desc='Structure describing inline uniform block properties that can be supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceInlineUniformBlockPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-maxInlineUniformBlockSize]] pname:maxInlineUniformBlockSize is
+    the maximum size in bytes of an <<descriptorsets-inlineuniformblock,
+    inline uniform block>> binding.
+  * [[limits-maxPerStageDescriptorInlineUniformBlocks]]
+    pname:maxPerStageDescriptorInlineUniformBlock 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_EXT 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[]
+  * [[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[]
+  * [[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_EXT 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[]
+  * [[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[]
+
+:refpage: VkPhysicalDeviceInlineUniformBlockPropertiesEXT
+include::{chapters}/limits.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceInlineUniformBlockPropertiesEXT.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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 which specifies 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.txt[]
+--
+endif::VK_EXT_fragment_density_map[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.txt[]
+--
+endif::VK_EXT_fragment_density_map2[]
+
+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.txt[]
+
+  * pname:sType is the type of 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 buffers).
+    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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderCorePropertiesAMD.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderCoreProperties2AMD.txt[]
+--
+
+[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.txt[]
+--
+
+[open,refpage='VkShaderCorePropertiesFlagsAMD',desc='Bitmask of VkShaderCorePropertiesFlagBitsAMD',type='flags',xrefs='VkPhysicalDeviceShaderCoreProperties2AMD VkShaderCorePropertiesFlagBitsAMD']
+--
+include::{generated}/api/flags/VkShaderCorePropertiesFlagsAMD.txt[]
+
+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.txt[]
+
+ifdef::VK_KHR_depth_stencil_resolve[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceDepthStencilResolvePropertiesKHR.txt[]
+endif::VK_KHR_depth_stencil_resolve[]
+
+  * pname:sType is the type of 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.
+    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.
+    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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDepthStencilResolveProperties.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+
+ifdef::VK_KHR_performance_query[]
+include::VK_KHR_performance_query/props.txt[]
+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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-shading-rate-texel-size]] pname:shadingRateTexelSize indicates
+    the width and height of the portion of the framebuffer corresponding to
+    each texel in the shading rate image.
+  * [[limits-shading-rate-palette-size]] pname:shadingRatePaletteSize
+    indicates the maximum number of palette entries supported for the
+    shading rate image.
+  * [[limits-shading-rate-max-coarse-samples]]
+    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.txt[tag=limits_desc]
+
+These properties are related to the <<primsrast-shading-rate-image, shading
+rate image>> feature.
+
+include::{generated}/validity/structs/VkPhysicalDeviceShadingRateImagePropertiesNV.txt[]
+--
+endif::VK_NV_shading_rate_image[]
+
+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.txt[]
+
+  * pname:sType is the type of 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
+    <<pipeline-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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTransformFeedbackPropertiesEXT.txt[]
+--
+endif::VK_EXT_transform_feedback[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.
+
+:refpage: VkPhysicalDeviceRayTracingPropertiesNV
+include::{chapters}/limits.txt[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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * 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: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.
+
+:refpage: VkPhysicalDeviceAccelerationStructurePropertiesKHR
+include::{chapters}/limits.txt[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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.
+  * pname:maxRayHitAttributeSize is the maximum size in bytes for a ray
+    attribute structure
+
+:refpage: VkPhysicalDeviceRayTracingPipelinePropertiesKHR
+include::{chapters}/limits.txt[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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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: VkPhysicalDeviceCooperativeMatrixPropertiesNV
+include::{chapters}/limits.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCooperativeMatrixPropertiesNV.txt[]
+--
+endif::VK_NV_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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.txt[]
+--
+endif::VK_NV_shader_sm_builtins[]
+
+ifdef::VK_EXT_texel_buffer_alignment[]
+[open,refpage='VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT',desc='Structure describing the texel buffer alignment requirements supported by an implementation',type='structs']
+--
+The sname:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * [[limits-storageTexelBufferOffsetAlignmentBytes]]
+    pname:storageTexelBufferOffsetAlignmentBytes is a byte alignment that is
+    sufficient for a storage texel buffer of any format.
+  * [[limits-storageTexelBufferOffsetSingleTexelAlignment]]
+    pname:storageTexelBufferOffsetSingleTexelAlignment indicates whether
+    single texel alignment is sufficient for a storage texel buffer of any
+    format.
+  * [[limits-uniformTexelBufferOffsetAlignmentBytes]]
+    pname:uniformTexelBufferOffsetAlignmentBytes is a byte alignment that is
+    sufficient for a uniform texel buffer of any format.
+  * [[limits-uniformTexelBufferOffsetSingleTexelAlignment]]
+    pname:uniformTexelBufferOffsetSingleTexelAlignment indicates whether
+    single texel alignment is sufficient for a uniform texel buffer of any
+    format.
+
+:refpage: VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
+include::{chapters}/limits.txt[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/VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT.txt[]
+--
+endif::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.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceTimelineSemaphorePropertiesKHR.txt[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceTimelineSemaphoreProperties.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceLineRasterizationPropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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
+    <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled.
+    This value is 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
+    <<features-robustBufferAccess2,pname:robustBufferAccess2>> is enabled.
+    This value is a power of two in the range [1, 256].
+
+:refpage: VkPhysicalDeviceRobustness2PropertiesEXT
+include::{chapters}/limits.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceRobustness2PropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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:maxIndirectCommandsLayoutTokenCount 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
+    sname:VkIndirectCommandsLayoutTokenNV.
+  * pname:maxIndirectCommandsStreamStride is the maximum stream stride in
+    slink:VkIndirectCommandsLayoutCreateInfoNV.
+  * pname:minSequenceCountBufferOffsetAlignment is the minimum alignment for
+    memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV.
+  * pname:minSequenceIndexBufferOffsetAlignment is the minimum alignment for
+    memory addresses which can: be used in sname:VkGeneratedCommandsInfoNV.
+  * pname:minIndirectCommandsBufferOffsetAlignment is the minimum alignment
+    for memory addresses used in sname:VkIndirectCommandsStreamNV, and as
+    preprocess buffer in sname:VkGeneratedCommandsInfoNV.
+
+:refpage: VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
+include::{chapters}/limits.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.
+
+:refpage: VkPhysicalDevicePortabilitySubsetPropertiesKHR
+include::{chapters}/limits.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDevicePortabilitySubsetPropertiesKHR.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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 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.txt[tag=limits_desc]
+
+These properties are related to <<primsrast-fragment-shading-rate, fragment
+shading rates>>.
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+These properties are related to <<primsrast-fragment-shading-rate, fragment
+shading rates>>.
+
+include::{generated}/validity/structs/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.txt[]
+--
+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.txt[]
+
+  * [[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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceCustomBorderColorPropertiesEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceProvokingVertexPropertiesEXT.txt[]
+--
+endif::VK_EXT_provoking_vertex[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.txt[]
+--
+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.txt[]
+
+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: VkPhysicalDeviceMultiDrawPropertiesPropertiesEXT
+include::{chapters}/limits.txt[tag=limits_desc]
+
+include::{generated}/validity/structs/VkPhysicalDeviceMultiDrawPropertiesEXT.txt[]
+--
+
+endif::VK_EXT_multi_draw[]
+
+[[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                 | -
+| 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_KHR_maintenance4[]
+| basetype:VkDeviceSize    | pname:maxBufferSize                        | `<<features-maintenance4,pname:maintenance4>>`
+endif::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_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            | pname:maxDrawMeshTasksCount               | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxTaskWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxTaskWorkGroupSize                | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxTaskTotalMemorySize              | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxTaskOutputCount                  | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxMeshWorkGroupInvocations         | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxMeshWorkGroupSize                | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxMeshTotalMemorySize              | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxMeshOutputVertices               | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxMeshOutputPrimitives             | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:maxMeshMultiviewViewCount           | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:meshOutputPerVertexGranularity      | `apiext:VK_NV_mesh_shader`
+| code:uint32_t            | pname:meshOutputPerPrimitiveGranularity   | `apiext:VK_NV_mesh_shader`
+endif::VK_NV_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         | `apiext:VK_EXT_fragment_density_map`
+| slink:VkExtent2D         | pname:maxFragmentDensityTexelSize         | `apiext:VK_EXT_fragment_density_map`
+| basetype:VkBool32        | pname:fragmentDensityInvocations          | `apiext:VK_EXT_fragment_density_map`
+endif::VK_EXT_fragment_density_map[]
+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_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_HUAWEI_subpass_shading[]
+| code:uint32_t                 | pname:maxSubpassShadingWorkgroupSizeAspectRatio | `<<features-subpassShading,pname:subpassShading>>`
+endif::VK_HUAWEI_subpass_shading[]
+|====
+
+[[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                 | - | 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_KHR_maintenance4[]
+| pname:maxBufferSize                                       | - | 2^30^ | min
+endif::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_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_EXT_inline_uniform_block[]
+ifdef::VK_EXT_vertex_attribute_divisor[]
+| pname:maxVertexAttribDivisor               | - | 2^16^-1   | min
+endif::VK_EXT_vertex_attribute_divisor[]
+ifdef::VK_NV_mesh_shader[]
+| pname:maxDrawMeshTasksCount                | - | 2^16^-1   | min
+| pname:maxTaskWorkGroupInvocations          | - | 32        | min
+| pname:maxTaskWorkGroupSize                 | - | (32,1,1)  | min
+| pname:maxTaskTotalMemorySize               | - | 16384     | min
+| pname:maxTaskOutputCount                   | - | 2^16^-1   | min
+| pname:maxMeshWorkGroupInvocations          | - | 32        | min
+| pname:maxMeshWorkGroupSize                 | - | (32,1,1)  | min
+| pname:maxMeshTotalMemorySize               | - | 16384     | min
+| pname:maxMeshOutputVertices                | - | 256       | min
+| pname:maxMeshOutputPrimitives              | - | 256       | min
+| pname:maxMeshMultiviewViewCount            | - | 1         | min
+| pname:meshOutputPerVertexGranularity       | - | -         | implementation-dependent
+| pname:meshOutputPerPrimitiveGranularity    | - | -         | implementation-dependent
+endif::VK_NV_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
+endif::VK_EXT_fragment_density_map[]
+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_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_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[]
+|====
+
+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::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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+If the sample count for which additional multisampling capabilities are
+requested using fname:vkGetPhysicalDeviceMultisamplePropertiesEXT is set
+in sname:VkPhysicalDeviceSampleLocationsPropertiesEXT::
+<<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
+sname:VkPhysicalDeviceSampleLocationsPropertiesEXT::
+<<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]]).
diff --git a/registry/vulkan/chapters/memory.txt b/registry/vulkan/chapters/memory.txt
new file mode 100644
index 0000000..91a85a6
--- /dev/null
+++ b/registry/vulkan/chapters/memory.txt
@@ -0,0 +1,3864 @@
+// Copyright 2015-2021 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]]
+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.
+
+[open,refpage='VkAllocationCallbacks',desc='Structure containing callback function pointers for memory allocation',type='structs']
+--
+Allocators are provided by the application as a pointer to a
+sname:VkAllocationCallbacks structure:
+
+include::{generated}/api/structs/VkAllocationCallbacks.txt[]
+
+  * 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
+****
+
+include::{generated}/validity/structs/VkAllocationCallbacks.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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>>.
+
+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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+
+  * 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.
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceMemoryProperties',desc='Structure specifying physical device memory properties',type='structs']
+--
+The sname:VkPhysicalDeviceMemoryProperties structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties.txt[]
+
+  * 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.txt[]
+--
+
+[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::memoryTypes.
+
+include::{generated}/api/enums/VK_MAX_MEMORY_TYPES.txt[]
+--
+
+[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::memoryHeaps.
+
+include::{generated}/api/enums/VK_MAX_MEMORY_HEAPS.txt[]
+--
+
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceMemoryProperties2',desc='Structure specifying physical device memory properties',type='structs']
+--
+The sname:VkPhysicalDeviceMemoryProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties2.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceMemoryProperties2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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[]
+--
+
+[open,refpage='VkMemoryHeapFlags',desc='Bitmask of VkMemoryHeapFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkMemoryHeapFlags.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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 heap, are:
+
+include::{generated}/api/enums/VkMemoryPropertyFlagBits.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+--
+
+=== Device Memory Allocation
+
+[open,refpage='vkAllocateMemory',desc='Allocate device memory',type='protos']
+--
+To allocate memory objects, call:
+
+include::{generated}/api/protos/vkAllocateMemory.txt[]
+
+  * 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.
+
+[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.
+====
+
+[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 can't 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[]
+
+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::{generated}/validity/protos/vkAllocateMemory.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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[]
+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:
+
+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_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[]
+
+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.
+
+endif::VK_KHR_external_memory_win32,VK_KHR_external_memory_fd,VK_EXT_external_memory_host,VK_ANDROID_external_memory_android_hardware_buffer[]
+
+.Valid Usage
+****
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkMemoryAllocateInfo-allocationSize-00638]]
+    pname:allocationSize must: be greater than `0`
+endif::VK_ANDROID_external_memory_android_hardware_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
+    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 that 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 protected memory 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`, otherwise 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 or
+    code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE
+  * [[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_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,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,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-04750]]
+    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` and 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[]
+****
+
+include::{generated}/validity/structs/VkMemoryAllocateInfo.txt[]
+--
+
+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.txt[]
+
+ifdef::VK_KHR_dedicated_allocation[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryDedicatedAllocateInfoKHR.txt[]
+endif::VK_KHR_dedicated_allocation[]
+
+  * pname:sType is the type of 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
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-01433]]
+    If pname:image is not dlink:VK_NULL_HANDLE,
+    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
+    sname:VkMemoryRequirements::pname:size of the image
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkMemoryDedicatedAllocateInfo-image-02964]]
+    If pname:image is not dlink:VK_NULL_HANDLE and the memory is not an
+    imported Android Hardware Buffer,
+    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
+    sname:VkMemoryRequirements::pname:size of the image
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[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
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-01435]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE,
+    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
+    sname:VkMemoryRequirements::pname:size of the buffer
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkMemoryDedicatedAllocateInfo-buffer-02965]]
+    If pname:buffer is not dlink:VK_NULL_HANDLE and the memory is not an
+    imported Android Hardware Buffer,
+    sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
+    sname:VkMemoryRequirements::pname:size of the buffer
+endif::VK_ANDROID_external_memory_android_hardware_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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_external_memory[]
+or the equivalent
+
+include::{generated}/api/structs/VkExportMemoryAllocateInfoKHR.txt[]
+endif::VK_KHR_external_memory[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:handleTypes is 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.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+
+ifdef::VK_NV_external_memory[]
+include::VK_NV_external_memory/allocate_memory.txt[]
+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.txt[]
+
+  * pname:sType is the type of 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 if it is 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkMemoryGetWin32HandleInfoKHR',desc='Structure describing a Win32 handle semaphore export operation',type='structs']
+--
+The sname:VkMemoryGetWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkMemoryGetWin32HandleInfoKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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: be an external memory handle created outside of the
+    Vulkan API
+  * [[VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-00666]]
+    pname:handleType must: not be one of the handle types defined as opaque
+****
+
+include::{generated}/validity/protos/vkGetMemoryWin32HandlePropertiesKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_external_memory_win32[]
+
+ifdef::VK_NV_external_memory_win32[]
+include::VK_NV_external_memory_win32/handle_permissions.txt[]
+
+include::VK_NV_external_memory_win32/import_memory_win32.txt[]
+
+include::VK_NV_external_memory_win32/get_handle_win32.txt[]
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='vkGetMemoryFdKHR',desc='Get a POSIX file descriptor for a memory object',type='protos']
+--
+To export a POSIX file descriptor referencing the payload of a Vulkan device
+memory object, call:
+
+include::{generated}/api/protos/vkGetMemoryFdKHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetMemoryFdKHR.txt[]
+--
+
+[open,refpage='VkMemoryGetFdInfoKHR',desc='Structure describing a POSIX FD semaphore export operation',type='structs']
+--
+The sname:VkMemoryGetFdInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkMemoryGetFdInfoKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='vkGetMemoryFdPropertiesKHR',desc='Get Properties of External Memory File Descriptors',type='protos']
+--
+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.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+  * [[VUID-vkGetMemoryFdPropertiesKHR-fd-00673]]
+    pname:fd must: be an external memory handle created outside of the
+    Vulkan API
+  * [[VUID-vkGetMemoryFdPropertiesKHR-handleType-00674]]
+    pname:handleType must: not be
+    ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
+****
+
+include::{generated}/validity/protos/vkGetMemoryFdPropertiesKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='vkGetMemoryHostPointerPropertiesEXT',desc='Get properties of external memory host pointer',type='protos']
+--
+To determine the correct parameters to use when importing host pointers,
+call:
+
+include::{generated}/api/protos/vkGetMemoryHostPointerPropertiesEXT.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+[open,refpage='VkMemoryHostPointerPropertiesEXT',desc='Properties of external memory host pointer',type='structs']
+--
+The sname:VkMemoryHostPointerPropertiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkMemoryHostPointerPropertiesEXT.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 writing to non-external format images is possible but
+writing to external format images is not.
+====
+
+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
+https://www.khronos.org/registry/OpenGL/extensions/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
+https://www.khronos.org/registry/OpenGL/extensions/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.txt[]
+--
+
+ifdef::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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_format_feature_flags2[]
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+
+ifdef::VK_NV_external_memory_rdma[]
+[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.txt[]
+
+  * 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 will return the address representing the payload of the
+    device memory object.
+
+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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_NV_external_memory_rdma[]
+
+ifdef::VK_FUCHSIA_external_memory[]
+include::VK_FUCHSIA_external_memory/device_memory.txt[]
+endif::VK_FUCHSIA_external_memory[]
+
+
+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.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryAllocateFlagsInfoKHR.txt[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/enums/VkMemoryAllocateFlagBitsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/flags/VkMemoryAllocateFlagsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryOpaqueCaptureAddressAllocateInfoKHR.txt[]
+endif::VK_KHR_buffer_device_address[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
+
+
+=== Freeing Device Memory
+
+[open,refpage='vkFreeMemory',desc='Free device memory',type='protos']
+--
+To free a memory object, call:
+
+include::{generated}/api/protos/vkFreeMemory.txt[]
+
+  * 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.txt[]
+--
+
+
+[[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']
+--
+To retrieve a host virtual address pointer to a region of a mappable memory
+object, call:
+
+include::{generated}/api/protos/vkMapMemory.txt[]
+
+  * 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 `void *` variable in which is returned a
+    host-accessible pointer to the beginning of the mapped range.
+    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.
+====
+
+.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.txt[]
+--
+
+[open,refpage='VkMemoryMapFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkMemoryMapFlags.txt[]
+
+tname:VkMemoryMapFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+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[]
+
+[open,refpage='vkFlushMappedMemoryRanges',desc='Flush mapped memory ranges',type='protos']
+--
+To flush ranges of non-coherent memory from the host caches, call:
+
+include::{generated}/api/protos/vkFlushMappedMemoryRanges.txt[]
+
+  * 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::{generated}/validity/protos/vkFlushMappedMemoryRanges.txt[]
+--
+
+[open,refpage='vkInvalidateMappedMemoryRanges',desc='Invalidate ranges of mapped memory objects',type='protos']
+--
+To invalidate ranges of non-coherent memory from the host caches, call:
+
+include::{generated}/api/protos/vkInvalidateMappedMemoryRanges.txt[]
+
+  * 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::{generated}/validity/protos/vkInvalidateMappedMemoryRanges.txt[]
+--
+
+[open,refpage='VkMappedMemoryRange',desc='Structure specifying a mapped memory range',type='structs']
+--
+The sname:VkMappedMemoryRange structure is defined as:
+
+include::{generated}/api/structs/VkMappedMemoryRange.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+[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.txt[]
+
+  * pname:device is the logical device that owns the memory.
+  * pname:memory is the memory object to be unmapped.
+
+.Valid Usage
+****
+  * [[VUID-vkUnmapMemory-memory-00689]]
+    pname:memory must: be currently host mapped
+****
+
+include::{generated}/validity/protos/vkUnmapMemory.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+
+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
+
+[[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.txt[]
+
+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 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 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
+|====
+
+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.
+
+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_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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkPeerMemoryFeatureFlagBits',desc='Bitmask specifying supported peer memory features',type='enums']
+--
+Bits which may: be set in the value returned for
+flink:vkGetDeviceGroupPeerMemoryFeatures::pname:pPeerMemoryFeatures,
+indicating the supported peer memory features, are:
+
+include::{generated}/api/enums/VkPeerMemoryFeatureFlagBits.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/enums/VkPeerMemoryFeatureFlagBitsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/flags/VkPeerMemoryFeatureFlagsKHR.txt[]
+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.txt[]
+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.txt[]
+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,bufferDeviceAddress>> feature must:
+    be enabled
+  * [[VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-03335]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetDeviceMemoryOpaqueCaptureAddress.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceMemoryOpaqueCaptureAddressInfoKHR.txt[]
+endif::VK_KHR_buffer_device_address[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_buffer_device_address[]
diff --git a/registry/vulkan/chapters/pipelines.txt b/registry/vulkan/chapters/pipelines.txt
new file mode 100644
index 0000000..13cd79a
--- /dev/null
+++ b/registry/vulkan/chapters/pipelines.txt
@@ -0,0 +1,4569 @@
+// Copyright 2015-2021 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[]
+The graphics pipeline can be operated in two modes, as either _primitive
+shading_ or _mesh shading_ pipeline.
+
+*Primitive Shading*
+
+endif::VK_NV_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_NV_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[]
+
+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[]
+image::{images}/pipeline.svg[title="Block diagram of the Vulkan pipeline",align="center",opts="{imageopts}"]
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_mesh_shader[]
+image::{images}/pipelinemesh.svg[title="Block diagram of the Vulkan pipeline",align="center",opts="{imageopts}"]
+endif::VK_NV_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.txt[]
+--
+
+
+[[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 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.
+
+[open,refpage='vkCreateComputePipelines',desc='Creates a new compute pipeline object',type='protos']
+--
+To create compute pipelines, call:
+
+include::{generated}/api/protos/vkCreateComputePipelines.txt[]
+
+  * pname:device is the logical device that creates the compute 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: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[]
+
+.Valid Usage
+****
+  * [[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
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-vkCreateComputePipelines-pipelineCache-02873]]
+    If pname:pipelineCache was created with
+    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, host
+    access to pname:pipelineCache must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+endif::VK_EXT_pipeline_creation_cache_control[]
+****
+
+include::{generated}/validity/protos/vkCreateComputePipelines.txt[]
+--
+
+[open,refpage='VkComputePipelineCreateInfo',desc='Structure specifying parameters of a newly created compute pipeline',type='structs']
+--
+The sname:VkComputePipelineCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkComputePipelineCreateInfo.txt[]
+
+  * pname:sType is the type of 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
+  * 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>>.
+
+.Valid Usage
+****
+  * [[VUID-VkComputePipelineCreateInfo-flags-00697]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineIndex is -1, pname:basePipelineHandle must:
+    be a valid handle to a compute sname:VkPipeline
+  * [[VUID-VkComputePipelineCreateInfo-flags-00698]]
+    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-VkComputePipelineCreateInfo-flags-00699]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineIndex is not -1, pname:basePipelineHandle
+    must: be dlink:VK_NULL_HANDLE
+  * [[VUID-VkComputePipelineCreateInfo-flags-00700]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineHandle is not dlink:VK_NULL_HANDLE,
+    pname:basePipelineIndex must: be -1
+  * [[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-00703]]
+    pname:layout must: be
+    <<descriptorsets-pipelinelayout-consistency,consistent>> with the layout
+    of the compute shader specified in pname:stage
+  * [[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-flags-03364]]
+    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_KHR_pipeline_library[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+  * [[VUID-VkComputePipelineCreateInfo-flags-03365]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
+  * [[VUID-VkComputePipelineCreateInfo-flags-03366]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
+  * [[VUID-VkComputePipelineCreateInfo-flags-03367]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
+  * [[VUID-VkComputePipelineCreateInfo-flags-03368]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
+  * [[VUID-VkComputePipelineCreateInfo-flags-03369]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
+  * [[VUID-VkComputePipelineCreateInfo-flags-03370]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
+  * [[VUID-VkComputePipelineCreateInfo-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-VkComputePipelineCreateInfo-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[]
+  * [[VUID-VkComputePipelineCreateInfo-flags-02874]]
+    pname:flags must: not include
+    ename:VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-VkComputePipelineCreateInfo-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_EXT or
+    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
+endif::VK_EXT_pipeline_creation_cache_control[]
+****
+
+include::{generated}/validity/structs/VkComputePipelineCreateInfo.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+  * pname:module is a slink:VkShaderModule object containing the shader for
+    this stage.
+  * 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`.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00704]]
+    If the <<features-geometryShader,geometry shaders>> feature is not
+    enabled, pname:stage must: not be ename:VK_SHADER_STAGE_GEOMETRY_BIT
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00705]]
+    If the <<features-tessellationShader,tessellation shaders>> 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[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02091]]
+    If the <<features-meshShader,mesh shader>> feature is not enabled,
+    pname:stage must: not be ename:VK_SHADER_STAGE_MESH_BIT_NV
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02092]]
+    If the <<features-taskShader,task shader>> feature is not enabled,
+    pname:stage must: not be ename:VK_SHADER_STAGE_TASK_BIT_NV
+endif::VK_NV_mesh_shader[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-00706]]
+    pname:stage must: not be ename:VK_SHADER_STAGE_ALL_GRAPHICS, or
+    ename:VK_SHADER_STAGE_ALL
+  * [[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
+  * [[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-00712]]
+    If 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-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 that specifies 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 that
+    specifies 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 that
+    specifies 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 a
+    <<pipeline-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-VkPipelineShaderStageCreateInfo-stage-02597]]
+    If pname:stage is a
+    <<pipeline-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-VkPipelineShaderStageCreateInfo-stage-00718]]
+    If 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-VkPipelineShaderStageCreateInfo-stage-00719]]
+    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
+    entry point writes to code:FragDepth in any execution path, it must:
+    write to code:FragDepth in all execution paths
+ifdef::VK_EXT_shader_stencil_export[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-01511]]
+    If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
+    entry point writes to code:FragStencilRefEXT in any execution path, it
+    must: write to code:FragStencilRefEXT in all execution paths
+endif::VK_EXT_shader_stencil_export[]
+ifdef::VK_NV_mesh_shader[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02093]]
+    If pname:stage is ename:VK_SHADER_STAGE_MESH_BIT_NV, the identified
+    entry point must: have an code:OpExecutionMode instruction that
+    specifies a maximum output vertex count, code:OutputVertices, that is
+    greater than `0` and less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputVertices
+  * [[VUID-VkPipelineShaderStageCreateInfo-stage-02094]]
+    If pname:stage is ename:VK_SHADER_STAGE_MESH_BIT_NV, the identified
+    entry point must: have an code:OpExecutionMode instruction that
+    specifies a maximum output primitive count, code:OutputPrimitivesNV,
+    that is greater than `0` and less than or equal to
+    sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives
+endif::VK_NV_mesh_shader[]
+ifdef::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_EXT
+    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_EXT
+    flag set, the <<features-computeFullSubgroups,
+    pname:computeFullSubgroups>> feature must: be enabled
+  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02754]]
+    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+    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_EXT
+    flag set
+  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02755]]
+    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+    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-required-subgroup-size-stages,
+    pname:requiredSubgroupSizeStages>>
+  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02756]]
+    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+    structure is included in the pname:pNext chain and pname:stage is
+    ename:VK_SHADER_STAGE_COMPUTE_BIT, the local workgroup size of the
+    shader must: be less than or equal to the product of
+    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT::pname:requiredSubgroupSize
+    and
+    <<limits-max-subgroups-per-workgroup,pname:maxComputeWorkgroupSubgroups>>
+  * [[VUID-VkPipelineShaderStageCreateInfo-pNext-02757]]
+    If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+    structure is included in the pname:pNext chain, and pname:flags has the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
+    flag set, the local workgroup size in the X dimension of the pipeline
+    must: be a multiple of
+    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT::pname:requiredSubgroupSize
+  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02758]]
+    If pname:flags has both the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT and
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
+    flags set, the local workgroup size in the X dimension of the pipeline
+    must: be a multiple of
+    <<limits-max-subgroup-size,pname:maxSubgroupSize>>
+  * [[VUID-VkPipelineShaderStageCreateInfo-flags-02759]]
+    If pname:flags has the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
+    flag set and pname:flags does not have the
+    ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
+    flag set and no
+    slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT 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>>
+endif::VK_EXT_subgroup_size_control[]
+  * [[VUID-VkPipelineShaderStageCreateInfo-module-04145]]
+    The SPIR-V code that was used to create pname:module 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.txt[]
+--
+
+[open,refpage='VkPipelineShaderStageCreateFlags',desc='Bitmask of VkPipelineShaderStageCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkPipelineShaderStageCreateFlags.txt[]
+
+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.txt[]
+
+ifdef::VK_EXT_subgroup_size_control[]
+  * ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
+    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_EXT
+    specifies that the subgroup sizes must: be launched with all invocations
+    active in the 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-max-subgroup-size,pname:minSubgroupSize>> does not
+equal <<limits-max-subgroup-size,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_EXT_subgroup_size_control[]
+--
+
+[open,refpage='VkShaderStageFlagBits',desc='Bitmask specifying a pipeline stage',type='enums']
+--
+Commands and structures which need to specify one or more shader stages do
+so using a bitmask whose bits correspond to stages.
+Bits which can: be set to specify shader stages are:
+
+include::{generated}/api/enums/VkShaderStageFlagBits.txt[]
+
+  * 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[]
+  * ename:VK_SHADER_STAGE_TASK_BIT_NV specifies the task stage.
+  * ename:VK_SHADER_STAGE_MESH_BIT_NV specifies the mesh stage.
+endif::VK_NV_mesh_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.txt[]
+
+tname:VkShaderStageFlags is a bitmask type for setting a mask of zero or
+more elink:VkShaderStageFlagBits.
+--
+
+ifdef::VK_EXT_subgroup_size_control[]
+[open,refpage='VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT',desc='Structure specifying the required subgroup size of a newly created pipeline shader stage',type='structs']
+--
+The sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure
+is defined as:
+
+include::{generated}/api/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.txt[]
+  * pname:sType is the type of 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 that specifies the required subgroup size for the
+    newly created pipeline shader stage.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02760]]
+    pname:requiredSubgroupSize must: be a power-of-two integer
+  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02761]]
+    pname:requiredSubgroupSize must: be greater or equal to
+    <<limits-min-subgroup-size,minSubgroupSize>>
+  * [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02762]]
+    pname:requiredSubgroupSize must: be less than or equal to
+    <<limits-max-subgroup-size,maxSubgroupSize>>
+****
+
+
+If a sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT 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.
+
+include::{generated}/validity/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+endif::VK_HUAWEI_subpass_shading[]
+
+
+[[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']
+--
+To create graphics pipelines, call:
+
+include::{generated}/api/protos/vkCreateGraphicsPipelines.txt[]
+
+  * pname:device is the logical device that creates the graphics 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: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.
+
+.Valid Usage
+****
+  * [[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
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+  * [[VUID-vkCreateGraphicsPipelines-pipelineCache-02876]]
+    If pname:pipelineCache was created with
+    ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, host
+    access to pname:pipelineCache must: be
+    <<fundamentals-threadingbehavior,externally synchronized>>
+endif::VK_EXT_pipeline_creation_cache_control[]
+****
+
+ifdef::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_EXT on
+pname:flags for any element of pname:pCreateInfos while passing
+dlink:VK_NULL_HANDLE for pname:pipelineCache.
+====
+endif::VK_EXT_pipeline_creation_cache_control[]
+
+include::{generated}/validity/protos/vkCreateGraphicsPipelines.txt[]
+--
+
+[open,refpage='VkGraphicsPipelineCreateInfo',desc='Structure specifying parameters of a newly created graphics pipeline',type='structs']
+--
+The sname:VkGraphicsPipelineCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkGraphicsPipelineCreateInfo.txt[]
+
+  * pname:sType is the type of 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[]
+    It is ignored if the pipeline includes a mesh shader stage.
+endif::VK_NV_mesh_shader[]
+ifdef::VK_EXT_vertex_input_dynamic_state[]
+    It is ignored 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, as described in <<drawing, Drawing Commands>>.
+ifdef::VK_NV_mesh_shader[]
+    It is ignored if the pipeline includes a mesh shader stage.
+endif::VK_NV_mesh_shader[]
+  * pname:pTessellationState is a pointer to a
+    slink:VkPipelineTessellationStateCreateInfo structure, and is ignored if
+    the pipeline does not include a tessellation control shader stage and
+    tessellation evaluation shader stage.
+  * pname:pViewportState is a pointer to a
+    slink:VkPipelineViewportStateCreateInfo structure, and is ignored if the
+    pipeline has rasterization disabled.
+  * pname:pRasterizationState is a pointer to a
+    slink:VkPipelineRasterizationStateCreateInfo structure.
+  * pname:pMultisampleState is a pointer to a
+    slink:VkPipelineMultisampleStateCreateInfo structure, and is ignored if
+    the pipeline has rasterization disabled.
+  * pname:pDepthStencilState is a pointer to a
+    slink:VkPipelineDepthStencilStateCreateInfo structure, and is ignored if
+    the pipeline has rasterization disabled or if no depth/stencil
+    attachment is used.
+  * pname:pColorBlendState is a pointer to a
+    slink:VkPipelineColorBlendStateCreateInfo structure, and is ignored if
+    the pipeline has rasterization disabled or if no color attachments are
+    used.
+  * 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: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.
+  * 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>>.
+
+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[]
+
+[[pipeline-graphics-subsets]]
+The state required for a graphics pipeline is divided into
+<<pipeline-graphics-subsets-vertex-input, vertex input state>>,
+<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+state>>, <<pipeline-graphics-subsets-fragment-shader,fragment shader
+state>>, and <<pipeline-graphics-subsets-fragment-output,fragment output
+state>>.
+
+[[pipeline-graphics-subsets-vertex-input]]
+Vertex input state is defined by:
+
+  * slink:VkPipelineVertexInputStateCreateInfo
+  * slink:VkPipelineInputAssemblyStateCreateInfo
+
+[[pipeline-graphics-subsets-pre-rasterization]]
+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[]
+  ** Task shaders
+  ** Mesh shaders
+endif::VK_NV_mesh_shader[]
+  * Within the slink:VkPipelineLayout, all bindings that affect the
+    specified shader stages
+  * slink:VkPipelineViewportStateCreateInfo
+  * slink:VkPipelineRasterizationStateCreateInfo
+  * slink:VkPipelineTessellationStateCreateInfo if tessellation stages are
+    included.
+  * slink:VkRenderPass and pname:subpass parameter
+ifdef::VK_EXT_discard_rectangles[]
+  * slink:VkPipelineDiscardRectangleStateCreateInfoEXT
+endif::VK_EXT_discard_rectangles[]
+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[]
+
+[[pipeline-graphics-subsets-fragment-shader]]
+Fragment shader state is defined by:
+
+  * A slink:VkPipelineShaderStageCreateInfo entry for the fragment shader
+  * Within the slink:VkPipelineLayout, all bindings that affect the fragment
+    shader
+  * slink:VkPipelineMultisampleStateCreateInfo
+  * slink:VkPipelineDepthStencilStateCreateInfo
+  * slink:VkRenderPass and pname:subpass parameter
+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[]
+
+[[pipeline-graphics-subsets-fragment-output]]
+Fragment output state is defined by:
+
+  * slink:VkPipelineColorBlendStateCreateInfo
+  * The pname:alphaToCoverageEnable and pname:alphaToOneEnable members of
+    slink:VkPipelineMultisampleStateCreateInfo.
+  * slink:VkRenderPass and pname:subpass parameter
+
+[[pipeline-graphics-subsets-complete]]
+A complete graphics pipeline always includes
+<<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+state>>, with other subsets included depending on that state.
+If the <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
+shader state>> includes a vertex shader, then
+<<pipeline-graphics-subsets-vertex-input, vertex input state>> is included
+in a complete graphics pipeline.
+If the value of
+slink:VkPipelineRasterizationStateCreateInfo::pname:rasterizerDiscardEnable
+in the <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
+shader state>> is ename:VK_FALSE
+ifdef::VK_EXT_extended_dynamic_state2[]
+or the ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT dynamic state is
+enabled
+endif::VK_EXT_extended_dynamic_state2[]
+<<pipeline-graphics-subsets-fragment-shader, fragment shader state>> and
+<<pipeline-graphics-subsets-fragment-output, fragment output interface
+state>> is included in a complete graphics pipeline.
+
+Pipelines must: be created with a complete set of pipeline state.
+
+.Valid Usage
+****
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00722]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineIndex is -1, pname:basePipelineHandle must:
+    be a valid handle to a graphics sname:VkPipeline
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00723]]
+    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-VkGraphicsPipelineCreateInfo-flags-00724]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineIndex is not -1, pname:basePipelineHandle
+    must: be dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-00725]]
+    If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
+    flag, and pname:basePipelineHandle is not dlink:VK_NULL_HANDLE,
+    pname:basePipelineIndex must: be -1
+  * [[VUID-VkGraphicsPipelineCreateInfo-stage-00726]]
+    The pname:stage member of each element of pname:pStages must: be unique
+ifndef::VK_NV_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-stage-00727]]
+    If the pipeline is being created with
+    <<pipeline-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
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02095]]
+    If the pipeline is being created with
+    <<pipeline-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_NV or ename:VK_SHADER_STAGE_MESH_BIT_NV)
+    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)
+  * [[VUID-VkGraphicsPipelineCreateInfo-stage-02096]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> the pname:stage member of one element of pname:pStages must: be
+    either ename:VK_SHADER_STAGE_VERTEX_BIT or
+    ename:VK_SHADER_STAGE_MESH_BIT_NV
+endif::VK_NV_mesh_shader[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-stage-00728]]
+    The pname:stage member of each element of pname:pStages must: not be
+    ename:VK_SHADER_STAGE_COMPUTE_BIT
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00729]]
+    If the pipeline is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-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-00731]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and pname:pStages includes a tessellation control shader stage
+    and a tessellation evaluation shader stage, pname:pTessellationState
+    must: be a valid pointer to a valid
+    slink:VkPipelineTessellationStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00732]]
+    If the pipeline is being created with
+    <<pipeline-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 that specifies the type of subdivision in the pipeline
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00733]]
+    If the pipeline is being created with
+    <<pipeline-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
+    that specifies the type of subdivision in the pipeline, they must: both
+    specify the same subdivision mode
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00734]]
+    If the pipeline is being created with
+    <<pipeline-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 that specifies the output patch size in the pipeline
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00735]]
+    If the pipeline is being created with
+    <<pipeline-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 that
+    specifies the out patch size in the pipeline, they must: both specify
+    the same patch size
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00736]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and pname:pStages includes tessellation shader stages, the
+    pname:topology member of pname:pInputAssembly must: be
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
+  * [[VUID-VkGraphicsPipelineCreateInfo-topology-00737]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and the pname:topology member of pname:pInputAssembly is
+    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pname:pStages must: include
+    tessellation shader stages
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-00738]]
+    If the pipeline is being created with
+    <<pipeline-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 that specifies 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 is being created with
+    <<pipeline-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 that specifies 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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and <<pipeline-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[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-PrimitiveId-06264]]
+    If the pipeline is being created with
+    <<pipeline-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[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06038]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
+    being created with <<pipeline-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 is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and <<pipeline-graphics-subsets-fragment-shader, fragment shader
+    state>>, the fragment shader and last
+    <<pipeline-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-06039]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipeline-graphics-subsets-fragment-shader, fragment
+    shader state>>, and pname:subpass uses a depth/stencil attachment in
+    pname:renderPass with a read-only layout for the depth aspect in the
+    slink:VkAttachmentReference defined by pname:subpass, the
+    pname:depthWriteEnable member of pname:pDepthStencilState must: be
+    ename:VK_FALSE
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06040]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipeline-graphics-subsets-fragment-shader, fragment
+    shader state>>, and pname:subpass uses a depth/stencil attachment in
+    pname:renderPass with a read-only layout for the stencil aspect in the
+    slink:VkAttachmentReference defined by pname:subpass, the pname:failOp,
+    pname:passOp and pname:depthFailOp members of each of the pname:front
+    and pname:back members of pname:pDepthStencilState must: be
+    ename:VK_STENCIL_OP_KEEP
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06041]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, and the pipeline is
+    being created with <<pipeline-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-06042]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, and the pipeline is
+    being created with <<pipeline-graphics-subsets-fragment-output, fragment
+    output interface state>>, 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
+ifndef::VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00747]]
+    If the pipeline is being created with
+    <<pipeline-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, the
+    pname:pViewports member of pname:pViewportState must: be a valid pointer
+    to an array of pname:pViewportState->viewportCount valid
+    sname:VkViewport structures
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00748]]
+    If the pipeline is being created with
+    <<pipeline-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, the
+    pname:pScissors member of pname:pViewportState must: be a valid pointer
+    to an array of pname:pViewportState->scissorCount sname:VkRect2D
+    structures
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04130]]
+    If the pipeline is being created with
+    <<pipeline-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_EXT, the pname:pViewports
+    member of pname:pViewportState must: be a valid pointer to an array of
+    pname:pViewportState->viewportCount valid sname:VkViewport structures
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04131]]
+    If the pipeline is being created with
+    <<pipeline-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_EXT, the pname:pScissors
+    member of pname:pViewportState must: be a valid pointer to an array of
+    pname:pViewportState->scissorCount sname:VkRect2D structures
+endif::VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, and the wide lines 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`
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750]]
+    If the pipeline is being created with
+    <<pipeline-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
+ifdef::VK_EXT_extended_dynamic_state2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pViewportState-04892]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, and the graphics pipeline state was created with the
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT dynamic state
+    enabled, pname:pViewportState must: be a valid pointer to a valid
+    slink:VkPipelineViewportStateCreateInfo structure
+endif::VK_EXT_extended_dynamic_state2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    pname:pMultisampleState must: be a valid pointer to a valid
+    slink:VkPipelineMultisampleStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06043]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipeline-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
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06044]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipeline-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
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06045]]
+    If pname:renderPass is not dlink:VK_NULL_HANDLE and the pipeline is
+    being created with <<pipeline-graphics-subsets-fragment-output, fragment
+    output interface state>>, pname:pColorBlendState->attachmentCount must:
+    be greater than the index of all color attachments that are not
+    ename:VK_ATTACHMENT_UNUSED for the pname:subpass index in
+    pname:renderPass
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, the depth bias clamping 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 is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-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-01521]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    and no element of the pname:pDynamicStates member of pname:pDynamicState
+    is ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, and the
+    pname:sampleLocationsEnable member of a
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure 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-01522]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    and no element of the pname:pDynamicStates member of pname:pDynamicState
+    is ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, and the
+    pname:sampleLocationsEnable member of a
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure included in
+    the pname:pNext chain of pname:pMultisampleState is ename:VK_TRUE,
+    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-01523]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    and no element of the pname:pDynamicStates member of pname:pDynamicState
+    is ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, and the
+    pname:sampleLocationsEnable member of a
+    slink:VkPipelineSampleLocationsStateCreateInfoEXT structure included in
+    the pname:pNext chain of pname:pMultisampleState is ename:VK_TRUE,
+    pname:sampleLocationsInfo.sampleLocationsPerPixel must: equal
+    pname:rasterizationSamples
+  * [[VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524]]
+    If the pipeline is being created with
+    <<pipeline-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[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-layout-00756]]
+    pname:layout must: be
+    <<descriptorsets-pipelinelayout-consistency,consistent>> with all
+    shaders specified in pname:pStages
+  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-00757]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    and neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
+    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, 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
+ifdef::VK_AMD_mixed_attachment_samples[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01505]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    and the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
+    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_NV_framebuffer_mixed_samples[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-subpass-01411]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    and the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    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 is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    and the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
+    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 is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    and the `apiext:VK_NV_coverage_reduction_mode` extension is enabled, 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 is being created with
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>> 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 a valid renderPass, 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 a valid renderPass, the pipeline is being created
+    with <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
+    shader state>>, and the pname:renderPass has multiview enabled and
+    pname:subpass has more than one bit set in the view mask and
+    pname:multiviewTessellationShader is not enabled, then pname:pStages
+    must: not include tessellation shaders
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06048]]
+    If pname:renderPass is a valid renderPass, the pipeline is being created
+    with <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
+    shader state>>, and the pname:renderPass has multiview enabled and
+    pname:subpass has more than one bit set in the view mask and
+    pname:multiviewGeometryShader is not enabled, then pname:pStages must:
+    not include a geometry shader
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06049]]
+    If pname:renderPass is a valid renderPass, the pipeline is being created
+    with <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization
+    shader state>>, and the pname:renderPass has multiview enabled and
+    pname:subpass has more than one bit set in the view mask, shaders in the
+    pipeline must: not write to the code:Layer built-in output
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06050]]
+    If pname:renderPass is a valid renderPass and the pipeline is being
+    created with <<pipeline-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the pname:renderPass has multiview
+    enabled, then all shaders must: not include variables decorated with the
+    code:Layer built-in decoration in their interfaces
+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 is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-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
+endif::VK_NV_scissor_exclusive[]
+ifdef::VK_NV_shading_rate_image[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057]]
+    If the pipeline is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-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
+endif::VK_EXT_discard_rectangles[]
+ifndef::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02097]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-vertex-input, vertex input state>>,
+    pname:pVertexInputState must: be a valid pointer to a valid
+    slink:VkPipelineVertexInputStateCreateInfo structure
+endif::VK_EXT_vertex_input_dynamic_state[]
+ifndef::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-04910]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-vertex-input, vertex input state>>, and
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT is not set,
+    pname:pVertexInputState must: be a valid pointer to a valid
+    slink:VkPipelineVertexInputStateCreateInfo structure
+endif::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02098]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-vertex-input, vertex input state>>,
+    pname:pInputAssemblyState must: be a valid pointer to a valid
+    slink:VkPipelineInputAssemblyStateCreateInfo structure
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pStages-02317]]
+    If the pipeline is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-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
+    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stage>>
+  * [[VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319]]
+    If the pipeline is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, and the last
+    <<pipeline-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[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-02322]]
+    If the pipeline is being created with
+    <<pipeline-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[]
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_EXT_line_rasterization[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and at least one of <<pipeline-graphics-subsets-fragment-output,
+    fragment output interface state>> or
+    <<pipeline-graphics-subsets-fragment-shader, fragment shader state>>,
+    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 is being created with
+    <<pipeline-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[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-03371]]
+    pname:flags must: not include ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+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_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378]]
+    If the <<features-extendedDynamicState, extendedDynamicState>> feature
+    is not enabled, there must: be no element of the pname:pDynamicStates
+    member of pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_CULL_MODE_EXT,
+    ename:VK_DYNAMIC_STATE_FRONT_FACE_EXT,
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT,
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
+    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT,
+    ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT,
+    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT, or
+    ename:VK_DYNAMIC_STATE_STENCIL_OP_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03379]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, and ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT is included
+    in the pname:pDynamicStates array then pname:viewportCount must: be zero
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, and ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT is included
+    in the pname:pDynamicStates array then pname:scissorCount must: be zero
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, and ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT is included
+    in the pname:pDynamicStates array then ename:VK_DYNAMIC_STATE_VIEWPORT
+    must: not be present
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>>, and ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT is included
+    in the pname:pDynamicStates array then ename:VK_DYNAMIC_STATE_SCISSOR
+    must: not be present
+endif::VK_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_extended_dynamic_state2[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04868]]
+    If the <<features-extendedDynamicState2, extendedDynamicState2>> feature
+    is not enabled, there must: be no element of the pname:pDynamicStates
+    member of pname:pDynamicState set to
+    ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT,
+    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT, or
+    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04869]]
+    If the <<features-extendedDynamicState2LogicOp,
+    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,
+    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
+endif::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,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+ifdef::VK_EXT_transform_feedback[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-flags-02966]]
+    If the pipeline is being created with
+    <<pipeline-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[]
+endif::VK_NV_device_generated_commands[]
+ifdef::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_EXT or
+    ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT
+endif::VK_EXT_pipeline_creation_cache_control[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04494]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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-04501]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04503]]
+    If the pipeline is being created with
+    <<pipeline-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_EXT 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_EXT_extended_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04504]]
+    If the pipeline is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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-pDynamicState-04569]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
+    state>>, and the <<features-supersampleFragmentShadingRates,
+    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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> or <<pipeline-graphics-subsets-fragment-shader, fragment shader
+    state>>, and the <<features-noInvocationFragmentShadingRates,
+    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 is being created with
+    <<pipeline-graphics-subsets-pre-rasterization, pre-rasterization shader
+    state>> and the <<features-vertexInputDynamicState,
+    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
+endif::VK_EXT_vertex_input_dynamic_state[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-None-04893]]
+    The pipeline must: be created with a
+    <<pipeline-graphics-subsets-complete, complete set of state>>
+ifdef::VK_EXT_color_write_enable[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04800]]
+    If the <<features-colorWriteEnable, 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 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-VkGraphicsPipelineCreateInfo-sampleShadingEnable-04900]]
+    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-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_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06051]]
+    pname:renderPass must: not be dlink:VK_NULL_HANDLE
+endif::VK_KHR_dynamic_rendering[]
+ifdef::VK_KHR_dynamic_rendering[]
+  * [[VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06052]]
+    If the <<features-dynamicRendering,pname:dynamicRendering>> feature is
+    not enabled, pname:renderPass must: not be dlink:VK_NULL_HANDLE
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06053]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipeline-graphics-subsets-fragment-shader, fragment
+    shader state>>, and either of
+    slink:VkPipelineRenderingCreateInfoKHR::depthAttachmentFormat or
+    slink:VkPipelineRenderingCreateInfoKHR::stencilAttachmentFormat are not
+    ename:VK_FORMAT_UNDEFINED, pname:pDepthStencilState must: be a valid
+    pointer to a valid slink:VkPipelineDepthStencilStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06054]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipeline-graphics-subsets-fragment-output, fragment
+    output interface state>>, and
+    slink:VkPipelineRenderingCreateInfoKHR::colorAttachmentCount is not
+    equal to `0`, pname:pColorBlendState must: be a valid pointer to a valid
+    slink:VkPipelineColorBlendStateCreateInfo structure
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06055]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE and the pipeline is being
+    created with <<pipeline-graphics-subsets-fragment-output, fragment
+    output interface state>>, pname:pColorBlendState->attachmentCount must:
+    be equal to slink:VkPipelineRenderingCreateInfoKHR::colorAttachmentCount
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06056]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE and the pipeline is being
+    created with <<pipeline-graphics-subsets-fragment-shader, fragment
+    shader state>> the fragment shader must: not read from any input
+    attachment
+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 <<pipeline-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, the pname:viewMask member of a
+    slink:VkPipelineRenderingCreateInfoKHR structure included in the
+    pname:pNext chain 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 <<pipeline-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, the pname:viewMask member of a
+    slink:VkPipelineRenderingCreateInfoKHR structure included in the
+    pname:pNext chain 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-06059]]
+    If pname:renderPass is dlink:VK_NULL_HANDLE, the pipeline is being
+    created with <<pipeline-graphics-subsets-pre-rasterization,
+    pre-rasterization shader state>>, and the pname:viewMask member of a
+    slink:VkPipelineRenderingCreateInfoKHR structure included in the
+    pname:pNext chain is not `0`, shaders in pname:pStages must: not include
+    variables decorated with the code:Layer built-in decoration in their
+    interfaces
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06060]]
+    If the pipeline is being created with
+    <<pipeline-graphics-subsets-fragment-output, fragment output interface
+    state>> and pname:renderPass is dlink:VK_NULL_HANDLE,
+    pname:pColorBlendState->attachmentCount must: be equal to the
+    pname:colorAttachmentCount member of the
+    slink:VkPipelineRenderingCreateInfoKHR structure included in the
+    pname:pNext chain
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06061]]
+    If the pipeline is being created with
+    <<pipeline-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
+  * [[VUID-VkGraphicsPipelineCreateInfo-renderPass-06062]]
+    If the pipeline is being created with
+    <<pipeline-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:VkPipelineRenderingCreateInfoKHR, 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 is being created with
+    <<pipeline-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:VkPipelineRenderingCreateInfoKHR::pname:colorAttachmentCount
+endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
+endif::VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/structs/VkGraphicsPipelineCreateInfo.txt[]
+--
+
+ifdef::VK_KHR_dynamic_rendering[]
+[open,refpage='VkPipelineRenderingCreateInfoKHR',desc='Structure specifying attachment formats',type='structs']
+--
+The sname:VkPipelineRenderingCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkPipelineRenderingCreateInfoKHR.txt[]
+
+  * pname:sType is the type of 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 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 this structure
+is present in the pname:pNext chain of slink:VkGraphicsPipelineCreateInfo,
+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.
+
+.Valid Usage
+****
+  * [[VUID-VkPipelineRenderingCreateInfoKHR-pColorAttachmentFormats-06064]]
+    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
+  * [[VUID-VkPipelineRenderingCreateInfoKHR-depthAttachmentFormat-06065]]
+    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-VkPipelineRenderingCreateInfoKHR-stencilAttachmentFormat-06164]]
+    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-VkPipelineRenderingCreateInfoKHR-depthAttachmentFormat-06165]]
+    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-VkPipelineRenderingCreateInfoKHR-multiview-06066]]
+    If the <<features-multiview,pname:multiview>> feature is not enabled,
+    pname:viewMask must: be `0`
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkPipelineRenderingCreateInfoKHR-viewMask-06067]]
+    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/VkPipelineRenderingCreateInfoKHR.txt[]
+--
+endif::VK_KHR_dynamic_rendering[]
+
+[open,refpage='VkPipelineCreateFlagBits',desc='Bitmask controlling how a pipeline is created',type='enums']
+--
+Possible values of the pname:flags member of
+slink:VkGraphicsPipelineCreateInfo,
+ifdef::VK_KHR_ray_tracing_pipeline[slink:VkRayTracingPipelineCreateInfoKHR,]
+ifdef::VK_NV_ray_tracing[slink:VkRayTracingPipelineCreateInfoNV,]
+and slink:VkComputePipelineCreateInfo, specifying how a pipeline is created,
+are:
+
+include::{generated}/api/enums/VkPipelineCreateFlagBits.txt[]
+
+  * 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.
+  * 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.
+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.
+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[]
+    This is available in ray tracing pipelines.
+endif::VK_KHR_ray_tracing_pipeline[]
+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_EXT_pipeline_creation_cache_control[]
+  * ename:VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT
+    specifies that pipeline creation will fail if a compile is required for
+    creation of a valid slink:VkPipeline object;
+    ename:VK_PIPELINE_COMPILE_REQUIRED_EXT 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_EXT specifies that
+    control will be returned to the application on failure of the
+    corresponding pipeline rather than continuing to create additional
+    pipelines.
+endif::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_KHR_dynamic_rendering[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * ename:VK_PIPELINE_RASTERIZATION_STATE_CREATE_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_RASTERIZATION_STATE_CREATE_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_KHR_dynamic_rendering[]
+
+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.
+--
+
+[open,refpage='VkPipelineCreateFlags',desc='Bitmask of VkPipelineCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkPipelineCreateFlags.txt[]
+
+tname:VkPipelineCreateFlags is a bitmask type for setting a mask of zero or
+more elink:VkPipelineCreateFlagBits.
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineDynamicStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineDynamicStateCreateFlags.txt[]
+
+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.txt[]
+
+  * 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.
+  * 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 pname:depthBiasEnable in
+    slink:VkPipelineRasterizationStateCreateInfo set to ename:VK_TRUE.
+  * 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:pViewportScalings 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.
+    The elink:VkDiscardRectangleModeEXT and the number of active discard
+    rectangles is still specified by the pname:discardRectangleMode and
+    pname:discardRectangleCount members of
+    slink:VkPipelineDiscardRectangleStateCreateInfoEXT.
+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.
+    The number of exclusive scissor rectangles used by a pipeline is still
+    specified by the pname:exclusiveScissorCount member of
+    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV.
+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_EXT_extended_dynamic_state[]
+  * ename:VK_DYNAMIC_STATE_CULL_MODE_EXT specifies that the pname:cullMode
+    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
+    and must: be set dynamically with flink:vkCmdSetCullModeEXT before any
+    drawing commands.
+  * ename:VK_DYNAMIC_STATE_FRONT_FACE_EXT specifies that the pname:frontFace
+    state in slink:VkPipelineRasterizationStateCreateInfo will be ignored
+    and must: be set dynamically with flink:vkCmdSetFrontFaceEXT before any
+    drawing commands.
+  * ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT 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:vkCmdSetPrimitiveTopologyEXT before any drawing commands.
+  * ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT specifies that the
+    pname:viewportCount and pname:pViewports state in
+    slink:VkPipelineViewportStateCreateInfo will be ignored and must: be set
+    dynamically with flink:vkCmdSetViewportWithCountEXT before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT specifies that the
+    pname:scissorCount and pname:pScissors state in
+    slink:VkPipelineViewportStateCreateInfo will be ignored and must: be set
+    dynamically with flink:vkCmdSetScissorWithCountEXT before any draw call.
+  * ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT specifies that
+    the pname:stride state in slink:VkVertexInputBindingDescription will be
+    ignored and must: be set dynamically with
+    flink:vkCmdBindVertexBuffers2EXT before any draw call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT specifies that the
+    pname:depthTestEnable state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthTestEnableEXT before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT specifies that the
+    pname:depthWriteEnable state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthWriteEnableEXT before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT specifies that the
+    pname:depthCompareOp state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthCompareOpEXT before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT specifies that the
+    pname:depthBoundsTestEnable state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetDepthBoundsTestEnableEXT before any
+    draw call.
+  * ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT specifies that the
+    pname:stencilTestEnable state in
+    slink:VkPipelineDepthStencilStateCreateInfo will be ignored and must: be
+    set dynamically with flink:vkCmdSetStencilTestEnableEXT before any draw
+    call.
+  * ename:VK_DYNAMIC_STATE_STENCIL_OP_EXT 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:vkCmdSetStencilOpEXT before any draws are performed with a
+    pipeline state with sname:VkPipelineDepthStencilStateCreateInfo member
+    pname:stencilTestEnable set to ename:VK_TRUE
+endif::VK_EXT_extended_dynamic_state[]
+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.
+  * ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT specifies that the
+    pname:rasterizerDiscardEnable state in
+    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
+    be set dynamically with flink:vkCmdSetRasterizerDiscardEnableEXT before
+    any drawing commands.
+  * ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT specifies that the
+    pname:depthBiasEnable state in
+    slink:VkPipelineRasterizationStateCreateInfo will be ignored and must:
+    be set dynamically with flink:vkCmdSetDepthBiasEnableEXT before any
+    drawing commands.
+  * 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.
+  * ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT specifies that the
+    pname:primitiveRestartEnable state in
+    slink:VkPipelineInputAssemblyStateCreateInfo will be ignored and must:
+    be set dynamically with flink:vkCmdSetPrimitiveRestartEnableEXT before
+    any drawing commands.
+endif::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[]
+--
+
+
+=== Valid Combinations of Stages for Graphics Pipelines
+
+ifdef::VK_NV_mesh_shader[]
+The geometric primitive processing can either be handled 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[]
+
+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 unmodified.
+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[]
+  * 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[]
+
+
+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
+invidual 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.txt[]
+
+  * pname:sType is the type of 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[]
+  * [[VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02883]]
+    All elements of pname:pGroups must: use the same shader stage
+    combinations
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_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[]
+  * [[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,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/structs/VkGraphicsPipelineShaderGroupsCreateInfoNV.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VK_SHADER_UNUSED_NV.txt[]
+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.txt[]
+
+  * pname:device is the logical device that creates the ray tracing
+    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: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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/create_ray_tracing_pipelines_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCreateRayTracingPipelinesNV.txt[]
+--
+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.txt[]
+
+  * 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.
+  * 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: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 re-use the shader group handles provided in
+slink:VkRayTracingShaderGroupCreateInfoKHR::pname:pShaderGroupCaptureReplayHandle
+when
+slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
+is enabled.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/create_ray_tracing_pipelines_common.txt[]
+include::{chapters}/commonvalidity/deferred_operations_common.txt[]
+  * [[VUID-vkCreateRayTracingPipelinesKHR-rayTracingPipeline-03586]]
+    The <<features-rayTracingPipeline, pname:rayTracingPipeline>> feature
+    must: be enabled
+ifdef::VK_EXT_pipeline_creation_cache_control+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_EXT
+endif::VK_EXT_pipeline_creation_cache_control+VK_KHR_deferred_host_operations[]
+****
+
+include::{generated}/validity/protos/vkCreateRayTracingPipelinesKHR.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.
+  * 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>>.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/ray_tracing_pipeline_create_info_common.txt[]
+  * [[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_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_EXT at
+    the same time
+endif::VK_EXT_pipeline_creation_cache_control[]
+****
+
+include::{generated}/validity/structs/VkRayTracingPipelineCreateInfoNV.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.
+  * 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>>.
+
+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>>.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/ray_tracing_pipeline_create_info_common.txt[]
+  * [[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`, its pname:pLibraryInterface member 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-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-03600]]
+    If pname:pLibraryInfo is not `NULL` and its pname:libraryCount is `0`,
+    pname:stageCount must: not be `0`
+  * [[VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03601]]
+    If pname:pLibraryInfo is not `NULL` and 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
+****
+
+include::{generated}/validity/structs/VkRayTracingPipelineCreateInfoKHR.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.
+    Ignored if
+    slink:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineShaderGroupHandleCaptureReplay
+    is ename:VK_FALSE.
+
+.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.txt[]
+--
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkRayTracingShaderGroupTypeNV.txt[]
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+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.txt[]
+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.
+
+.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[]
+  * [[VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-03482]]
+    pname:pipeline must: have not been created with
+    ename:VK_PIPELINE_CREATE_LIBRARY_BIT_KHR
+endif::VK_KHR_pipeline_library[]
+****
+
+include::{generated}/validity/protos/vkGetRayTracingShaderGroupHandlesKHR.txt[]
+--
+
+ifdef::VK_KHR_ray_tracing_pipeline[]
+[open,refpage='vkGetRayTracingCaptureReplayShaderGroupHandlesKHR',desc='Query ray tracing capture replay pipeline shader group handles',type='protos']
+--
+:refpage: vkGetRayTracingCaptureReplayShaderGroupHandlesKHR
+
+To query the optional capture handle information of shaders in the ray
+tracing pipeline, call:
+
+include::{generated}/api/protos/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.txt[]
+
+  * 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.
+
+.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
+****
+
+include::{generated}/validity/protos/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkShaderGroupShaderKHR',desc='Shader group shaders',type='enums']
+--
+Possible values of pname:groupShader in
+flink:vkGetRayTracingShaderGroupStackSizeKHR are:
+
+include::{generated}/api/enums/VkShaderGroupShaderKHR.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyPipeline.txt[]
+--
+
+
+[[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_EXT_pipeline_creation_cache_control[]
+If creation fails for a pipeline that had
+ename:VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT 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_EXT_pipeline_creation_cache_control[]
+
+[[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.
+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.
+
+
+[[pipelines-cache]]
+== Pipeline Cache
+
+[open,refpage='VkPipelineCache',desc='Opaque handle to a pipeline cache object',type='handles']
+--
+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.
+
+Pipeline cache objects are represented by sname:VkPipelineCache handles:
+
+include::{generated}/api/handles/VkPipelineCache.txt[]
+--
+
+[[pipelines-cache-create]]
+=== Creating a Pipeline Cache
+
+[open,refpage='vkCreatePipelineCache',desc='Creates a new pipeline cache',type='protos']
+--
+To create pipeline cache objects, call:
+
+include::{generated}/api/protos/vkCreatePipelineCache.txt[]
+
+  * 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.
+
+[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.
+====
+
+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.
+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.
+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_EXT_pipeline_creation_cache_control[]
+If pname:flags of pname:pCreateInfo includes
+ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, all commands
+that modify the returned pipeline cache object must: be
+<<fundamentals-threadingbehavior,externally synchronized>>.
+endif::VK_EXT_pipeline_creation_cache_control[]
+
+[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.
+====
+
+include::{generated}/validity/protos/vkCreatePipelineCache.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+  * pname:flags is a bitmask of elink:VkPipelineCacheCreateFlagBits
+    specifying the behavior of the pipeline cache.
+endif::VK_EXT_pipeline_creation_cache_control[]
+ifndef::VK_EXT_pipeline_creation_cache_control[]
+  * pname:flags is reserved for future use.
+endif::VK_EXT_pipeline_creation_cache_control[]
+  * pname:initialDataSize is the number of bytes in pname:pInitialData.
+    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.
+
+.Valid Usage
+****
+  * [[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
+ifdef::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_EXT
+endif::VK_EXT_pipeline_creation_cache_control[]
+****
+
+include::{generated}/validity/structs/VkPipelineCacheCreateInfo.txt[]
+--
+
+[open,refpage='VkPipelineCacheCreateFlags', desc='Bitmask of VkPipelineCreateFlagBits', type='flags']
+--
+include::{generated}/api/flags/VkPipelineCacheCreateFlags.txt[]
+
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+tname:VkPipelineCacheCreateFlags is a bitmask type for setting a mask of
+zero or more elink:VkPipelineCacheCreateFlagBits.
+endif::VK_EXT_pipeline_creation_cache_control[]
+ifndef::VK_EXT_pipeline_creation_cache_control[]
+tname:VkPipelineCacheCreateFlags is a bitmask type for setting a mask, but
+is currently reserved for future use.
+endif::VK_EXT_pipeline_creation_cache_control[]
+--
+
+ifdef::VK_EXT_pipeline_creation_cache_control[]
+[open,refpage='VkPipelineCacheCreateFlagBits',desc='Bitmask specifying the behavior of the pipeline cache',type='enums']
+--
+Possible values of the pname:flags member of
+slink:VkPipelineCacheCreateInfo, specifying the behavior of the pipeline
+cache, are:
+
+include::{generated}/api/enums/VkPipelineCacheCreateFlagBits.txt[]
+
+  * ename:VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT 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_EXT_pipeline_creation_cache_control[]
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[[pipelines-cache-header]]
+=== Pipeline Cache Header
+
+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.
+
+[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.txt[]
+
+  * pname:headerSize is the length in bytes of the pipeline cache header.
+  * pname:headerVersion is a elink:VkPipelineCacheHeaderVersion enum 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
+****
+  * [[VUID-VkPipelineCacheHeaderVersionOne-headerSize-04967]]
+    pname:headerSize must: be 32
+  * [[VUID-VkPipelineCacheHeaderVersionOne-headerVersion-04968]]
+    pname:headerVersion must: be ename:VK_PIPELINE_CACHE_HEADER_VERSION_ONE
+****
+
+include::{generated}/validity/structs/VkPipelineCacheHeaderVersionOne.txt[]
+--
+
+
+[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.txt[]
+
+  * ename:VK_PIPELINE_CACHE_HEADER_VERSION_ONE specifies version one of the
+    pipeline cache.
+--
+
+[[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.txt[]
+
+  * 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.
+
+.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`
+****
+
+include::{generated}/validity/protos/vkDestroyPipelineCache.txt[]
+--
+
+
+[[pipelines-specialization-constants]]
+== Specialization Constants
+
+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.
+====
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkSpecializationMapEntry',desc='Structure specifying a specialization map entry',type='structs']
+--
+The sname:VkSpecializationMapEntry structure is defined as:
+
+include::{generated}/api/structs/VkSpecializationMapEntry.txt[]
+
+  * 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.txt[]
+--
+
+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[] =
+{
+    {
+        13,                             // constantID
+        0 * sizeof(uint32_t),           // offset
+        sizeof(uint32_t)                // size
+    },
+    {
+        42,                             // constantID
+        1 * sizeof(uint32_t),           // offset
+        sizeof(uint32_t)                // size
+    },
+    {
+        3,                              // constantID
+        2 * sizeof(uint32_t),           // offset
+        sizeof(uint32_t)                // size
+    }
+};
+
+const uint32_t data[] = { 16, 8, 4 }; // our workgroup size is 16x8x4
+
+const VkSpecializationInfo info =
+{
+    3,                                  // mapEntryCount
+    entries,                            // pMapEntries
+    3 * sizeof(uint32_t),               // dataSize
+    data,                               // pData
+};
+---------------------------------------------------
+
+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[] =
+{
+    {
+        0,                                    // constantID
+        offsetof(SpecializationData, data0),  // offset
+        sizeof(SpecializationData::data0)     // size
+    },
+    {
+        12,                                   // constantID
+        offsetof(SpecializationData, data1),  // offset
+        sizeof(SpecializationData::data1)     // size
+    }
+};
+
+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 =
+{
+    2,                                  // mapEntryCount
+    entries,                            // pMapEntries
+    sizeof(data),                       // dataSize
+    &data,                              // pData
+};
+---------------------------------------------------
+
+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[]
+[[pipeline-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[]
+The application must: maintain the lifetime of a pipeline library based on
+the pipelines that link with it.
+A pipeline library is considered in-use, as long as one of the linking
+pipelines is in-use.
+
+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.txt[]
+
+  * pname:sType is the type of 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
+****
+
+include::{generated}/validity/structs/VkPipelineLibraryCreateInfoKHR.txt[]
+--
+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.txt[]
+
+  * 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.
+
+[[pipeline-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 point.
+Commands that do not interact with the given pipeline type must: not be
+affected by the pipeline state.
+
+  * The pipeline bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE controls the
+    behavior of all <<dispatch, dispatching commands>>.
+  * The pipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS controls the
+    behavior of all <<drawing, drawing commands>>.
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+  * The pipeline bound to ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR
+    controls the behavior of flink:vkCmdTraceRaysKHR and
+    flink:vkCmdTraceRaysIndirectKHR.
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * The pipeline bound to
+    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI controls the
+    behavior of flink:vkCmdSubpassShadingHUAWEI.
+endif::VK_HUAWEI_subpass_shading[]
+
+.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,variable multisample rate>>
+    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
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+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_EXT or
+    ename:VK_DYNAMIC_STATE_VIEWPORT, and
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT 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`, 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,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_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdBindPipeline-pipeline-06195]]
+    If pname:pipeline is a graphics pipeline, this command has been called
+    inside a render pass instance started with flink:vkCmdBeginRenderingKHR,
+    and commands using the previously bound graphics pipeline have been
+    recorded within the render pass instance, then the value of
+    slink:VkPipelineRenderingCreateInfoKHR::pname:colorAttachmentCount
+    specified by this pipeline must: match that set in the previous pipeline
+  * [[VUID-vkCmdBindPipeline-pipeline-06196]]
+    If pname:pipeline is a graphics pipeline, this command has been called
+    inside a render pass instance started with flink:vkCmdBeginRenderingKHR,
+    and commands using the previously bound graphics pipeline have been
+    recorded within the render pass instance, then the elements of
+    slink:VkPipelineRenderingCreateInfoKHR::pname:pColorAttachmentFormats
+    specified by this pipeline must: match that set in the previous pipeline
+  * [[VUID-vkCmdBindPipeline-pipeline-06197]]
+    If pname:pipeline is a graphics pipeline, this command has been called
+    inside a render pass instance started with flink:vkCmdBeginRenderingKHR,
+    and commands using the previously bound graphics pipeline have been
+    recorded within the render pass instance, then the value of
+    slink:VkPipelineRenderingCreateInfoKHR::pname:depthAttachmentFormat
+    specified by this pipeline must: match that set in the previous pipeline
+  * [[VUID-vkCmdBindPipeline-pipeline-06194]]
+    If pname:pipeline is a graphics pipeline, this command has been called
+    inside a render pass instance started with flink:vkCmdBeginRenderingKHR,
+    and commands using the previously bound graphics pipeline have been
+    recorded within the render pass instance, then the value of
+    slink:VkPipelineRenderingCreateInfoKHR::pname:stencilAttachmentFormat
+    specified by this pipeline must: match that set in the previous pipeline
+endif::VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/protos/vkCmdBindPipeline.txt[]
+--
+
+[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.txt[]
+
+  * 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_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.txt[]
+
+  * 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,
+    sname:VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::pname:deviceGeneratedCommands>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdBindPipelineShaderGroupNV.txt[]
+--
+endif::VK_NV_device_generated_commands[]
+
+
+[[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 another pipeline bind.
+
+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 since the command buffer recording was begun, or the
+    last bound pipeline object with that state specified as static,
+    whichever was the latter
+
+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[]
+[[pipelines-shader-information]]
+== Pipeline Shader Information
+endif::VK_AMD_shader_info,VK_KHR_pipeline_executable_properties[]
+
+ifdef::VK_KHR_pipeline_executable_properties[]
+include::VK_KHR_pipeline_executable_properties/pipelines.txt[]
+endif::VK_KHR_pipeline_executable_properties[]
+
+ifdef::VK_AMD_shader_info[]
+include::VK_AMD_shader_info.txt[]
+endif::VK_AMD_shader_info[]
+
+// These includes have their own section headers
+
+ifdef::VK_AMD_pipeline_compiler_control[]
+include::VK_AMD_pipeline_compiler_control.txt[]
+endif::VK_AMD_pipeline_compiler_control[]
+
+ifdef::VK_EXT_pipeline_creation_feedback[]
+include::VK_EXT_pipeline_creation_feedback/pipelines.txt[]
+endif::VK_EXT_pipeline_creation_feedback[]
diff --git a/registry/vulkan/chapters/primsrast.txt b/registry/vulkan/chapters/primsrast.txt
new file mode 100644
index 0000000..eef2402
--- /dev/null
+++ b/registry/vulkan/chapters/primsrast.txt
@@ -0,0 +1,3610 @@
+// Copyright 2015-2021 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.txt[]
+
+  * pname:sType is the type of 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,depth clamping>> feature is not enabled,
+    pname:depthClampEnable must: be ename:VK_FALSE
+ifndef::VK_NV_fill_rectangle[]
+  * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01413]]
+    If the <<features-fillModeNonSolid,non-solid fill modes>> feature is not
+    enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL
+endif::VK_NV_fill_rectangle[]
+ifdef::VK_NV_fill_rectangle[]
+  * [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507]]
+    If the <<features-fillModeNonSolid,non-solid fill modes>> feature is not
+    enabled, pname:polygonMode must: be ename:VK_POLYGON_MODE_FILL or
+    ename:VK_POLYGON_MODE_FILL_RECTANGLE_NV
+  * [[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.txt[]
+--
+
+[open,refpage='VkPipelineRasterizationStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineRasterizationStateCreateFlags.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineRasterizationDepthClipStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineRasterizationDepthClipStateCreateFlagsEXT.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.
+  * 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,sample rate shading>> feature is not
+    enabled, pname:sampleShadingEnable must: be ename:VK_FALSE
+  * [[VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785]]
+    If the <<features-alphaToOne,alpha to one>> 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.txt[]
+--
+
+[open,refpage='VkPipelineMultisampleStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineMultisampleStateCreateFlags.txt[]
+
+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.txt[]
+--
+
+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_EXT_extended_dynamic_state2[]
+[open,refpage='vkCmdSetRasterizerDiscardEnableEXT',desc='Control whether primitives are discarded before the rasterization stage dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically enable>> whether primitives are
+discarded before the rasterization stage, call:
+
+include::{generated}/api/protos/vkCmdSetRasterizerDiscardEnableEXT.txt[]
+
+  * 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 when
+the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:rasterizerDiscardEnable
+value used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetRasterizerDiscardEnableEXT-None-04871]]
+    The <<features-extendedDynamicState2, extendedDynamicState2>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetRasterizerDiscardEnableEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state2[]
+
+
+ifdef::VK_EXT_transform_feedback[]
+[[primsrast-stream]]
+== Controlling the Vertex Stream Used for Rasterization
+
+By default vertex data output from the last
+<<pipeline-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
+<<pipeline-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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineRasterizationStateStreamCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineRasterizationStateStreamCreateFlagsEXT.txt[]
+
+tname:VkPipelineRasterizationStateStreamCreateFlagsEXT is a bitmask type for
+setting a mask, but is currently reserved for future use.
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+
+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.txt[]
+
+  * 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.
+An implementation may: choose to assign the same associated data to more
+than one sample.
+The location for evaluating such associated data may: be anywhere within the
+fragment area including the fragment's center location [eq]#(x~f~,y~f~)# or
+any of the sample locations.
+When pname:rasterizationSamples is ename:VK_SAMPLE_COUNT_1_BIT, the
+fragment's center location must: be used.
+The different associated data values need not all be evaluated at the same
+location.
+
+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)#.
+
+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~ * 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~ * 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*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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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 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-sampleLocationsPerPixel-01529]]
+    The pname:sampleLocationsPerPixel member of pname:pSampleLocationsInfo
+    must: equal the pname:rasterizationSamples member of the
+    slink:VkPipelineMultisampleStateCreateInfo structure the bound graphics
+    pipeline has been created with
+  * [[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.txt[]
+--
+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']
+--
+To query available shading rates, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceFragmentShadingRatesKHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetPhysicalDeviceFragmentShadingRatesKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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 that control 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.txt[]
+--
+
+[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.txt[]
+
+  * 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 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.txt[]
+--
+
+
+[[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
+<<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+stage>>.
+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[]
+
+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.txt[]
+
+  * 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 may: clamp the [eq]#C~xy~# result of each combiner operation
+separately, or only after the second combiner operation.
+
+If the final combined rate 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, [eq]#C~xy~' = C~xy~#.
+Otherwise, [eq]#C~xy~'# 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]#C~x~' {leq} C~x~# and [eq]#C~y~' {leq} C~y~#.
+  ** Implementations may: also keep rates where [eq]#C~x~' {leq} C~y~# and
+     [eq]#C~y~' {leq} C~x~#.
+  . Keep only rates with the highest area ([eq]#C~x~' {times} C~y~'#).
+  . Keep only rates with the lowest aspect ratio ([eq]#C~x~' {plus} C~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.txt[]
+
+  * 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.txt[]
+
+  * pname:sType is the type of 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 that control 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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 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]]
+    <<features-fragmentShadingRateEnums,pname:fragmentShadingRateEnums>>
+    must: be enabled
+  * [[VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04580]]
+    One of <<features-pipelineFragmentShadingRate,
+    pname:pipelineFragmentShadingRate>>,
+    <<features-primitiveFragmentShadingRate,
+    pname:primitiveFragmentShadingRate>>, or
+    <<features-attachmentFragmentShadingRate,
+    pname:attachmentFragmentShadingRate>> 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.txt[]
+--
+
+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 the value of code:totalSamples used by
+sample shading and to the value of
+<<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, shading rate image>> 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 that control the shading rate.
+
+The sname:VkPipelineViewportShadingRateImageStateCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineViewportShadingRateImageStateCreateInfoNV.txt[]
+
+  * pname:sType is the type of 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,multiple viewports>> 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.txt[]
+--
+
+[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.txt[]
+
+  * 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,shading rate image>> 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.txt[]
+--
+
+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-shading-rate-texel-size, 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-shading-rate-palette-size, shading rate
+image palette size>>.
+
+[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.txt[]
+
+  * 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 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,shading rate image>> 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,multiple viewports>> feature is not
+    enabled, pname:firstViewport must: be `0`
+  * [[VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-02069]]
+    If the <<features-multiViewport,multiple viewports>> feature is not
+    enabled, pname:viewportCount must: be `1`
+****
+
+include::{generated}/validity/protos/vkCmdSetViewportShadingRatePaletteNV.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+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.txt[]
+
+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-shading-rate-max-coarse-samples, 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
+code:totalSamples 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 the value of code:totalSamples used for
+<<primsrast-sampleshading, sample shading>>.
+
+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,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 that control the order of coverage
+samples in fragments larger than one pixel.
+
+The sname:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV structure is
+defined as:
+
+include::{generated}/api/structs/VkPipelineViewportCoarseSampleOrderStateCreateInfoNV.txt[]
+
+  * pname:sType is the type of 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 of which specifies 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.txt[]
+--
+
+[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.txt[]
+
+  * 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 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.
+The structure is defined as:
+
+include::{generated}/api/structs/VkCoarseSampleOrderCustomNV.txt[]
+
+  * 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.
+
+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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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 of which specifies
+    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 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.txt[]
+--
+
+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: provide a minimum of
+[eq]#max({lceil} pname:minSampleShadingFactor {times} pname:totalSamples
+{rceil}, 1)# unique associated data for each fragment, where
+pname:minSampleShadingFactor is the minimum fraction of sample shading.
+ifdef::VK_AMD_mixed_attachment_samples[]
+If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled and the
+subpass uses color attachments, pname:totalSamples is the number of samples
+of the color attachments.
+Otherwise,
+endif::VK_AMD_mixed_attachment_samples[]
+pname:totalSamples is the value of
+slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
+specified at pipeline creation time.
+These are associated with the samples in an implementation-dependent manner.
+When pname:minSampleShadingFactor is `1.0`, a separate set of associated
+data are evaluated for each sample, and each set of values is evaluated at
+the sample location.
+
+Sample shading is enabled for a graphics pipeline:
+
+  * If the interface of the fragment shader entry point of the graphics
+    pipeline includes an input variable decorated with code:SampleId or
+    code:SamplePosition.
+    In this case pname:minSampleShadingFactor takes the value `1.0`.
+  * Else if the pname:sampleShadingEnable member of the
+    slink:VkPipelineMultisampleStateCreateInfo structure specified when
+    creating the graphics pipeline is set to ename:VK_TRUE.
+    In this case pname:minSampleShadingFactor takes the value of
+    slink:VkPipelineMultisampleStateCreateInfo::pname:minSampleShading.
+
+Otherwise, sample shading is considered disabled.
+
+
+ifdef::VK_NV_fragment_shader_barycentric[]
+[[primsrast-barycentric]]
+== Barycentric Interpolation
+
+When the pname:fragmentShaderBarycentric feature is enabled, the
+code:PerVertexNV <<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.
+
+ifndef::VK_NV_mesh_shader[]
+When <<tessellation, tessellation>> and <<geometry, geometry shading>>
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_mesh_shader[]
+When <<tessellation, tessellation>>, <<geometry, geometry shading>>, and
+<<mesh,mesh shading>>
+endif::VK_NV_mesh_shader[]
+are not active, fragment shader inputs decorated with code:PerVertexNV 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:PerVertexNV is accessed with any other
+vertex index value, 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           | -           | -
+| ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST                            | 2i          | 2i+1        | -
+| ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP                           | i           | 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        | -
+| ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY            | i+1         | 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
+| ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP (odd)                 | i+1         | i           | i+2
+| 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[]
+or mesh
+endif::VK_NV_mesh_shader[]
+shading is active, primitives processed by fragment shaders are assembled
+from the vertices emitted by the geometry
+ifdef::VK_NV_mesh_shader[]
+or mesh
+endif::VK_NV_mesh_shader[]
+shader.
+In this case, the vertices used for fragment shader inputs decorated with
+code:PerVertexNV 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:PerVertexNV, the vertex ordering used in this case will be consistent
+with the ordering used to derive the values of inputs decorated with
+code:BaryCoordNV or code:BaryCoordNoPerspNV.
+
+Fragment shader inputs decorated with code:BaryCoordNV or
+code:BaryCoordNoPerspNV 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 (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 (1,0,0) and (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 (1,0,0), (0,1,0), and (0,0,1), respectively.
+For code:BaryCoordNV, the values are obtained using perspective
+interpolation.
+For code:BaryCoordNoPerspNV, the values are obtained using linear
+interpolation.
+
+endif::VK_NV_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 that controls 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.
+
+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.txt[]
+
+  * pname:sType is the type of 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,rectangularLines>> feature must: be enabled
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02769]]
+    If pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the
+    <<features-bresenhamLines,bresenhamLines>> feature must: be enabled
+  * [[VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02770]]
+    If pname:lineRasterizationMode is
+    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
+    <<features-bresenhamLines,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,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,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,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,stippledRectangularLines>> feature
+    must: be enabled and slink:VkPhysicalDeviceLimits::pname:strictLines
+    must: be ename:VK_TRUE
+****
+
+include::{generated}/validity/structs/VkPipelineRasterizationLineStateCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkLineRasterizationModeEXT',desc='Line rasterization modes',type='enums']
+--
+Possible values of
+slink:VkPipelineRasterizationLineStateCreateInfoEXT::pname:lineRasterizationMode
+are:
+
+include::{generated}/api/enums/VkLineRasterizationModeEXT.txt[]
+
+  * 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>>.
+--
+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.txt[]
+
+  * 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 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,wide lines>> feature is not enabled,
+    pname:lineWidth must: be `1.0`
+****
+
+include::{generated}/validity/protos/vkCmdSetLineWidth.txt[]
+--
+
+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.)
+
+[[line_perspective_interpolation]]
+The value of an associated datum [eq]#f# for the fragment, whether it be a
+shader output or the clip [eq]#w# coordinate, must: be determined using
+_perspective interpolation_:
+
+[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]]
+Depth values for lines must: be determined using _linear interpolation_:
+
+  {empty}:: [eq]#z = (1 - t) z~a~ {plus} t z~b~#
+
+where [eq]#z~a~# and [eq]#z~b~# are the depth values of the starting and
+ending endpoints of the segment, respectively.
+
+The code:NoPerspective and code:Flat
+<<shaders-interpolation-decorations,interpolation decorations>> can: be used
+with fragment shader inputs to declare how they are interpolated.
+When neither decoration is applied, <<line_perspective_interpolation,
+perspective interpolation>> is performed as described above.
+When the code:NoPerspective decoration is used, <<line_linear_interpolation,
+linear interpolation>> is performed in the same fashion as for depth values,
+as described above.
+When the code:Flat decoration is used, no interpolation is performed, and
+outputs are taken from the corresponding input value of the
+<<vertexpostproc-flatshading,provoking vertex>> corresponding to that
+primitive.
+
+ifdef::VK_NV_fragment_shader_barycentric[]
+When the pname:fragmentShaderBarycentric feature is enabled, the
+code:PerVertexNV <<shaders-interpolation-decorations, interpolation
+decoration>> can: also be used with fragment shader inputs which indicate
+that the decorated inputs are not interpolated and can: only be accessed
+using an extra array dimension, where the extra index identifies one of the
+vertices of the primitive that produced the fragment.
+endif::VK_NV_fragment_shader_barycentric[]
+
+The above description documents the preferred method of line rasterization,
+and must: be used when the implementation advertises the pname:strictLines
+limit in slink:VkPhysicalDeviceLimits as ename:VK_TRUE.
+
+When pname:strictLines is ename:VK_FALSE, 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>>.
+
+
+[[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.txt[]
+
+  * 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
+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.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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_EXT_extended_dynamic_state[]
+[open,refpage='vkCmdSetFrontFaceEXT',desc='Set front face orientation dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the front face orientation,
+call:
+
+include::{generated}/api/protos/vkCmdSetFrontFaceEXT.txt[]
+
+  * 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
+when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_FRONT_FACE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:frontFace value used to
+create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetFrontFaceEXT-None-03383]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetFrontFaceEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state[]
+
+
+[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.txt[]
+
+  * 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.txt[]
+
+tname:VkCullModeFlags is a bitmask type for setting a mask of zero or more
+elink:VkCullModeFlagBits.
+--
+
+ifdef::VK_EXT_extended_dynamic_state[]
+[open,refpage='vkCmdSetCullModeEXT',desc='Set cull mode dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the cull mode, call:
+
+include::{generated}/api/protos/vkCmdSetCullModeEXT.txt[]
+
+  * 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 when the
+graphics pipeline is created with ename:VK_DYNAMIC_STATE_CULL_MODE_EXT set
+in slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:cullMode value used to
+create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetCullModeEXT-None-03384]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetCullModeEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state[]
+
+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]]
+The value of an associated datum [eq]#f# for a fragment produced by
+rasterizing a triangle, whether it be a shader output or the clip [eq]#w#
+coordinate, must: be determined using perspective interpolation:
+
+[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 - this must: be the location of the
+fragment center or the location of a sample.
+When pname:rasterizationSamples is ename:VK_SAMPLE_COUNT_1_BIT, the fragment
+center must: be used.
+
+[[triangle_linear_interpolation]]
+Depth values for triangles must: be determined using linear interpolation:
+
+  {empty}:: [eq]#z = a z~a~ {plus} b z~b~ {plus} c z~c~#
+
+where [eq]#z~a~#, [eq]#z~b~#, and [eq]#z~c~# are the depth values of
+[eq]#p~a~#, [eq]#p~b~#, and [eq]#p~c~#, respectively.
+
+The code:NoPerspective and code:Flat
+<<shaders-interpolation-decorations,interpolation decorations>> can: be used
+with fragment shader inputs to declare how they are interpolated.
+When neither decoration is applied, <<triangle_perspective_interpolation,
+perspective interpolation>> is performed as described above.
+When the code:NoPerspective decoration is used,
+<<triangle_linear_interpolation, linear interpolation>> is performed in the
+same fashion as for depth values, as described above.
+When the code:Flat decoration is used, no interpolation is performed, and
+outputs are taken from the corresponding input value of the
+<<vertexpostproc-flatshading,provoking vertex>> corresponding to that
+primitive.
+
+ifdef::VK_AMD_shader_explicit_vertex_parameter[]
+When the `apiext:VK_AMD_shader_explicit_vertex_parameter` device extension
+is enabled the code:CustomInterpAMD <<shaders-interpolation-decorations,
+interpolation decoration>> can: also be used with fragment shader inputs
+which indicate that the decorated inputs can: only be accessed by the
+extended instruction code:InterpolateAtVertexAMD and allows accessing the
+value of the inputs for individual vertices of the primitive.
+endif::VK_AMD_shader_explicit_vertex_parameter[]
+
+ifdef::VK_NV_fragment_shader_barycentric[]
+When the pname:fragmentShaderBarycentric feature is enabled, the
+code:PerVertexNV <<shaders-interpolation-decorations, interpolation
+decoration>> can: also be used with fragment shader inputs which indicate
+that the decorated inputs are not interpolated and can: only be accessed
+using an extra array dimension, where the extra index identifies one of the
+vertices of the primitive that produced the fragment.
+endif::VK_NV_fragment_shader_barycentric[]
+
+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.txt[]
+
+  * 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.
+--
+
+
+[[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_EXT_extended_dynamic_state2[]
+pname:depthBiasEnable set with flink:vkCmdSetDepthBiasEnableEXT, or the
+corresponding
+endif::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_EXT_extended_dynamic_state2[]
+[open,refpage='vkCmdSetDepthBiasEnableEXT',desc='Control whether to bias fragment depth values dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically enable>> whether to bias fragment
+depth values, call:
+
+include::{generated}/api/protos/vkCmdSetDepthBiasEnableEXT.txt[]
+
+  * 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 when
+the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineRasterizationStateCreateInfo::pname:depthBiasEnable value
+used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDepthBiasEnableEXT-None-04872]]
+    The <<features-extendedDynamicState2, extendedDynamicState2>> feature
+    must: be enabled
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthBiasEnableEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state2[]
+
+
+[[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 minimum resolvable difference
+    [eq]#r# of the depth buffer
+  * 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 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).
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+The minimum resolvable difference [eq]#r# is a parameter that depends on the
+depth buffer representation.
+It is the smallest difference in framebuffer coordinate [eq]#z# values that
+is guaranteed to remain distinct throughout polygon rasterization and in the
+depth buffer.
+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 buffer representations, [eq]#r# is constant throughout
+the range of the entire depth buffer.
+Its value is implementation-dependent but must: be at most
+
+  {empty}:: [eq]#r = 2 {times} 2^-n^#
+
+for an n-bit buffer.
+For floating-point depth buffers, 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 buffer 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 buffer 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.
+
+[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.txt[]
+
+  * 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
+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:VkPipelineInputAssemblyStateCreateInfo::pname:depthBiasConstantFactor,
+pname:depthBiasClamp, and pname:depthBiasSlopeFactor values used to create
+the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetDepthBias-depthBiasClamp-00790]]
+    If the <<features-depthBiasClamp,depth bias clamping>> feature is not
+    enabled, pname:depthBiasClamp must: be `0.0`
+****
+
+include::{generated}/validity/protos/vkCmdSetDepthBias.txt[]
+--
+
+
+ifdef::VK_EXT_conservative_rasterization[]
+[[primsrast-conservativeraster]]
+=== Conservative Rasterization
+
+[open,refpage='VkPipelineRasterizationConservativeStateCreateInfoEXT',desc='Structure specifying conservative raster state',type='structs']
+--
+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.
+The sname:VkPipelineRasterizationConservativeStateCreateInfoEXT state is set
+by adding this structure to the pname:pNext chain of a
+sname:VkPipelineRasterizationStateCreateInfo structure when creating the
+graphics pipeline.
+Enabling these modes also affects line and point rasterization if the
+implementation sets
+sname:VkPhysicalDeviceConservativeRasterizationPropertiesEXT::pname:conservativePointAndLineRasterization
+to ename:VK_TRUE.
+
+sname:VkPipelineRasterizationConservativeStateCreateInfoEXT is defined as:
+
+include::{generated}/api/structs/VkPipelineRasterizationConservativeStateCreateInfoEXT.txt[]
+
+  * pname:sType is the type of 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.
+
+.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.txt[]
+--
+
+[open,refpage='VkPipelineRasterizationConservativeStateCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineRasterizationConservativeStateCreateFlagsEXT.txt[]
+
+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.txt[]
+
+  * 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.
+--
+
+When overestimate conservative rasterization is enabled, rather than
+evaluating coverage at individual sample locations, a determination is made
+of 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 will: 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
+of 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/registry/vulkan/chapters/queries.txt b/registry/vulkan/chapters/queries.txt
new file mode 100644
index 0000000..4f7a6e2
--- /dev/null
+++ b/registry/vulkan/chapters/queries.txt
@@ -0,0 +1,1686 @@
+// Copyright 2015-2021 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-bitstream-buffer-range, Video Encode Bitstream
+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_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.txt[]
+--
+
+[open,refpage='vkCreateQueryPool',desc='Create a new query pool object',type='protos']
+--
+To create a query pool, call:
+
+include::{generated}/api/protos/vkCreateQueryPool.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateQueryPool.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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,pipeline statistics queries>>
+    feature is not enabled, pname:queryType must: not be
+    ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
+  * [[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
+****
+
+include::{generated}/validity/structs/VkQueryPoolCreateInfo.txt[]
+--
+
+[open,refpage='VkQueryPoolCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkQueryPoolCreateFlags.txt[]
+
+tname:VkQueryPoolCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+ifdef::VK_KHR_performance_query[]
+include::VK_KHR_performance_query/querycreateinfo.txt[]
+endif::VK_KHR_performance_query[]
+
+[open,refpage='vkDestroyQueryPool',desc='Destroy a query pool object',type='protos']
+--
+To destroy a query pool, call:
+
+include::{generated}/api/protos/vkDestroyQueryPool.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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_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_NV_ray_tracing[]
+  * ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV specifies a
+    <<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_BITSTREAM_BUFFER_RANGE_KHR specifies a
+    <<queries-video-encode-bitstream-buffer-range, video encode bitstream
+    range query>>.
+endif::VK_KHR_video_encode_queue[]
+--
+
+
+[[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_KHR_synchronization2[]
+flink:vkCmdWriteTimestamp2KHR,
+endif::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:.
+Performing a query operation with flink:vkCmdBeginQuery and
+flink:vkCmdEndQuery changes the status to available when the query
+<<queries-operation-finished,finishes>>, and updates the numerical results.
+Both the availability status and numerical results are retrieved by calling
+either flink:vkGetQueryPoolResults or flink:vkCmdCopyQueryPoolResults.
+
+[[queries-order]]
+Query commands, for the same query and submitted to the same queue, execute
+in their entirety in <<synchronization-submission-order, submission order>>,
+relative to each other.
+In effect there is an implicit execution dependency from each such query
+command to all query commands previously submitted to the same queue.
+There is one significant exception to this; if the pname:flags parameter of
+flink:vkCmdCopyQueryPoolResults does not include
+ename:VK_QUERY_RESULT_WAIT_BIT, execution of flink:vkCmdCopyQueryPoolResults
+may: happen-before the results of flink:vkCmdEndQuery are available.
+
+After query pool creation, each query 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.txt[]
+
+  * 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.
+
+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.txt[]
+--
+
+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.txt[]
+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.txt[]
+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,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.txt[]
+--
+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,inherited
+queries>> 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[]
+
+[open,refpage='vkCmdBeginQuery',desc='Begin a query',type='protos']
+--
+:refpage: vkCmdBeginQuery
+
+To begin a query, call:
+
+include::{generated}/api/protos/vkCmdBeginQuery.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/query_begin_common.txt[]
+  * [[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_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[]
+include::{chapters}/commonvalidity/performance_query_begin_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdBeginQuery.txt[]
+--
+
+ifdef::VK_EXT_transform_feedback[]
+[open,refpage='vkCmdBeginQueryIndexedEXT',desc='Begin an indexed query',type='protos']
+--
+:refpage: vkCmdBeginQueryIndexedEXT
+
+To begin an indexed query, call:
+
+include::{generated}/api/protos/vkCmdBeginQueryIndexedEXT.txt[]
+
+  * 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
+    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.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/query_begin_common.txt[]
+  * [[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-02340]]
+    If the pname:queryType used to create pname:queryPool was not
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the pname:index must:
+    be zero
+  * [[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
+include::{chapters}/commonvalidity/performance_query_begin_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdBeginQueryIndexedEXT.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+
+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']
+--
+To end a query after the set of desired drawing or dispatching commands is
+executed, call:
+
+include::{generated}/api/protos/vkCmdEndQuery.txt[]
+
+  * 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.
+
+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[]
+
+[[queries-operation-finished]]
+As queries operate asynchronously, ending a query does not immediately set
+the query's status to available.
+A query is considered _finished_ when the final results of the query are
+ready to be retrieved by flink:vkGetQueryPoolResults and
+flink:vkCmdCopyQueryPoolResults, and this is when the query's status is set
+to available.
+
+Once a query is ended the query must: finish in finite time, unless the
+state of the query is changed using other commands, e.g. by issuing a reset
+of the query.
+
+.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::{generated}/validity/protos/vkCmdEndQuery.txt[]
+--
+
+ifdef::VK_EXT_transform_feedback[]
+[open,refpage='vkCmdEndQueryIndexedEXT',desc='Ends a query',type='protos']
+--
+To end an indexed query after the set of desired drawing or dispatching
+commands is recorded, call:
+
+include::{generated}/api/protos/vkCmdEndQueryIndexedEXT.txt[]
+
+  * 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 fname:vkCmdEndQueryIndexedEXT command operates the same as the
+flink:vkCmdEndQuery command, except that it also accepts a query type
+specific pname:index parameter.
+
+.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-02346]]
+    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-vkCmdEndQueryIndexedEXT-queryType-02347]]
+    If the pname:queryType used to create pname:queryPool was not
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the pname:index must:
+    be zero
+  * [[VUID-vkCmdEndQueryIndexedEXT-queryType-02723]]
+    If the pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT pname:index must:
+    equal the pname:index used to begin the query
+
+****
+
+include::{generated}/validity/protos/vkCmdEndQueryIndexedEXT.txt[]
+--
+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[]
+    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[]
+  * 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']
+--
+To retrieve status and results for a set of queries, call:
+
+include::{generated}/api/protos/vkGetQueryPoolResults.txt[]
+
+  * 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.
+
+The range of queries read is defined by [eq]#[pname:firstQuery,
+pname:firstQuery {plus} pname:queryCount - 1]#.
+For pipeline statistics queries, each query index in the pool contains one
+integer value for each bit that is enabled in
+slink:VkQueryPoolCreateInfo::pname:pipelineStatistics when the pool is
+created.
+
+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.
+The behavior when not all queries are available, is described
+<<queries-wait-bit-not-set, below>>.
+
+If ename:VK_QUERY_RESULT_64_BIT is not set and the result overflows a 32-bit
+value, the value may: either wrap or saturate.
+Similarly, if ename:VK_QUERY_RESULT_64_BIT is set and the result overflows a
+64-bit value, the value may: either wrap or saturate.
+
+If ename:VK_QUERY_RESULT_WAIT_BIT is set, Vulkan will wait for each query to
+be in the available state before retrieving the numerical results for that
+query.
+In this case, fname:vkGetQueryPoolResults is guaranteed to succeed and
+return ename:VK_SUCCESS if the queries become available in a finite time
+(i.e. if they have been issued and not reset).
+If queries will never finish (e.g. due to being reset but not issued), then
+fname:vkGetQueryPoolResults may: not return in finite time.
+
+[[queries-wait-bit-not-set]]
+If ename:VK_QUERY_RESULT_WAIT_BIT and ename:VK_QUERY_RESULT_PARTIAL_BIT are
+both not set then no result values are written to pname:pData for queries
+that are in the unavailable state at the time of the call, and
+fname:vkGetQueryPoolResults returns ename:VK_NOT_READY.
+However, availability state is still written to pname:pData for those
+queries if ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set.
+ifdef::VK_KHR_video_queue[]
+Similarly, the status is still written to pname:pData for those queries if
+ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is set.
+endif::VK_KHR_video_queue[]
+
+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.
+====
+
+If ename:VK_QUERY_RESULT_PARTIAL_BIT is set, ename:VK_QUERY_RESULT_WAIT_BIT
+is not set, and the query's status is unavailable, an intermediate result
+value between zero and the final result value is written to pname:pData for
+that query.
+
+If ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set, the final integer
+value written for each query is non-zero if the query's status was available
+or zero if the status was unavailable.
+When ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is used, implementations
+must: guarantee that if they return a non-zero availability value then the
+numerical results must: be valid, assuming the results are not reset by a
+subsequent command.
+
+[NOTE]
+.Note
+====
+Satisfying this guarantee may: require careful ordering by the application,
+e.g. to read the availability status before reading the results.
+====
+
+ifdef::VK_KHR_video_queue[]
+If ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR is set, the final integer value
+written for each query indicates whether the result is available or not, and
+whether an error occurred.
+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.
+
+Specific result codes are defined by the elink:VkQueryResultStatusKHR
+enumeration.
+endif::VK_KHR_video_queue[]
+
+.Valid Usage
+****
+  * [[VUID-vkGetQueryPoolResults-firstQuery-00813]]
+    pname:firstQuery must: be less than the number of queries in
+    pname:queryPool
+ifndef::VK_KHR_performance_query[]
+  * [[VUID-vkGetQueryPoolResults-flags-02827]]
+    If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags, then
+    pname:pData and pname:stride must: be multiples of `4`
+endif::VK_KHR_performance_query[]
+ifdef::VK_KHR_performance_query[]
+  * [[VUID-vkGetQueryPoolResults-flags-02828]]
+    If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags and the
+    pname:queryType used to create pname:queryPool was not
+    ename:VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then pname:pData and
+    pname:stride must: be multiples of `4`
+endif::VK_KHR_performance_query[]
+  * [[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`
+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
+    sname: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,
+    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, 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, it
+    must: not include ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT
+endif::VK_KHR_video_queue[]
+****
+
+include::{generated}/validity/protos/vkGetQueryPoolResults.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+endif::VK_KHR_video_queue[]
+--
+
+[open,refpage='VkQueryResultFlags',desc='Bitmask of VkQueryResultFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkQueryResultFlags.txt[]
+
+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']
+--
+Specific status codes that can: be returned from a query are:
+
+include::{generated}/api/enums/VkQueryResultStatusKHR.txt[]
+
+  * 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.
+--
+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.txt[]
+
+  * 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.
+
+fname:vkCmdCopyQueryPoolResults is guaranteed to see the effect of previous
+uses of fname:vkCmdResetQueryPool in the same queue, without any additional
+synchronization.
+Thus, the results will always reflect the most recent use of the query.
+
+pname:flags has the same possible values described above for the pname:flags
+parameter of flink:vkGetQueryPoolResults, but the different style of
+execution causes some subtle behavioral differences.
+Because fname:vkCmdCopyQueryPoolResults executes in order with respect to
+other query commands, there is less ambiguity about which use of a query is
+being requested.
+
+Results for all requested occlusion queries, pipeline statistics queries,
+ifdef::VK_EXT_transform_feedback[]
+transform feedback queries,
+endif::VK_EXT_transform_feedback[]
+and timestamp queries are written as 64-bit unsigned integer values if
+ename:VK_QUERY_RESULT_64_BIT is set or 32-bit unsigned integer values
+otherwise.
+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 neither of ename:VK_QUERY_RESULT_WAIT_BIT and
+ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT are set, results are only
+written out for queries in the available state.
+
+If ename:VK_QUERY_RESULT_WAIT_BIT is set, the implementation will wait for
+each query's status to be in the available state before retrieving the
+numerical results for that query.
+This is guaranteed to reflect the most recent use of the query on the same
+queue, assuming that the query is not being simultaneously used by other
+queues.
+If the query does not become available in a finite amount of time (e.g. due
+to not issuing a query since the last reset), a ename:VK_ERROR_DEVICE_LOST
+error may: occur.
+
+Similarly, if ename:VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set and
+ename:VK_QUERY_RESULT_WAIT_BIT is not set, the availability is guaranteed to
+reflect the most recent use of the query on the same queue, assuming that
+the query is not being simultaneously used by other queues.
+As with fname:vkGetQueryPoolResults, implementations must: guarantee that if
+they return a non-zero availability value, then the numerical results are
+valid.
+
+If ename:VK_QUERY_RESULT_PARTIAL_BIT is set, ename:VK_QUERY_RESULT_WAIT_BIT
+is not set, and the query's status is unavailable, an intermediate result
+value between zero and the final result value is written for that query.
+
+ename:VK_QUERY_RESULT_PARTIAL_BIT must: not be used if the pool's
+pname:queryType is ename:VK_QUERY_TYPE_TIMESTAMP.
+
+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-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,
+    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-04812]]
+    flink:vkCmdCopyQueryPoolResults must: not be called if the
+    pname:queryType used to create pname:queryPool was
+    ename:VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR or
+    ename:VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR
+endif::VK_KHR_video_queue[]
+****
+
+include::{generated}/validity/protos/vkCmdCopyQueryPoolResults.txt[]
+--
+
+[[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.
+====
+
+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 finished.
+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 to individually enable pipeline statistics counters
+for query pools with slink:VkQueryPoolCreateInfo::pname:pipelineStatistics,
+and for secondary command buffers with
+slink:VkCommandBufferInheritanceInfo::pname:pipelineStatistics, are:
+
+include::{generated}/api/enums/VkQueryPipelineStatisticFlagBits.txt[]
+
+  * 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.
+
+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>>.
+
+[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
+<<pipeline-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.txt[]
+
+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_KHR_synchronization2[]
+
+[open,refpage='vkCmdWriteTimestamp2KHR',desc='Write a device timestamp into a query object',type='protos']
+--
+:refpage: vkCmdWriteTimestamp2KHR
+
+To request a timestamp, call:
+
+include::{generated}/api/protos/vkCmdWriteTimestamp2KHR.txt[]
+
+  * 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:vkCmdWriteTimestamp2KHR 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.
+
+When the timestamp value is written, the availability status of the query is
+set to available.
+
+[NOTE]
+.Note
+====
+If an implementation is unable to detect completion and latch the timer at
+any specific stage of the pipeline, it may: instead do so at any logically
+later stage.
+====
+
+Comparisons between timestamps are not meaningful if the timestamps are
+written by commands submitted to different queues.
+
+[NOTE]
+.Note
+====
+An example of such a comparison is subtracting an older timestamp from a
+newer one to determine the execution time of a sequence of commands.
+====
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+
+If fname:vkCmdWriteTimestamp2KHR 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.txt[]
+  * [[VUID-vkCmdWriteTimestamp2KHR-synchronization2-03858]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdWriteTimestamp2KHR-stage-03859]]
+    pname:stage must: only include a single pipeline stage
+  * [[VUID-vkCmdWriteTimestamp2KHR-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-vkCmdWriteTimestamp2KHR-queryPool-03861]]
+    pname:queryPool must: have been created with a pname:queryType of
+    ename:VK_QUERY_TYPE_TIMESTAMP
+  * [[VUID-vkCmdWriteTimestamp2KHR-queryPool-03862]]
+    The query identified by pname:queryPool and pname:query must: be
+    _unavailable_
+  * [[VUID-vkCmdWriteTimestamp2KHR-timestampValidBits-03863]]
+    The command pool's queue family must: support a non-zero
+    pname:timestampValidBits
+  * [[VUID-vkCmdWriteTimestamp2KHR-query-04903]]
+    pname:query must: be less than the number of queries in pname:queryPool
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdWriteTimestamp2KHR-None-03864]]
+    All queries used by the command must: be unavailable
+  * [[VUID-vkCmdWriteTimestamp2KHR-query-03865]]
+    If fname:vkCmdWriteTimestamp2KHR 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/vkCmdWriteTimestamp2KHR.txt[]
+--
+endif::VK_KHR_synchronization2[]
+
+[open,refpage='vkCmdWriteTimestamp',desc='Write a device timestamp into a query object',type='protos']
+--
+:refpage: vkCmdWriteTimestamp
+
+To request a timestamp, call:
+
+include::{generated}/api/protos/vkCmdWriteTimestamp.txt[]
+
+  * 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.
+
+fname:vkCmdWriteTimestamp latches the value of the timer when all previous
+commands have completed executing as far as the specified pipeline stage,
+and writes the timestamp value to memory.
+When the timestamp value is written, the availability status of the query is
+set to available.
+
+[NOTE]
+.Note
+====
+If an implementation is unable to detect completion and latch the timer at
+any specific stage of the pipeline, it may: instead do so at any logically
+later stage.
+====
+
+Comparisons between timestamps are not meaningful if the timestamps are
+written by commands submitted to different queues.
+
+[NOTE]
+.Note
+====
+An example of such a comparison is subtracting an older timestamp from a
+newer one to determine the execution time of a sequence of commands.
+====
+
+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.txt[]
+  * [[VUID-vkCmdWriteTimestamp-queryPool-01416]]
+    pname:queryPool must: have been created with a pname:queryType of
+    ename:VK_QUERY_TYPE_TIMESTAMP
+  * [[VUID-vkCmdWriteTimestamp-queryPool-00828]]
+    The query identified by pname:queryPool and pname:query must: be
+    _unavailable_
+  * [[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
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-vkCmdWriteTimestamp-None-00830]]
+    All queries used by the command must: be unavailable
+  * [[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.txt[]
+--
+
+ifdef::VK_KHR_performance_query[]
+include::VK_KHR_performance_query/queriesperformance.txt[]
+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_INTEL_performance_query[]
+include::VK_INTEL_performance_query/queries.txt[]
+endif::VK_INTEL_performance_query[]
+
+
+ifdef::VK_KHR_video_queue[]
+[[queries-result-status-only]]
+== Result Status Queries
+
+Result status queries are used for a single purpose - to check whether a set
+of operations has completed successfully or not, using the
+ename:VK_QUERY_RESULT_WITH_STATUS_BIT_KHR flag.
+
+No other data is written to such a query.
+endif::VK_KHR_video_queue[]
+
+
+ifdef::VK_KHR_video_encode_queue[]
+[[queries-video-encode-bitstream-buffer-range]]
+== Video Encode Bitstream Buffer Range
+
+Bitstream buffer range queries describe the range of bytes written in the
+bitstream buffer by video encode commands.
+
+When an encode command is recorded within a bitstream buffer range query,
+two values are written to the query slot.
+The first value is an offset into the bitstream buffer where the encoded
+video data was written.
+This offset is an additional offset from the start of the range specified by
+the application.
+The second value is a size value describing the number of bytes written to
+the bitstream buffer beyond the offset.
+
+One slot is consumed for each slice in each command recorded between a begin
+and end query pair.
+endif::VK_KHR_video_encode_queue[]
diff --git a/registry/vulkan/chapters/raytracing.txt b/registry/vulkan/chapters/raytracing.txt
new file mode 100644
index 0000000..61a0c83
--- /dev/null
+++ b/registry/vulkan/chapters/raytracing.txt
@@ -0,0 +1,902 @@
+// Copyright 2018-2021 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_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[]
+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_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_EXT is
+set on pipeline creation, as without that bit set, its value is required to
+match that of slink:VkPhysicalDeviceSubgroupProperties::pname:subgroupSize.
+endif::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
+    synchronzation.
+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.txt[]
+
+  * 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.txt[]
+  * [[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.txt[]
+--
+
+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.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/trace_rays_common_khr.txt[]
+  * [[VUID-vkCmdTraceRaysKHR-commandBuffer-04625]]
+    pname:commandBuffer must: not be a protected command buffer
+  * [[VUID-vkCmdTraceRaysKHR-width-03626]]
+    pname:width must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]#
+  * [[VUID-vkCmdTraceRaysKHR-height-03627]]
+    pname:height must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]#
+  * [[VUID-vkCmdTraceRaysKHR-depth-03628]]
+    pname:depth must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]#
+  * [[VUID-vkCmdTraceRaysKHR-width-03629]]
+    [eq]#pname:width {times} pname:height {times} pname:depth# must: be less
+    than or equal to
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayDispatchInvocationCount
+****
+
+include::{generated}/validity/protos/vkCmdTraceRaysKHR.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+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.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command will be
+    recorded
+  * pname:imageView is an image view handle that specifies 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,invocation mask image>> 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-width-04983]]
+    pname:width in flink:vkCmdTraceRaysKHR should be 1
+****
+
+include::{generated}/validity/protos/vkCmdBindInvocationMaskHUAWEI.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+include::{chapters}/commonvalidity/trace_rays_common_khr.txt[]
+  * [[VUID-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-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-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03634]]
+    pname:indirectDeviceAddress must: be a multiple of `4`
+  * [[VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635]]
+    pname:commandBuffer must: not be a protected command buffer
+  * [[VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03636]]
+    All device addresses between pname:indirectDeviceAddress and
+    [eq]#pname:indirectDeviceAddress {plus}
+    code:sizeof(sname:VkTraceRaysIndirectCommandKHR) - 1# must: be in the
+    buffer device address range of the same buffer
+  * [[VUID-vkCmdTraceRaysIndirectKHR-rayTracingPipelineTraceRaysIndirect-03637]]
+    The <<features-rayTracingPipelineTraceRaysIndirect,
+    sname:VkPhysicalDeviceRayTracingPipelineFeaturesKHR::pname:rayTracingPipelineTraceRaysIndirect>>
+    feature must: be enabled
+ifdef::VK_NV_ray_tracing_motion_blur[]
+  * [[VUID-vkCmdTraceRaysIndirectKHR-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[]
+****
+
+include::{generated}/validity/protos/vkCmdTraceRaysIndirectKHR.txt[]
+--
+
+[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.txt[]
+
+  * 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
+****
+  * [[VUID-VkTraceRaysIndirectCommandKHR-width-03638]]
+    pname:width must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]#
+  * [[VUID-VkTraceRaysIndirectCommandKHR-height-03639]]
+    pname:height must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]#
+  * [[VUID-VkTraceRaysIndirectCommandKHR-depth-03640]]
+    pname:depth must: be less than or equal to
+    [eq]#sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
+    {times} sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]#
+  * [[VUID-VkTraceRaysIndirectCommandKHR-width-03641]]
+    [eq]#pname:width {times} pname:height {times} pname:depth# must: be less
+    than or equal to
+    sname:VkPhysicalDeviceRayTracingPipelinePropertiesKHR::pname:maxRayDispatchInvocationCount
+****
+
+include::{generated}/validity/structs/VkTraceRaysIndirectCommandKHR.txt[]
+--
+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.
+====
diff --git a/registry/vulkan/chapters/raytraversal.txt b/registry/vulkan/chapters/raytraversal.txt
new file mode 100644
index 0000000..280490e
--- /dev/null
+++ b/registry/vulkan/chapters/raytraversal.txt
@@ -0,0 +1,602 @@
+// Copyright 2018-2021 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.
+
+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.
+
+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.
+
+
+=== 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 initally 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_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.
+
+
+[[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/registry/vulkan/chapters/renderpass.txt b/registry/vulkan/chapters/renderpass.txt
new file mode 100644
index 0000000..f7db1f0
--- /dev/null
+++ b/registry/vulkan/chapters/renderpass.txt
@@ -0,0 +1,5719 @@
+// Copyright 2015-2021 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_KHR_dynamic_rendering[]
+[open,refpage='vkCmdBeginRenderingKHR',desc='Begin a dynamic render pass instance',type='protos']
+--
+To begin a render pass instance, call:
+
+include::{generated}/api/protos/vkCmdBeginRenderingKHR.txt[]
+
+  * pname:commandBuffer is the command buffer in which to record the
+    command.
+  * pname:pRenderingInfo is a pointer to a slink:VkRenderingInfoKHR
+    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_KHR
+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-vkCmdBeginRenderingKHR-dynamicRendering-06446]]
+    The <<features-dynamicRendering,pname:dynamicRendering>> feature must:
+    be enabled
+  * [[VUID-vkCmdBeginRenderingKHR-commandBuffer-06068]]
+    If pname:commandBuffer is a secondary command buffer,
+    pname:pRenderingInfo->flags must: not include
+    ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR
+****
+
+include::{generated}/validity/protos/vkCmdBeginRenderingKHR.txt[]
+--
+
+[open,refpage='VkRenderingInfoKHR',desc='Structure specifying render pass instance begin info',type='structs']
+--
+The sname:VkRenderingInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkRenderingInfoKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkRenderingFlagBitsKHR.
+  * 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:VkRenderingAttachmentInfoKHR structures
+    describing any color attachments used.
+  * pname:pDepthAttachment is a pointer to a
+    slink:VkRenderingAttachmentInfoKHR structure describing a depth
+    attachment.
+  * pname:pStencilAttachment is a pointer to a
+    slink:VkRenderingAttachmentInfoKHR 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:deviceCount 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[]
+
+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, writes to the corresponding location by a fragment are
+discarded.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderingInfoKHR-viewMask-06069]]
+    If pname:viewMask is `0`, pname:layerCount must: not be `0`
+  * [[VUID-VkRenderingInfoKHR-imageView-06070]]
+    If neither the apiext:VK_AMD_mixed_attachment_samples nor the
+    apiext:VK_NV_framebuffer_mixed_samples extensions 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
+ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfoKHR-renderArea-06071]]
+    pname:renderArea.offset.x must: be greater than or equal to 0
+  * [[VUID-VkRenderingInfoKHR-renderArea-06072]]
+    pname:renderArea.offset.y must: be greater than or equal to 0
+  * [[VUID-VkRenderingInfoKHR-renderArea-06073]]
+    The sum of pname:renderArea.offset.x and pname:renderArea.extent.width
+    must: be less than or equal to <<limits-maxFramebufferWidth,
+    pname:maxFramebufferWidth>>
+  * [[VUID-VkRenderingInfoKHR-renderArea-06074]]
+    The sum of pname:renderArea.offset.y and pname:renderArea.extent.height
+    must: be less than or equal to <<limits-maxFramebufferHeight,
+    pname:maxFramebufferHeight>>
+  * [[VUID-VkRenderingInfoKHR-imageView-06075]]
+    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-VkRenderingInfoKHR-imageView-06076]]
+    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#
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfoKHR-pNext-06077]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+    pname:renderArea.offset.x must: be greater than or equal to 0
+  * [[VUID-VkRenderingInfoKHR-pNext-06078]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+    pname:renderArea.offset.y must: be greater than or equal to 0
+  * [[VUID-VkRenderingInfoKHR-pNext-06079]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0, 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-VkRenderingInfoKHR-pNext-06080]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0, 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#
+  * [[VUID-VkRenderingInfoKHR-pNext-06081]]
+    If the pname:pNext chain contains
+    slink:VkDeviceGroupRenderPassBeginInfo, the pname:offset.x member of
+    each element of pname:pDeviceRenderAreas must: be greater than or equal
+    to 0
+  * [[VUID-VkRenderingInfoKHR-pNext-06082]]
+    If the pname:pNext chain contains
+    slink:VkDeviceGroupRenderPassBeginInfo, the pname:offset.y member of
+    each element of pname:pDeviceRenderAreas must: be greater than or equal
+    to 0
+  * [[VUID-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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
+endif::VK_KHR_separate_depth_stencil_layouts,VK_VERSION_1_2[]
+ifdef::VK_KHR_depth_stencil_resolve,VK_VERSION_1_2[]
+  * [[VUID-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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
+endif::VK_KHR_depth_stencil_resolve,VK_VERSION_1_2[]
+  * [[VUID-VkRenderingInfoKHR-colorAttachmentCount-06106]]
+    pname:colorAttachmentCount must: be less than or equal to
+    slink:VkPhysicalDeviceLimits::pname:maxColorAttachments
+ifdef::VK_EXT_fragment_density_map[]
+  * [[VUID-VkRenderingInfoKHR-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
+    <<features-fragmentDensityMapNonSubsampledImages,non-subsample image
+    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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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[]
+ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfoKHR-imageView-06110]]
+    If 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-VkRenderingInfoKHR-imageView-06111]]
+    If 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]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfoKHR-pNext-06112]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 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{renderArea_{x}+renderArea_{width}}{maxFragmentDensityTexelSize_{width}}}\right\rceil]
+  * [[VUID-VkRenderingInfoKHR-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-VkRenderingInfoKHR-pNext-06114]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 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{renderArea_{y}+renderArea_{height}}{maxFragmentDensityTexelSize_{height}}}\right\rceil]
+  * [[VUID-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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[]
+ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfoKHR-imageView-06117]]
+    If 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-VkRenderingInfoKHR-imageView-06118]]
+    If 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]
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderingInfoKHR-pNext-06119]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 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{renderArea_{x}+renderArea_{width}}{shadingRateAttachmentTexelSize_{width}}}\right\rceil]
+  * [[VUID-VkRenderingInfoKHR-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-VkRenderingInfoKHR-pNext-06121]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 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{renderArea_{y}+renderArea_{height}}{shadingRateAttachmentTexelSize_{height}}}\right\rceil]
+  * [[VUID-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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-VkRenderingInfoKHR-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[]
+****
+
+include::{generated}/validity/structs/VkRenderingInfoKHR.txt[]
+--
+
+[open,refpage='VkRenderingFlagBitsKHR',desc='Bitmask specifying additional properties of a dynamic render pass instance',type='enums']
+--
+Bits which can: be set in slink:VkRenderingInfoKHR::pname:flags describing
+additional properties of the render pass are:
+
+include::{generated}/api/enums/VkRenderingFlagBitsKHR.txt[]
+
+  * ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR specifies
+    that draw calls for the render pass instance will be recorded in
+    secondary command buffers.
+  * ename:VK_RENDERING_RESUMING_BIT_KHR specifies that the render pass
+    instance is resuming an earlier suspended render pass instance.
+  * ename:VK_RENDERING_SUSPENDING_BIT_KHR specifies that the render pass
+    instance will be suspended.
+
+[[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_KHR,
+ename:VK_RENDERING_SUSPENDING_BIT_KHR, and
+ename:VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR flags.
+No action or synchronization commands, or other render pass instances, are
+allowed between suspending and resuming render pass instances.
+--
+
+[open,refpage='VkRenderingFlagsKHR',desc='Bitmask of VkRenderingFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkRenderingFlagsKHR.txt[]
+
+tname:VkRenderingFlagsKHR is a bitmask type for setting a mask of zero or
+more elink:VkRenderingFlagBitsKHR.
+--
+
+[open,refpage='VkRenderingAttachmentInfoKHR',desc='Structure specifying attachment information',type='structs']
+--
+The sname:VkRenderingAttachmentInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkRenderingAttachmentInfoKHR.txt[]
+
+  * pname:sType is the type of 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
+    multisampled data written to pname:imageView will be resolved.
+  * pname:resolveImageView is an image view used to write resolved
+    multisample 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 specifying how the
+    contents of pname:imageView are treated at the start of the render pass
+    instance.
+  * pname:storeOp is a elink:VkAttachmentStoreOp value specifying how the
+    contents of pname:imageView are treated at the end of the render pass
+    instance.
+  * pname:clearValue is a slink:VkClearValue structure that defines 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:VkRenderingInfoKHR.
+If pname:imageView is dlink:VK_NULL_HANDLE, other members of this structure
+are ignored; writes to this attachment will be discarded, and no load,
+store, or 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, values in
+pname:resolveImageView within the render area become undefined: once
+rendering begins.
+At the end of rendering, the color values written to each pixel location in
+pname:imageView will be resolved according to pname:resolveMode and stored
+into the the same location in pname:resolveImageView.
+
+[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.
+
+.Valid Usage
+****
+  * [[VUID-VkRenderingAttachmentInfoKHR-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-VkRenderingAttachmentInfoKHR-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
+ifndef::VK_KHR_depth_stencil_resolve,VK_VERSION_1_2[]
+  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06131]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and has a depth or
+    stencil format, pname:resolveMode must: be ename:VK_RESOLVE_MODE_NONE
+endif::VK_KHR_depth_stencil_resolve,VK_VERSION_1_2[]
+  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06132]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE and pname:resolveMode is
+    not ename:VK_RESOLVE_MODE_NONE, pname:imageView must: not have a sample
+    count of ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06133]]
+    If pname:imageView 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-VkRenderingAttachmentInfoKHR-imageView-06134]]
+    If pname:imageView 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-VkRenderingAttachmentInfoKHR-imageView-06135]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout 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-VkRenderingAttachmentInfoKHR-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-VkRenderingAttachmentInfoKHR-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-VkRenderingAttachmentInfoKHR-imageView-06138]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
+    be ename:VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV
+  * [[VUID-VkRenderingAttachmentInfoKHR-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-VkRenderingAttachmentInfoKHR-imageView-06140]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
+    be ename:VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
+  * [[VUID-VkRenderingAttachmentInfoKHR-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_KHR_synchronization2[]
+  * [[VUID-VkRenderingAttachmentInfoKHR-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_KHR_synchronization2[]
+ifdef::VK_KHR_fragment_shading_rate[]
+  * [[VUID-VkRenderingAttachmentInfoKHR-imageView-06143]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
+    be ename:VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
+  * [[VUID-VkRenderingAttachmentInfoKHR-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-VkRenderingAttachmentInfoKHR-imageView-06145]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, pname:layout must: not
+    be ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+  * [[VUID-VkRenderingAttachmentInfoKHR-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[]
+****
+
+include::{generated}/validity/structs/VkRenderingAttachmentInfoKHR.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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:VkRenderingInfoKHR 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.
+
+This structure can be included in the pname:pNext chain of
+slink:VkRenderingInfoKHR to define a fragment density map.
+If pname:imageView is dlink:VK_NULL_HANDLE, or if this structure is not
+specified, pname:imageView is 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
+ifndef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06160]]
+    If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have a
+    pname:layerCount equal to `1`
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+****
+
+include::{generated}/validity/structs/VkRenderingFragmentDensityMapAttachmentInfoEXT.txt[]
+--
+endif::VK_EXT_fragment_density_map[]
+
+[open,refpage='vkCmdEndRenderingKHR',desc='End a dynamic render pass instance',type='protos']
+--
+To end a render pass instance, call:
+
+include::{generated}/api/protos/vkCmdEndRenderingKHR.txt[]
+
+  * 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_KHR, then this render
+pass is suspended and will be resumed later in
+<<synchronization-submission-order, submission order>>.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdEndRenderingKHR-None-06161]]
+    The current render pass instance must: have been begun with
+    flink:vkCmdBeginRenderingKHR
+  * [[VUID-vkCmdEndRenderingKHR-commandBuffer-06162]]
+    The current render pass instance must: have been begun in
+    pname:commandBuffer
+****
+include::{generated}/validity/protos/vkCmdEndRenderingKHR.txt[]
+--
+
+[NOTE]
+.Note
+====
+For more complex rendering graphs, it's 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:vkCmdBeginRenderingKHR, but use of subpass dependencies can confer
+important performance benefits on some devices.
+====
+endif::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.txt[]
+--
+
+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.txt[]
+--
+
+
+[[renderpass-creation]]
+== Render Pass Creation
+
+[open,refpage='vkCreateRenderPass',desc='Create a new render pass object',type='protos']
+--
+To create a render pass, call:
+
+include::{generated}/api/protos/vkCreateRenderPass.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateRenderPass.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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, it must: be less than
+    pname:attachmentCount
+  * [[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-srcSubpass-02517]]
+    The pname:srcSubpass member of each element of pname:pDependencies must:
+    be less than pname:subpassCount
+  * [[VUID-VkRenderPassCreateInfo-dstSubpass-02518]]
+    The pname:dstSubpass member of each element of pname:pDependencies must:
+    be less than pname:subpassCount
+****
+
+include::{generated}/validity/structs/VkRenderPassCreateInfo.txt[]
+--
+
+ifdef::VK_QCOM_render_pass_transform[]
+[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.txt[]
+
+  * 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[]
+
+[open,refpage='VkRenderPassCreateFlags',desc='Bitmask of VkRenderPassCreateFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkRenderPassCreateFlags.txt[]
+
+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.txt[]
+
+ifdef::VK_KHR_multiview[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderPassMultiviewCreateInfoKHR.txt[]
+endif::VK_KHR_multiview[]
+
+  * pname:sType is the type of 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
+<<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
+****
+
+include::{generated}/validity/structs/VkRenderPassMultiviewCreateInfo.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+ifdef::VK_NVX_multiview_per_view_attributes[]
+ifdef::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.txt[]
+
+  * pname:sType is the type of 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-attibute 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:VkRenderingInfoKHR when
+starting a dynamic render pass instance, and
+slink:VkCommandBufferInheritanceInfo when specifying the dynamic render pass
+instance parameters for secondary command buffers.
+
+.Valid Usage
+****
+  * [[VUID-VkMultiviewPerViewAttributesInfoNVX-perViewAttributesPositionXOnly-06163]]
+    If pname:perViewAttributesPositionXOnly is ename:VK_TRUE then
+    pname:perViewAttributes must: also be ename:VK_TRUE
+****
+
+include::{generated}/validity/structs/VkMultiviewPerViewAttributesInfoNVX.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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-02547]]
+    If pname:fragmentDensityMapAttachment is not ename:VK_ATTACHMENT_UNUSED,
+    pname:fragmentDensityMapAttachment must: be less than
+    sname:VkRenderPassCreateInfo::pname:attachmentCount
+  * [[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.txt[]
+--
+endif::VK_EXT_fragment_density_map[]
+
+[open,refpage='VkAttachmentDescription',desc='Structure specifying an attachment description',type='structs']
+--
+The sname:VkAttachmentDescription structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentDescription.txt[]
+
+  * 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.
+
+[[renderpass-load-store-ops]]
+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 _load operations_ that
+execute as part of the first subpass that uses the attachment.
+pname:storeOp and pname:stencilStoreOp define the _store operations_ that
+execute as part of the last subpass that uses the attachment.
+
+The load operation for each sample in an attachment happens-before any
+recorded command which accesses the sample in the first subpass where the
+attachment is used.
+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 store operation for each sample in an attachment happens-after any
+recorded command which accesses the sample in the last subpass where the
+attachment is used.
+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.
+
+If an attachment is not used by any subpass, then pname:loadOp,
+pname:storeOp, pname:stencilStoreOp, and pname:stencilLoadOp are ignored,
+and the attachment's memory contents will not be modified by execution of a
+render pass instance.
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+
+The load and store operations apply on the first and last use of each view
+in the render pass, respectively.
+If a view index of an attachment is not included in the view mask in any
+subpass that uses it, then the load and store operations are ignored, and
+the attachment's memory contents will not be modified by execution of a
+render pass instance.
+
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+[[renderpass-precision]]
+During a render pass instance, input/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-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.
+The precise set of valid scenarios is described in more detail
+<<renderpass-feedbackloop, below>>.
+
+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
+****
+  * [[VUID-VkAttachmentDescription-finalLayout-00843]]
+    pname:finalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+  * [[VUID-VkAttachmentDescription-format-03280]]
+    If pname:format is a color format, pname:initialLayout must: not be
+    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-VkAttachmentDescription-format-03281]]
+    If pname:format is a depth/stencil format, pname:initialLayout must: not
+    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  * [[VUID-VkAttachmentDescription-format-03282]]
+    If pname:format is a color format, pname:finalLayout must: not be
+    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-VkAttachmentDescription-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_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-VkAttachmentDescription-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-VkAttachmentDescription-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-VkAttachmentDescription-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-VkAttachmentDescription-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-VkAttachmentDescription-format-03288]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil aspects, 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-VkAttachmentDescription-format-03289]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil aspects, 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-VkAttachmentDescription-format-03290]]
+    If pname:format is a depth/stencil format which includes only the depth
+    aspect, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription-format-03291]]
+    If pname:format is a depth/stencil format which includes only the depth
+    aspect, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription-format-03292]]
+    If pname:format is a depth/stencil format which includes only the
+    stencil aspect, 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 aspect, 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[]
+****
+
+include::{generated}/validity/structs/VkAttachmentDescription.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+tname:VkAttachmentDescriptionFlags is a bitmask type for setting a mask of
+zero or more elink:VkAttachmentDescriptionFlagBits.
+--
+
+[open,refpage='VkAttachmentLoadOp',desc='Specify how contents of an attachment are treated at the beginning of a subpass',type='enums']
+--
+Possible values of slink:VkAttachmentDescription::pname:loadOp and
+pname:stencilLoadOp, specifying how the contents of the attachment are
+treated, are:
+
+include::{generated}/api/enums/VkAttachmentLoadOp.txt[]
+
+  * ename:VK_ATTACHMENT_LOAD_OP_LOAD specifies that the previous contents of
+    the image within the render area will be preserved.
+    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 within the render area will be preserved, but the
+    contents of the attachment 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[]
+--
+
+[open,refpage='VkAttachmentStoreOp',desc='Specify how contents of an attachment are treated 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.txt[]
+
+  * 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_EXT_load_store_op_none,VK_KHR_dynamic_rendering,VK_QCOM_render_pass_store_ops[]
+  * ename:VK_ATTACHMENT_STORE_OP_NONE_KHR specifies the contents within the
+    render area are not accessed by the store operation.
+    However, if the attachment was written to during the render pass, the
+    contents of the attachment will be undefined: inside the render area.
+endif::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.
+====
+--
+
+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.txt[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderPassInputAttachmentAspectCreateInfoKHR.txt[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkInputAttachmentAspectReferenceKHR.txt[]
+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.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+[open,refpage='VkSubpassDescription',desc='Structure specifying a subpass description',type='structs']
+--
+The sname:VkSubpassDescription structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDescription.txt[]
+
+  * 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 multisample resolve operation is defined for each attachment.
+At the end of each subpass, multisample resolve operations read the
+subpass's color attachments, and resolve the samples for each pixel within
+the render area to the same pixel location in the corresponding resolve
+attachments, 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 multisample resolve operations for depth
+and stencil are defined by
+slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode and
+slink:VkSubpassDescriptionDepthStencilResolve::pname:stencilResolveMode,
+respectively.
+At the end of each subpass, multisample resolve operations read the
+subpass's depth/stencil attachment, and resolve the samples for each pixel
+to the same pixel location in the corresponding resolve attachment.
+If slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode is
+ename:VK_RESOLVE_MODE_NONE, then the depth component of the resolve
+attachment is not written to and its contents are preserved.
+Similarly, if
+slink:VkSubpassDescriptionDepthStencilResolve::pname:stencilResolveMode is
+ename:VK_RESOLVE_MODE_NONE, then the stencil component of the resolve
+attachment is not written to and its contents are preserved.
+slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode is
+ignored if the elink:VkFormat of the pname:pDepthStencilResolveAttachment
+does not have a depth component.
+Similarly,
+slink:VkSubpassDescriptionDepthStencilResolve::pname:stencilResolveMode is
+ignored if the elink:VkFormat of the pname:pDepthStencilResolveAttachment
+does not have a stencil component.
+
+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
+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.
+
+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
+****
+ifndef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-VkSubpassDescription-pipelineBindPoint-00844]]
+    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-VkSubpassDescription-pipelineBindPoint-04952]]
+    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    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-01417]]
+    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_AMD_mixed_attachment_samples[]
+  * [[VUID-VkSubpassDescription-pColorAttachments-01506]]
+    If the `apiext:VK_AMD_mixed_attachment_samples` extension is enabled,
+    and 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
+  * [[VUID-VkSubpassDescription-None-04437]]
+    Each attachment must: follow the <<attachment-type-imagelayout, image
+    layout requirements>> specified for its attachment type
+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-03342]]
+    If pname:flags includes
+    ename:VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if
+    pname:pDepthStencilResolveAttachmentKHR is not `NULL`, then the
+    depth/stencil 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
+****
+
+include::{generated}/validity/structs/VkSubpassDescription.txt[]
+--
+
+[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.txt[]
+
+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
+    <<pipeline-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[]
+
+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 begining 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.txt[]
+
+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']
+--
+The sname:VkAttachmentReference structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentReference.txt[]
+
+  * 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
+****
+  * [[VUID-VkAttachmentReference-layout-00857]]
+    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, pname:layout
+    must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED,
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED,
+    ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
+    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
+****
+
+include::{generated}/validity/structs/VkAttachmentReference.txt[]
+--
+
+[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.txt[]
+--
+
+[open,refpage='VkSubpassDependency',desc='Structure specifying a subpass dependency',type='structs']
+--
+The sname:VkSubpassDependency structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDependency.txt[]
+
+  * 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 describes a
+<<synchronization-pipeline-barriers-subpass-self-dependencies, subpass
+self-dependency>>, and only constrains the pipeline barriers allowed within
+a subpass instance.
+Otherwise, when a render pass instance which includes a subpass dependency
+is submitted to a queue, it defines a memory 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 load, store
+or 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 load,
+store or 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
+****
+  * [[VUID-VkSubpassDependency-srcStageMask-00860]]
+    If the <<features-geometryShader,geometry shaders>> feature is not
+    enabled, pname:srcStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-VkSubpassDependency-dstStageMask-00861]]
+    If the <<features-geometryShader,geometry shaders>> feature is not
+    enabled, pname:dstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-VkSubpassDependency-srcStageMask-00862]]
+    If the <<features-tessellationShader,tessellation shaders>> feature is
+    not enabled, pname:srcStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
+    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+  * [[VUID-VkSubpassDependency-dstStageMask-00863]]
+    If the <<features-tessellationShader,tessellation shaders>> feature is
+    not enabled, pname:dstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
+    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+  * [[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-00867]]
+    If pname:srcSubpass is equal to pname:dstSubpass and not all of the
+    stages in pname:srcStageMask and pname:dstStageMask are
+    <<synchronization-framebuffer-regions,framebuffer-space stages>>, the
+    <<synchronization-pipeline-stages-order, logically latest>> pipeline
+    stage in pname:srcStageMask must: be
+    <<synchronization-pipeline-stages-order, logically earlier>> than or
+    equal to the <<synchronization-pipeline-stages-order, logically
+    earliest>> pipeline stage in pname:dstStageMask
+  * [[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[]
+ifdef::VK_NV_mesh_shader[]
+  * [[VUID-VkSubpassDependency-srcStageMask-02099]]
+    If the <<features-meshShader,mesh shaders>> feature is not enabled,
+    pname:srcStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
+  * [[VUID-VkSubpassDependency-srcStageMask-02100]]
+    If the <<features-taskShader,task shaders>> feature is not enabled,
+    pname:srcStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+  * [[VUID-VkSubpassDependency-dstStageMask-02101]]
+    If the <<features-meshShader,mesh shaders>> feature is not enabled,
+    pname:dstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
+  * [[VUID-VkSubpassDependency-dstStageMask-02102]]
+    If the <<features-taskShader,task shaders>> feature is not enabled,
+    pname:dstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+endif::VK_NV_mesh_shader[]
+ifdef::VK_KHR_synchronization2[]
+  * [[VUID-VkSubpassDependency-synchronization2-04984]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:srcStageMask must: not be `0`
+  * [[VUID-VkSubpassDependency-synchronization2-04985]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:dstStageMask must: not be `0`
+endif::VK_KHR_synchronization2[]
+ifndef::VK_KHR_synchronization2[]
+  * [[VUID-VkSubpassDependency-srcStageMask-04986]]
+    pname:srcStageMask must: not be `0`
+  * [[VUID-VkSubpassDependency-dstStageMask-04987]]
+    pname:dstStageMask must: not be `0`
+endif::VK_KHR_synchronization2[]
+****
+
+include::{generated}/validity/structs/VkSubpassDependency.txt[]
+--
+
+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.
+====
+
+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_KHR_synchronization2[]
+    .srcStageMask = VK_PIPELINE_STAGE_NONE_KHR;
+endif::VK_KHR_synchronization2[]
+ifndef::VK_KHR_synchronization2[]
+    .srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
+endif::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_KHR_synchronization2[]
+    .dstStageMask = VK_PIPELINE_STAGE_NONE_KHR;
+endif::VK_KHR_synchronization2[]
+ifndef::VK_KHR_synchronization2[]
+    .dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
+endif::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.
+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;
+};
+~~~~
+
+[[renderpass-feedbackloop]]
+If a subpass uses the same attachment as both an input attachment and either
+a color attachment or a depth/stencil attachment, writes via the color or
+depth/stencil attachment are not automatically made visible to reads via the
+input attachment, causing a _feedback loop_, except in any of the following
+conditions:
+
+  * If the color components or depth/stencil components read by the input
+    attachment are mutually exclusive with the components written by the
+    color or depth/stencil attachments, then there is no feedback loop.
+    This requires the graphics pipelines used by the subpass to disable
+    writes to color components that are read as inputs via the
+ifdef::VK_EXT_color_write_enable[]
+    pname:colorWriteEnable or
+endif::VK_EXT_color_write_enable[]
+    pname:colorWriteMask, and to disable writes to depth/stencil components
+    that are read as inputs via pname:depthWriteEnable or
+    pname:stencilTestEnable.
+  * If the attachment is used as an input attachment and depth/stencil
+    attachment only, and the depth/stencil attachment is not written to.
+
+Rendering within a subpass that contains a feedback loop creates a
+<<memory-model-access-data-race, data race>>, except in the following cases:
+
+  * If a memory dependency is inserted between when the attachment is
+    written and when it is subsequently read by later fragments.
+    <<synchronization-pipeline-barriers, Pipeline barriers>> expressing a
+    <<synchronization-pipeline-barriers-subpass-self-dependencies, subpass
+    self-dependency>> are the only way to achieve this, and one 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
+    subpass, if there have been no pipeline barriers since the start of the
+    subpass.
+
+[[attachment-type-imagelayout]]
+Attachments have requirements for a valid image layout depending on the
+usage
+
+  * An attachment used as an input attachment must: be in the
+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[]
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_GENERAL layout.
+  * An attachment used only as a color attachment must: be in the
+    ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL or
+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.
+  * An attachment used as both an input attachment and a color attachment
+    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.
+  * An attachment used only as a depth/stencil attachment must: be in the
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL,
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+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[]
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_GENERAL layout.
+  * An attachment used as an input attachment and depth/stencil attachment
+    must: be in the
+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[]
+    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
+    ename:VK_IMAGE_LAYOUT_GENERAL layout.
+
+An attachment must: not be used as both a depth/stencil attachment and a
+color attachment.
+
+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']
+--
+To create a render pass, call:
+
+ifdef::VK_VERSION_1_2[]
+include::{generated}/api/protos/vkCreateRenderPass2.txt[]
+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.txt[]
+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::{generated}/validity/protos/vkCreateRenderPass2.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderPassCreateInfo2KHR.txt[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is the type of 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
+    given 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 given element of
+    pname:pSubpasses is not ename:VK_ATTACHMENT_UNUSED, it must: be less
+    than pname:attachmentCount
+  * [[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
+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:pDepthStencilResolveAttachmentKHR 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[]
+****
+
+include::{generated}/validity/structs/VkRenderPassCreateInfo2.txt[]
+--
+
+[open,refpage='VkAttachmentDescription2',desc='Structure specifying an attachment description',type='structs',alias='VkAttachmentDescription2KHR']
+--
+The sname:VkAttachmentDescription2 structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentDescription2.txt[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkAttachmentDescription2KHR.txt[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is the type of 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[]
+
+.Valid Usage
+****
+  * [[VUID-VkAttachmentDescription2-finalLayout-03061]]
+    pname:finalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
+    ename:VK_IMAGE_LAYOUT_PREINITIALIZED
+  * [[VUID-VkAttachmentDescription2-format-03294]]
+    If pname:format is a color format, pname:initialLayout must: not be
+    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-VkAttachmentDescription2-format-03295]]
+    If pname:format is a depth/stencil format, pname:initialLayout must: not
+    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  * [[VUID-VkAttachmentDescription2-format-03296]]
+    If pname:format is a color format, pname:finalLayout must: not be
+    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-VkAttachmentDescription2-format-03297]]
+    If pname:format is a depth/stencil format, pname:finalLayout must: not
+    be ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+  * [[VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03298]]
+    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-VkAttachmentDescription2-separateDepthStencilLayouts-03299]]
+    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-VkAttachmentDescription2-format-03300]]
+    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-VkAttachmentDescription2-format-03301]]
+    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-VkAttachmentDescription2-format-03302]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil aspects, 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-03303]]
+    If pname:format is a depth/stencil format which includes both depth and
+    stencil aspects, 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-03304]]
+    If pname:format is a depth/stencil format which includes only the depth
+    aspect, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription2-format-03305]]
+    If pname:format is a depth/stencil format which includes only the depth
+    aspect, pname:finalLayout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription2-format-03306]]
+    If pname:format is a depth/stencil format which includes only the
+    stencil aspect, pname:initialLayout must: not be
+    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentDescription2-format-03307]]
+    If pname:format is a depth/stencil format which includes only the
+    stencil aspect, 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[]
+****
+
+include::{generated}/validity/structs/VkAttachmentDescription2.txt[]
+--
+
+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.txt[]
+
+ifdef::VK_KHR_separate_depth_stencil_layouts[]
+or the equivalent
+
+include::{generated}/api/structs/VkAttachmentDescriptionStencilLayoutKHR.txt[]
+endif::VK_KHR_separate_depth_stencil_layouts[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+
+[open,refpage='VkSubpassDescription2',desc='Structure specifying a subpass description',type='structs',alias='VkSubpassDescription2KHR']
+--
+The sname:VkSubpassDescription2 structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDescription2.txt[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassDescription2KHR.txt[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is the type of 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[]
+
+.Valid Usage
+****
+ifndef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-VkSubpassDescription2-pipelineBindPoint-03062]]
+    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+endif::VK_HUAWEI_subpass_shading[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * [[VUID-VkSubpassDescription2-pipelineBindPoint-04953]]
+    pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
+    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
+  * [[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-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
+  * [[VUID-VkSubpassDescription2-pResolveAttachments-03068]]
+    Any given element of pname:pResolveAttachments must: have the same
+    elink:VkFormat as its corresponding color attachment
+  * [[VUID-VkSubpassDescription2-pColorAttachments-03069]]
+    All attachments in pname:pColorAttachments that are not
+    ename:VK_ATTACHMENT_UNUSED must: have the same sample count
+  * [[VUID-VkSubpassDescription2-pInputAttachments-02897]]
+    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-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
+  * [[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
+  * [[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_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[]
+  * [[VUID-VkSubpassDescription2-pDepthStencilAttachment-03071]]
+    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-VkSubpassDescription2-attachment-03073]]
+    Each element of pname:pPreserveAttachments must: not be
+    ename:VK_ATTACHMENT_UNUSED
+  * [[VUID-VkSubpassDescription2-pPreserveAttachments-03074]]
+    Any given 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
+  * [[VUID-VkSubpassDescription2-None-04439]]
+    Attachments must: follow the <<attachment-type-imagelayout, image layout
+    requirements>> based on the type of attachment it is being used as
+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
+****
+
+include::{generated}/validity/structs/VkSubpassDescription2.txt[]
+--
+
+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']
+--
+If the pname:pNext chain of sname:VkSubpassDescription2 includes a
+sname:VkSubpassDescriptionDepthStencilResolve structure, then that structure
+describes multisample resolve operations for the depth/stencil attachment in
+a subpass.
+
+The sname:VkSubpassDescriptionDepthStencilResolve structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDescriptionDepthStencilResolve.txt[]
+
+ifdef::VK_KHR_depth_stencil_resolve[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassDescriptionDepthStencilResolveKHR.txt[]
+endif::VK_KHR_depth_stencil_resolve[]
+
+  * pname:sType is the type of 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.
+
+.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 have the value ename:VK_ATTACHMENT_UNUSED
+  * [[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-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 the 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 numerical type
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03182]]
+    If the 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 numerical type
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-depthResolveMode-03183]]
+    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]]
+    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 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 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
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-04588]]
+    If the elink:VkFormat of pname:pDepthStencilResolveAttachment has a
+    depth component, pname:depthResolveMode must: be a valid
+    elink:VkResolveModeFlagBits value
+  * [[VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-04589]]
+    If the elink:VkFormat of pname:pDepthStencilResolveAttachment has a
+    stencil component, pname:stencilResolveMode must: be a valid
+    elink:VkResolveModeFlagBits value
+****
+
+include::{generated}/validity/structs/VkSubpassDescriptionDepthStencilResolve.txt[]
+--
+
+[open,refpage='VkResolveModeFlagBits',desc='Bitmask indicating supported depth and stencil resolve modes',type='enums',alias='VkResolveModeFlagBitsKHR']
+--
+Possible values of
+slink:VkSubpassDescriptionDepthStencilResolve::pname:depthResolveMode and
+pname:stencilResolveMode, specifying the depth and stencil resolve modes,
+are:
+
+include::{generated}/api/enums/VkResolveModeFlagBits.txt[]
+
+ifdef::VK_KHR_depth_stencil_resolve[]
+or the equivalent
+
+include::{generated}/api/enums/VkResolveModeFlagBitsKHR.txt[]
+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.
+--
+
+[open,refpage='VkResolveModeFlags',desc='Bitmask of VkResolveModeFlagBits',type='flags',alias='VkResolveModeFlagsKHR']
+--
+include::{generated}/api/flags/VkResolveModeFlags.txt[]
+
+ifdef::VK_KHR_depth_stencil_resolve[]
+or the equivalent
+
+include::{generated}/api/flags/VkResolveModeFlagsKHR.txt[]
+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[]
+
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_fragment_shading_rate[]
+
+[open,refpage='VkAttachmentReference2',desc='Structure specifying an attachment reference',type='structs',alias='VkAttachmentReference2KHR']
+--
+The sname:VkAttachmentReference2 structure is defined as:
+
+include::{generated}/api/structs/VkAttachmentReference2.txt[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkAttachmentReference2KHR.txt[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is the type of 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
+****
+  * [[VUID-VkAttachmentReference2-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-VkAttachmentReference2-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,
+  * [[VUID-VkAttachmentReference2-attachment-04754]]
+    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, and the format of
+    the referenced attachment is a color format, 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
+  * [[VUID-VkAttachmentReference2-attachment-04755]]
+    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, and the format of
+    the referenced attachment is a depth/stencil format which includes both
+    depth and stencil aspects, and pname:layout 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:VkAttachmentReferenceStencilLayout structure
+  * [[VUID-VkAttachmentReference2-attachment-04756]]
+    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, and the format of
+    the referenced attachment is a depth/stencil format which includes only
+    the depth aspect, pname:layout must: not be
+    ename:VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or
+    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
+  * [[VUID-VkAttachmentReference2-attachment-04757]]
+    If pname:attachment is not ename:VK_ATTACHMENT_UNUSED, and the format of
+    the referenced attachment is a depth/stencil format which includes only
+    the stencil aspect, pname:layout 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[]
+****
+
+include::{generated}/validity/structs/VkAttachmentReference2.txt[]
+--
+
+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.txt[]
+
+ifdef::VK_KHR_separate_depth_stencil_layouts[]
+or the equivalent
+
+include::{generated}/api/structs/VkAttachmentReferenceStencilLayoutKHR.txt[]
+endif::VK_KHR_separate_depth_stencil_layouts[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
+
+[open,refpage='VkSubpassDependency2',desc='Structure specifying a subpass dependency',type='structs',alias='VkSubpassDependency2KHR']
+--
+The sname:VkSubpassDependency2 structure is defined as:
+
+include::{generated}/api/structs/VkSubpassDependency2.txt[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassDependency2KHR.txt[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is the type of 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_KHR_synchronization2[]
+If a slink:VkMemoryBarrier2KHR structure 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:VkMemoryBarrier2KHR.
+endif::VK_KHR_synchronization2[]
+
+.Valid Usage
+****
+  * [[VUID-VkSubpassDependency2-srcStageMask-03080]]
+    If the <<features-geometryShader,geometry shaders>> feature is not
+    enabled, pname:srcStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-VkSubpassDependency2-dstStageMask-03081]]
+    If the <<features-geometryShader,geometry shaders>> feature is not
+    enabled, pname:dstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  * [[VUID-VkSubpassDependency2-srcStageMask-03082]]
+    If the <<features-tessellationShader,tessellation shaders>> feature is
+    not enabled, pname:srcStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
+    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+  * [[VUID-VkSubpassDependency2-dstStageMask-03083]]
+    If the <<features-tessellationShader,tessellation shaders>> feature is
+    not enabled, pname:dstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
+    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+  * [[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-03087]]
+    If pname:srcSubpass is equal to pname:dstSubpass and not all of the
+    stages in pname:srcStageMask and pname:dstStageMask are
+    <<synchronization-framebuffer-regions,framebuffer-space stages>>, the
+    <<synchronization-pipeline-stages-order, logically latest>> pipeline
+    stage in pname:srcStageMask must: be
+    <<synchronization-pipeline-stages-order, logically earlier>> than or
+    equal to the <<synchronization-pipeline-stages-order, logically
+    earliest>> pipeline stage in pname:dstStageMask
+  * [[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`
+ifdef::VK_NV_mesh_shader[]
+  * [[VUID-VkSubpassDependency2-srcStageMask-02103]]
+    If the <<features-meshShader,mesh shaders>> feature is not enabled,
+    pname:srcStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
+  * [[VUID-VkSubpassDependency2-srcStageMask-02104]]
+    If the <<features-taskShader,task shaders>> feature is not enabled,
+    pname:srcStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+  * [[VUID-VkSubpassDependency2-dstStageMask-02105]]
+    If the <<features-meshShader,mesh shaders>> feature is not enabled,
+    pname:dstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
+  * [[VUID-VkSubpassDependency2-dstStageMask-02106]]
+    If the <<features-taskShader,task shaders>> feature is not enabled,
+    pname:dstStageMask must: not contain
+    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+endif::VK_NV_mesh_shader[]
+ifdef::VK_KHR_synchronization2[]
+  * [[VUID-VkSubpassDependency2-synchronization2-04988]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:srcStageMask must: not be `0`
+  * [[VUID-VkSubpassDependency2-synchronization2-04989]]
+    If the <<features-synchronization2, pname:synchronization2>> feature is
+    not enabled, pname:dstStageMask must: not be `0`
+endif::VK_KHR_synchronization2[]
+ifndef::VK_KHR_synchronization2[]
+  * [[VUID-VkSubpassDependency2-srcStageMask-04990]]
+    pname:srcStageMask must: not be `0`
+  * [[VUID-VkSubpassDependency2-dstStageMask-04991]]
+    pname:dstStageMask must: not be `0`
+endif::VK_KHR_synchronization2[]
+****
+
+include::{generated}/validity/structs/VkSubpassDependency2.txt[]
+--
+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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyRenderPass.txt[]
+--
+
+
+[[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.txt[]
+--
+
+[open,refpage='vkCreateFramebuffer',desc='Create a new framebuffer object',type='protos']
+--
+To create a framebuffer, call:
+
+include::{generated}/api/protos/vkCreateFramebuffer.txt[]
+
+  * 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.
+
+.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::{generated}/validity/protos/vkCreateFramebuffer.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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[]
+
+Other than the exceptions listed below, applications must: ensure that all
+accesses to memory that backs image subresources used as attachments in a
+given render pass instance either happen-before the
+<<renderpass-load-store-ops, load operations>> for those attachments, or
+happen-after the <<renderpass-load-store-ops, store operations>> for those
+attachments.
+
+[[renderpass-attachment-nonattachment]]
+The exceptions to the general rule are:
+
+  * For depth/stencil attachments, an aspect can: be used separately as
+    attachment and non-attachment if both accesses are read-only.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * For depth/stencil attachments, each aspect can: be used separately as
+    attachment and non-attachment as long as the non-attachment accesses are
+    also via an image subresource in either the
+    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL layout
+    or the ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+    layout, and the attachment resource uses whichever of those two layouts
+    the image accesses do not.
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+Use of non-attachment aspects in these cases is only well defined if the
+attachment is used in the subpass where the non-attachment access is being
+made, or the layout of the image subresource is constant throughout the
+entire render pass instance, including the pname:initialLayout and
+pname:finalLayout.
+
+[NOTE]
+.Note
+====
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+This restriction means
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+These restrictions mean
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+that the render pass has full knowledge of all uses of all of the
+attachments, so that the implementation is able to make correct decisions
+about when and how to perform layout transitions, when to overlap execution
+of subpasses, etc.
+====
+
+[[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.
+
+.Valid Usage
+****
+  * [[VUID-VkFramebufferCreateInfo-attachmentCount-00876]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE, pname:attachmentCount
+    must: be equal to the attachment count specified in pname:renderPass
+  * [[VUID-VkFramebufferCreateInfo-flags-02778]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE, 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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 and 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]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE, 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 is not dlink:VK_NULL_HANDLE, pname:renderPass has a
+    fragment density map attachment, and
+    <<features-fragmentDensityMapNonSubsampledImages,non-subsample image
+    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
+endif::VK_EXT_fragment_density_map[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-00880]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:width greater than or equal to
+    pname:width
+  * [[VUID-VkFramebufferCreateInfo-flags-04534]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE and 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:height greater than or equal to
+    pname:height
+  * [[VUID-VkFramebufferCreateInfo-flags-04535]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE and 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 is not dlink:VK_NULL_HANDLE and 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[]
+ifndef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-02744]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE, an element of
+    pname:pAttachments that is referenced by
+    pname:fragmentDensityMapAttachment must: have a pname:layerCount equal
+    to `1`
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-renderPass-02746]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:renderPass was
+    specified with non-zero view masks, each element of pname:pAttachments
+    that is referenced by pname:fragmentDensityMapAttachment 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
+  * [[VUID-VkFramebufferCreateInfo-renderPass-02747]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE and pname:renderPass was
+    not specified with non-zero view masks, each element of
+    pname:pAttachments that is referenced by
+    pname:fragmentDensityMapAttachment must: have a pname:layerCount equal
+    to `1`
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-pAttachments-02555]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-flags-04539]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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 is not dlink:VK_NULL_HANDLE and 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, imageless framebuffer>> 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE 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 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:renderpass is not dlink:VK_NULL_HANDLE, 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 pname:renderpass is not dlink:VK_NULL_HANDLE, 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
+  * [[VUID-VkFramebufferCreateInfo-renderPass-04546]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE, multiview is not
+    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 or equal to
+    pname:layers
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+ifndef::VK_VERSION_1_1+VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-flags-04547]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE 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:pRenderPass must: be greater than or equal to
+    pname:layers
+endif::VK_VERSION_1_1+VK_KHR_multiview[]
+  * [[VUID-VkFramebufferCreateInfo-flags-03201]]
+    If pname:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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:renderpass is not dlink:VK_NULL_HANDLE and 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[]
+****
+
+include::{generated}/validity/structs/VkFramebufferCreateInfo.txt[]
+--
+
+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.txt[]
+
+ifdef::VK_KHR_imageless_framebuffer[]
+or the equivalent
+
+include::{generated}/api/structs/VkFramebufferAttachmentsCreateInfoKHR.txt[]
+endif::VK_KHR_imageless_framebuffer[]
+
+  * pname:sType is the type of 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 of which
+    describes a number of parameters of the corresponding attachment in a
+    render pass instance.
+
+include::{generated}/validity/structs/VkFramebufferAttachmentsCreateInfo.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_imageless_framebuffer[]
+or the equivalent
+
+include::{generated}/api/structs/VkFramebufferAttachmentImageInfoKHR.txt[]
+endif::VK_KHR_imageless_framebuffer[]
+
+
+  * pname:sType is the type of 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.txt[]
+--
+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 to
+specify options for framebuffers are:
+
+include::{generated}/api/enums/VkFramebufferCreateFlagBits.txt[]
+
+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.txt[]
+
+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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyFramebuffer.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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
+// The VU below comes in an alternate version when the extension is
+// enabled.
+ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[VUID-vkCmdBeginRenderPass-initialLayout-00896]]
+    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_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
+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.
+ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
+  * [[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_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-00901]]
+    The pname:srcStageMask and 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
+****
+
+include::{generated}/validity/protos/vkCmdBeginRenderPass.txt[]
+--
+
+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.txt[]
+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.txt[]
+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-03101]]
+    The pname:srcStageMask and 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
+****
+
+include::{generated}/validity/protos/vkCmdBeginRenderPass2.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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 that contains 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_HUAWEI_subpass_shading[]
+If <<features-subpassShading, subpass shading>> is enabled, then
+pname:renderArea must: equal the framebuffer dimensions.
+endif::VK_HUAWEI_subpass_shading[]
+
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+
+When multiview is enabled, the resolve operation at the end of a subpass
+applies to all views in the view mask.
+
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+[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 that specifies 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
+ifndef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderPassBeginInfo-renderArea-02846]]
+    pname:renderArea.offset.x must: be greater than or equal to 0
+  * [[VUID-VkRenderPassBeginInfo-renderArea-02847]]
+    pname:renderArea.offset.y must: be greater than or equal to 0
+  * [[VUID-VkRenderPassBeginInfo-renderArea-02848]]
+    [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-renderArea-02849]]
+    [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
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-VkRenderPassBeginInfo-pNext-02850]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+    pname:renderArea.offset.x must: be greater than or equal to 0
+  * [[VUID-VkRenderPassBeginInfo-pNext-02851]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+    pname:renderArea.offset.y must: be greater than or equal to 0
+  * [[VUID-VkRenderPassBeginInfo-pNext-02852]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+    [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]]
+    If the pname:pNext chain does not contain
+    slink:VkDeviceGroupRenderPassBeginInfo or its
+    pname:deviceRenderAreaCount member is equal to 0,
+    [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
+  * [[VUID-VkRenderPassBeginInfo-pNext-02854]]
+    If the pname:pNext chain contains
+    slink:VkDeviceGroupRenderPassBeginInfo, the pname:offset.x member of
+    each element of pname:pDeviceRenderAreas must: be greater than or equal
+    to 0
+  * [[VUID-VkRenderPassBeginInfo-pNext-02855]]
+    If the pname:pNext chain contains
+    slink:VkDeviceGroupRenderPassBeginInfo, the pname:offset.y member of
+    each element of pname:pDeviceRenderAreas must: be greater than or equal
+    to 0
+  * [[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
+  * [[VUID-VkRenderPassBeginInfo-framebuffer-03217]]
+    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
+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 (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[]
+****
+
+include::{generated}/validity/structs/VkRenderPassBeginInfo.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassBeginInfoKHR.txt[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkSubpassBeginInfo.txt[]
+--
+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.txt[]
+
+  * 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 on the command buffer until flink:vkCmdNextSubpass or
+    flink:vkCmdEndRenderPass.
+--
+
+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_KHR_dynamic_rendering[or slink:VkRenderingInfoKHR]
+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.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupRenderPassBeginInfoKHR.txt[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is the type of 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 attachment load, store, and 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>>
+****
+
+include::{generated}/validity/structs/VkDeviceGroupRenderPassBeginInfo.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_imageless_framebuffer[]
+or the equivalent
+
+include::{generated}/api/structs/VkRenderPassAttachmentBeginInfoKHR.txt[]
+endif::VK_KHR_imageless_framebuffer[]
+
+  * pname:sType is the type of 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
+****
+
+include::{generated}/validity/structs/VkRenderPassAttachmentBeginInfo.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_imageless_framebuffer[]
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.
+
+Moving to the next subpass automatically performs any multisample resolve
+operations in the subpass being ended.
+End-of-subpass multisample resolves are treated as color attachment writes
+for the purposes of synchronization.
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+This applies to resolve operations for both color and depth/stencil
+attachments.
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+That is, they are considered to execute in the
+ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage and their
+writes are synchronized with ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT.
+Synchronization between rendering within a subpass and any resolve
+operations at the end of the subpass occurs automatically, without need for
+explicit dependencies or pipeline barriers.
+However, if the resolve attachment is also used in a different subpass, an
+explicit dependency is needed.
+
+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.txt[]
+--
+
+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.txt[]
+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.txt[]
+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.txt[]
+--
+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.txt[]
+
+  * 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_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdEndRenderPass-None-06170]]
+    The current render pass instance must: not have been begun with
+    flink:vkCmdBeginRenderingKHR
+endif::VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/protos/vkCmdEndRenderPass.txt[]
+--
+
+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.txt[]
+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.txt[]
+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 previous 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_KHR_dynamic_rendering[]
+  * [[VUID-vkCmdEndRenderPass2-None-06171]]
+    The current render pass instance must: not have been begun with
+    flink:vkCmdBeginRenderingKHR
+endif::VK_KHR_dynamic_rendering[]
+****
+
+include::{generated}/validity/protos/vkCmdEndRenderPass2.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_create_renderpass2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSubpassEndInfoKHR.txt[]
+endif::VK_KHR_create_renderpass2[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+
+include::{generated}/validity/structs/VkSubpassEndInfo.txt[]
+--
+endif::VK_VERSION_1_2,VK_KHR_create_renderpass2[]
diff --git a/registry/vulkan/chapters/resources.txt b/registry/vulkan/chapters/resources.txt
new file mode 100644
index 0000000..b844ac7
--- /dev/null
+++ b/registry/vulkan/chapters/resources.txt
@@ -0,0 +1,7991 @@
+// Copyright 2015-2021 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 are essentially unformatted arrays of bytes whereas images contain
+format information, can: be multidimensional and may: have associated
+metadata.
+
+
+[[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 via
+certain commands, or by directly specifying them as parameters to certain
+commands.
+
+Buffers are represented by sname:VkBuffer handles:
+
+include::{generated}/api/handles/VkBuffer.txt[]
+--
+
+[open,refpage='vkCreateBuffer',desc='Create a new buffer object',type='protos']
+--
+To create buffers, call:
+
+include::{generated}/api/protos/vkCreateBuffer.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateBuffer-flags-00911]]
+    If the pname:flags member of pname:pCreateInfo includes
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT, 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_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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+
+.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[]
+  * [[VUID-VkBufferCreateInfo-flags-00915]]
+    If the <<features-sparseBinding,sparse bindings>> feature is not
+    enabled, pname:flags must: not contain
+    ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
+  * [[VUID-VkBufferCreateInfo-flags-00916]]
+    If the <<features-sparseResidencyBuffer,sparse buffer residency>>
+    feature is not enabled, pname:flags must: not contain
+    ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
+  * [[VUID-VkBufferCreateInfo-flags-00917]]
+    If the <<features-sparseResidencyAliased,sparse aliased residency>>
+    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
+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 protected memory feature is not enabled, pname:flags must: not
+    contain ename:VK_BUFFER_CREATE_PROTECTED_BIT
+  * [[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::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[]
+  * [[VUID-VkBufferCreateInfo-flags-03338]]
+    If pname:flags includes
+    ename:VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the
+    <<features-bufferDeviceAddressCaptureReplay,bufferDeviceAddressCaptureReplay>>
+    or
+    <<features-bufferDeviceAddressCaptureReplayEXT,sname:VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::pname:bufferDeviceAddressCaptureReplay>>
+    feature must: be enabled
+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,
+    ename:VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR, then the pname:pNext
+    chain must: include a valid slink:VkVideoProfilesKHR structure which
+    includes at least one slink:VkVideoProfileKHR with a decode
+    codec-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,
+    ename:VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, then the pname:pNext
+    chain must: include a valid slink:VkVideoProfilesKHR structure which
+    includes at least one slink:VkVideoProfileKHR with a encode
+    codec-operation
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_KHR_maintenance4[]
+  * [[VUID-VkBufferCreateInfo-size-06409]]
+    pname:size must: be less than or equal to
+    slink:VkPhysicalDeviceMaintenance4PropertiesKHR::pname:maxBufferSize
+endif::VK_KHR_maintenance4[]
+****
+
+include::{generated}/validity/structs/VkBufferCreateInfo.txt[]
+--
+
+[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.txt[]
+
+  * 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
+    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[]
+    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_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 bitstream buffer in a
+    <<video-decode-operations, video decode operation>>.
+  * ename:VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR specifies that the buffer
+    can: be used as the destination status buffer in a
+    <<video-decode-operations, video decode operation>>.
+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 bitstream buffer in a
+    <<video-encode-operations, video encode operation>>.
+  * ename:VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR specifies that the buffer
+    can: be used as the destination status buffer in a
+    <<video-encode-operations, video encode operation>>.
+endif::VK_KHR_video_encode_queue[]
+--
+
+[open,refpage='VkBufferUsageFlags',desc='Bitmask of VkBufferUsageFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkBufferUsageFlags.txt[]
+
+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.txt[]
+
+  * ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT specifies that the buffer will
+    be backed using sparse memory binding.
+  * 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.
+  * 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::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[]
+
+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.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_external_memory[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalMemoryBufferCreateInfoKHR.txt[]
+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 the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_buffer_device_address[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferOpaqueCaptureAddressCreateInfoKHR.txt[]
+endif::VK_KHR_buffer_device_address[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyBuffer.txt[]
+--
+
+
+[[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
+interpreted as formatted data.
+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.txt[]
+--
+
+[open,refpage='vkCreateBufferView',desc='Create a new buffer view object',type='protos']
+--
+To create a buffer view, call:
+
+include::{generated}/api/protos/vkCreateBufferView.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateBufferView.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+
+.Valid Usage
+****
+  * [[VUID-VkBufferViewCreateInfo-offset-00925]]
+    pname:offset must: be less than the size of pname:buffer
+ifndef::VK_EXT_texel_buffer_alignment[]
+  * [[VUID-VkBufferViewCreateInfo-offset-00926]]
+    pname:offset must: be a multiple of
+    sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
+endif::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-buffer-00933]]
+    If pname:buffer was created with pname:usage containing
+    ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, pname:format must: be
+    supported for uniform texel buffers, as specified by the
+    ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT flag in
+    sname:VkFormatProperties::pname:bufferFeatures returned by
+    flink:vkGetPhysicalDeviceFormatProperties
+  * [[VUID-VkBufferViewCreateInfo-buffer-00934]]
+    If pname:buffer was created with pname:usage containing
+    ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:format must: be
+    supported for storage texel buffers, as specified by the
+    ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT flag in
+    sname:VkFormatProperties::pname:bufferFeatures returned by
+    flink:vkGetPhysicalDeviceFormatProperties
+  * [[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_EXT_texel_buffer_alignment[]
+  * [[VUID-VkBufferViewCreateInfo-offset-02749]]
+    If the <<features-texelBufferAlignment,texelBufferAlignment>> feature is
+    not enabled, pname:offset must: be a multiple of
+    sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
+  * [[VUID-VkBufferViewCreateInfo-buffer-02750]]
+    If the <<features-texelBufferAlignment,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:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::pname:storageTexelBufferOffsetAlignmentBytes
+    or, if
+    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::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,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:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::pname:uniformTexelBufferOffsetAlignmentBytes
+    or, if
+    slink:VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT::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_EXT_texel_buffer_alignment[]
+****
+
+include::{generated}/validity/structs/VkBufferViewCreateInfo.txt[]
+--
+
+[open,refpage='VkBufferViewCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkBufferViewCreateFlags.txt[]
+
+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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyBufferView.txt[]
+--
+
+
+[[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.txt[]
+--
+
+[open,refpage='vkCreateImage',desc='Create a new image object',type='protos']
+--
+To create images, call:
+
+include::{generated}/api/protos/vkCreateImage.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateImage-flags-00939]]
+    If the pname:flags member of pname:pCreateInfo includes
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, 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_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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 Y'C~B~C~R~ 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
+  * 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_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[]
+     and if the pname:pNext chain includes no slink:VkExternalFormatANDROID
+     structure with non-zero pname:externalFormat,
+endif::VK_ANDROID_external_memory_android_hardware_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_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:VkImageFormatProperties2; 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[]
+    defined as follows.
+  ** If slink:VkImageCreateInfo::pname:pNext contains no
+     slink:VkExternalFormatANDROID structure with non-zero
+     pname:externalFormat, then pname:imageCreateImageFormatPropertiesList
+     is
+endif::VK_ANDROID_external_memory_android_hardware_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_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; and, if pname:sharingMode
+      is ename:VK_SHARING_MODE_CONCURRENT, then pname:queueFamilyIndexCount
+      and pname:pQueueFamilyIndices must: be equal to those in
+      slink:VkImageCreateInfo; and, 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; and
+      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[]
+****
+
+.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
+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
+endif::VK_VERSION_1_1,VK_KHR_maintenance1[]
+  * [[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-00954]]
+    If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains
+    ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and
+    pname:extent.height must: be equal and pname:arrayLayers must: be
+    greater than or equal to 6
+  * [[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[]
+  * [[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_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,multisampled storage
+    images>> feature is not enabled, and pname:usage contains
+    ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples must: be
+    ename:VK_SAMPLE_COUNT_1_BIT
+  * [[VUID-VkImageCreateInfo-flags-00969]]
+    If the <<features-sparseBinding,sparse bindings>> feature is not
+    enabled, pname:flags must: not contain
+    ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
+  * [[VUID-VkImageCreateInfo-flags-01924]]
+    If the <<features-sparseResidencyAliased,sparse aliased residency>>
+    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,sparse residency for 2D
+    images>> 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,sparse residency for 3D
+    images>> 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,sparse residency for images
+    with 2 samples>> 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,sparse residency for images
+    with 4 samples>> 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,sparse residency for images
+    with 8 samples>> 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,sparse residency for images
+    with 16 samples>> 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
+ifdef::VK_VERSION_1_1[]
+  * [[VUID-VkImageCreateInfo-flags-01890]]
+    If the protected memory feature is not enabled, pname:flags must: not
+    contain ename:VK_IMAGE_CREATE_PROTECTED_BIT
+  * [[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::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[]
+  * [[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::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 Y'C~B~C~R~ 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 Y'C~B~C~R~ 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 Y'C~B~C~R~ conversion>>, pname:imageType must: be
+    ename:VK_IMAGE_TYPE_2D
+ifdef::VK_EXT_ycbcr_image_arrays[]
+  * [[VUID-VkImageCreateInfo-format-06413]]
+    If the image pname:format is one of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler Y'C~B~C~R~ conversion>>, and the pname:ycbcrImageArrays feature
+    is not enabled, pname:arrayLayers must: be 1
+endif::VK_EXT_ycbcr_image_arrays[]
+ifndef::VK_EXT_ycbcr_image_arrays[]
+  * [[VUID-VkImageCreateInfo-format-06414]]
+    If the image pname:format is one of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler Y'C~B~C~R~ conversion>>, pname:arrayLayers must: be 1
+endif::VK_EXT_ycbcr_image_arrays[]
+  * [[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_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,multisampled storage
+    images>> 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-tiling-02084]]
+    If 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-04737]]
+    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-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_DST_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, then the pname:pNext
+    chain must: include a valid slink:VkVideoProfilesKHR structure which
+    includes at least one slink:VkVideoProfileKHR with a decode
+    codec-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_DST_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, then the pname:pNext
+    chain must: include a valid slink:VkVideoProfilesKHR structure which
+    includes at least one slink:VkVideoProfileKHR with a encode
+    codec-operation
+endif::VK_KHR_video_encode_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[]
+****
+
+include::{generated}/validity/structs/VkImageCreateInfo.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_EXT_separate_stencil_usage[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageStencilUsageCreateInfoEXT.txt[]
+endif::VK_EXT_separate_stencil_usage[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_external_memory[]
+or the equivalent
+
+include::{generated}/api/structs/VkExternalMemoryImageCreateInfoKHR.txt[]
+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 the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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']
+--
+To create an image with an
+<<memory-external-android-hardware-buffer-external-formats,external
+format>>, add a sname:VkExternalFormatANDROID structure in the pname:pNext
+chain of slink:VkImageCreateInfo.
+sname:VkExternalFormatANDROID is defined as:
+
+include::{generated}/api/structs/VkExternalFormatANDROID.txt[]
+
+  * pname:sType is the type of 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:VkExternalFormatANDROID structure was not present.
+Otherwise, the pname:image will have the specified external format.
+
+.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.txt[]
+--
+endif::VK_ANDROID_external_memory_android_hardware_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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_image_format_list[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageFormatListCreateInfoKHR.txt[]
+endif::VK_KHR_image_format_list[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_EXT_image_drm_format_modifier[]
+
+[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, or
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+ifdef::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+slink:VkImageStencilUsageCreateInfo::pname:stencilUsage, or
+endif::VK_VERSION_1_2,VK_EXT_separate_stencil_usage[]
+slink:VkImageCreateInfo::pname:usage, specifying intended usage of an image,
+are:
+
+include::{generated}/api/enums/VkImageUsageFlagBits.txt[]
+
+  * 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
+    <<video-decode-operations, video decode operations>> can use the image
+    as a <<reference-picture,reference picture>>, or a source of
+    postprocessing, or transfer operation.
+  * ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR specifies that
+    <<video-decode-operations, video decode operations>> can use the image
+    as a <<video-picture-resources,DPB Video Picture Resource>>,
+    representing a <<reference-picture,reference picture>>.
+    This flag must: be combined with
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR and
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR.
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR is required for DPB image
+    resources because these resources will be associated with
+    <<reference-picture,reference pictures>> after acting as targets for
+    video decode operations.
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR is required for DPB image
+    resources because the <<reference-picture,reference pictures>>
+    associated with them act as information sources for subsequent decode
+    operations.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR specifies that the image
+    can be used as an <<input-encode-picture,input picture>> for
+    <<video-encode-operations, video encode operations>>.
+  * ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR specifies that
+    <<video-encode-operations, video encode operations>> can use the image
+    to hold a <<video-picture-resources,reconstructed picture>>, and to act
+    as a <<reference-picture,reference picture>>.
+    This flag must: be combined with
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR and
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR.
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR is required for a DPB
+    image resource because the reconstructed picture resulting from an
+    encode operation will be written to it.
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR is required for DPB image
+    resources because it can be used as a <<reference-picture,reconstructed
+    reference picture>> source for the encode operation.
+endif::VK_KHR_video_encode_queue[]
+--
+
+[open,refpage='VkImageUsageFlags',desc='Bitmask of VkImageUsageFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkImageUsageFlags.txt[]
+
+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[]
+--
+
+[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.txt[]
+
+  * ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT specifies that the image will
+    be backed using sparse memory binding.
+  * 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.
+  * 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.
+  * 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_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.
+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.
+endif::VK_EXT_fragment_density_map[]
+
+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.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+
+  * 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']
+--
+To query the memory layout of an image subresource, call:
+
+include::{generated}/api/protos/vkGetImageSubresourceLayout.txt[]
+
+  * 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 for the image subresource.
+  * 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[]
+However, the subresource layout of images in Android hardware 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[]
+
+.Valid Usage
+****
+ifndef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-vkGetImageSubresourceLayout-image-00996]]
+    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-02270]]
+    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[]
+  * [[VUID-vkGetImageSubresourceLayout-aspectMask-00997]]
+    The pname:aspectMask member of pname:pSubresource must: only have a
+    single bit set
+  * [[VUID-vkGetImageSubresourceLayout-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-vkGetImageSubresourceLayout-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
+  * [[VUID-vkGetImageSubresourceLayout-format-04461]]
+    If pname:format is a color format, the pname:aspectMask member of
+    pname:pSubresource must: be ename:VK_IMAGE_ASPECT_COLOR_BIT
+  * [[VUID-vkGetImageSubresourceLayout-format-04462]]
+    If pname:format has a depth component, the pname:aspectMask member of
+    pname:pSubresource must: contain ename:VK_IMAGE_ASPECT_DEPTH_BIT
+  * [[VUID-vkGetImageSubresourceLayout-format-04463]]
+    If pname:format has a stencil component, the pname:aspectMask member of
+    pname:pSubresource must: contain ename:VK_IMAGE_ASPECT_STENCIL_BIT
+  * [[VUID-vkGetImageSubresourceLayout-format-04464]]
+    If pname:format 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-vkGetImageSubresourceLayout-format-01581]]
+    If the pname:tiling of the pname:image is ename:VK_IMAGE_TILING_LINEAR
+    and its pname:format is a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>> with
+    two planes, the pname:aspectMask member of pname:pSubresource must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT
+  * [[VUID-vkGetImageSubresourceLayout-format-01582]]
+    If the pname:tiling of the pname:image is ename:VK_IMAGE_TILING_LINEAR
+    and its pname:format is a
+    <<formats-requiring-sampler-ycbcr-conversion,multi-planar format>> with
+    three planes, the pname:aspectMask member of pname:pSubresource 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[]
+ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-vkGetImageSubresourceLayout-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-vkGetImageSubresourceLayout-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[]
+****
+
+include::{generated}/validity/protos/vkGetImageSubresourceLayout.txt[]
+--
+
+[open,refpage='VkImageSubresource',desc='Structure specifying an image subresource',type='structs']
+--
+The sname:VkImageSubresource structure is defined as:
+
+include::{generated}/api/structs/VkImageSubresource.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+ifdef::VK_EXT_image_drm_format_modifier[]
+[open,refpage='vkGetImageDrmFormatModifierPropertiesEXT',desc='Returns an image\'s DRM format modifier',type='protos']
+--
+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.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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
+  * [[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`
+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.txt[]
+--
+
+
+[[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_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_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:VkImageDrmFormatModifierListCreateInfoEXT::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 an array element whose
+     pname:drmFormatModifier member is the value of the image's DRM format
+     modifier.
+  ** Then the image set of _format features_ is the value of taking the
+     bitwise intersection over the collected
+     `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-miplevel-sizing,Image Miplevel Sizing>>.
+  * The minimum level size is 2x2 for 2D images and 2x2x2 for 3D images.
+    See <<resources-image-miplevel-sizing,Image Miplevel 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-miplevel-sizing]]
+=== Image Miplevel Sizing
+
+A _complete mipmap chain_ is the full set of miplevels, from the largest
+miplevel provided, down to the _minimum miplevel size_.
+
+
+==== Conventional Images
+
+For conventional images, the dimensions of each successive miplevel,
+[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 miplevel, [eq]#n#.
+
+The minimum miplevel 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) miplevel, `0`.
+
+
+ifdef::VK_NV_corner_sampled_image[]
+==== Corner-Sampled Images
+
+For corner-sampled images, the dimensions of each successive miplevel,
+[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 miplevel, [eq]#n#.
+
+The minimum miplevel 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) miplevel, `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.txt[]
+
+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_KHR_synchronization2[]
+  * ename:VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR specifies a layout that
+    must: only be used with attachment accesses in the graphics pipeline.
+  * ename:VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR 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_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.
+    A swapchain's image must: be transitioned to this layout before calling
+    flink:vkQueuePresentKHR, and must: be transitioned away from this layout
+    after calling flink:vkAcquireNextImageKHR.
+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 image of 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 must: only be used as a
+    decode source image of 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_SRC_BIT_KHR usage bit enabled.
+  * ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR must: only be used as a
+    decode source or destination image of 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 must: only be used as a
+    encode output image of 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_DST_BIT_KHR usage bit enabled.
+  * ename:VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR must: only be used as a
+    encode source image of 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 a
+    encode source or destination image of 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[]
+
+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 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.txt[]
+--
+
+[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.txt[]
+--
+
+[open,refpage='VK_REMAINING_MIP_LEVELS',desc='Sentinel for all remaining array layers',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.txt[]
+--
+
+[open,refpage='VkImageViewType',desc='Image view types',type='enums']
+--
+The types of image views that can: be created are:
+
+include::{generated}/api/enums/VkImageViewType.txt[]
+--
+
+[open,refpage='vkCreateImageView',desc='Create an image view from an existing image',type='protos']
+--
+To create an image view, call:
+
+include::{generated}/api/protos/vkCreateImageView.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateImageView.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkImageViewCreateFlagBits describing
+    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 describing the format and type used to
+    interpret texel blocks in 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 overriden 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[]
+
+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.
+
+[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 _size-compatible_ with
+the image's format, as defined for
+<<copies-images-format-size-compatibility, copying data between images>>.
+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 Y'C~B~C~R~
+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.
+
+If the image has a
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format and
+pname:subresourceRange.aspectMask is ename:VK_IMAGE_ASPECT_COLOR_BIT,
+ifdef::VK_KHR_video_decode_queue[]
+and pname:image has been created with a pname:usage value *not* containing
+any of the ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR,
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR,
+ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR,
+ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, and
+ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR flags,
+endif::VK_KHR_video_decode_queue[]
+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_decode_queue[]
+If the image has a
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format and
+the pname:image has been created with a pname:usage value containing any of
+the ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR, and
+ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR flags, then all of the
+<<video-decode-operations, video decode operations>> would ignore the
+slink:VkSamplerYcbcrConversionInfo structure and/or
+<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> object,
+associated with the image view.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+If the image has a
+<<formats-requiring-sampler-ycbcr-conversion,multi-planar>> pname:format and
+the pname:image has been created with a pname:usage value containing any of
+the ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR,
+ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, and
+ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR flags, then all of the
+<<video-encode-operations, video encode operations>> would ignore the
+slink:VkSamplerYcbcrConversionInfo structure and/or
+<<samplers-YCbCr-conversion,sampler Y'C~B~C~R~ conversion>> object,
+associated with the image view.
+endif::VK_KHR_video_encode_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,image cube map arrays>> 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-01005]]
+    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 or
+    ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
+  * [[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
+  * [[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 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
+  * [[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
+  * [[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
+  * [[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-02652]]
+    If pname:usage contains ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, 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
+  * [[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[]
+  * [[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
+  * [[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-miplevel-sizing,Image Miplevel
+    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-miplevel-sizing,Image Miplevel
+    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-01584]]
+    If pname:image was created with the
+    ename:VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, the
+    pname:levelCount and pname:layerCount members of pname:subresourceRange
+    must: both be `1`
+  * [[VUID-VkImageViewCreateInfo-image-04739]]
+    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, pname:viewType must: not be
+    ename:VK_IMAGE_VIEW_TYPE_3D
+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
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT, 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>>
+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 pname:format is one of the
+    <<formats-requiring-sampler-ycbcr-conversion, formats that require a
+    sampler Y'C~B~C~R~ conversion>>, 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>>
+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,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,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,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_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 <<features-fragmentDensityMapDynamic,dynamic fragment density map>>
+    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 <<features-fragmentDensityMapDeferred,deferred fragment density map>>
+    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::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,
+    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 and all members of pname:components
+    must: have the <<resources-image-views-identity-mappings,identity
+    swizzle>>
+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,
+    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 and all members of pname:components
+    must: have the <<resources-image-views-identity-mappings,identity
+    swizzle>>
+endif::VK_KHR_video_encode_queue[]
+****
+
+include::{generated}/validity/structs/VkImageViewCreateInfo.txt[]
+--
+
+[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.txt[]
+
+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
+endif::VK_EXT_fragment_density_map[]
+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[]
+--
+
+[open,refpage='VkImageViewCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkImageViewCreateFlags.txt[]
+
+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.txt[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageViewUsageCreateInfoKHR.txt[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
+
+[open,refpage='VkImageSubresourceRange',desc='Structure specifying an image subresource range',type='structs']
+--
+The sname:VkImageSubresourceRange structure is defined as:
+
+include::{generated}/api/structs/VkImageSubresourceRange.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_EXT_astc_decode_mode[]
+
+[open,refpage='vkDestroyImageView',desc='Destroy an image view object',type='protos']
+--
+To destroy an image view, call:
+
+include::{generated}/api/protos/vkDestroyImageView.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyImageView.txt[]
+--
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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_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_KHR_format_feature_flags2[]
+ifdef::VK_KHR_format_feature_flags2[]
+  * If the extension `apiext:VK_KHR_format_feature_flags2` is enabled 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:VkFormatProperties3KHR::pname:linearTilingFeatures found by
+    calling flink:vkGetPhysicalDeviceFormatProperties2 on the same
+    pname:format as slink:VkImageViewCreateInfo::pname:format.
+  * If the extension `apiext:VK_KHR_format_feature_flags2` is not enabled
+    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_KHR if
+      the format is a depth/stencil format and the image view features also
+      contain ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR.
+    - ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR 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_KHR 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_KHR_format_feature_flags2[]
+ifndef::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[]
+    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_KHR_format_feature_flags2[]
+ifdef::VK_KHR_format_feature_flags2[]
+  * If the extension `apiext:VK_KHR_format_feature_flags2` is enabled 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[]
+    then the image view's set of _format features_ is the value of
+    slink:VkFormatProperties::pname:optimalTilingFeatures or
+    slink:VkFormatProperties3KHR::pname:optimalTilingFeatures found by
+    calling flink:vkGetPhysicalDeviceFormatProperties or
+    flink:vkGetPhysicalDeviceImageFormatProperties2 on the same pname:format
+    as slink:VkImageViewCreateInfo::pname:format.
+  * If the extension `apiext:VK_KHR_format_feature_flags2` is not enabled
+    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[]
+    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_KHR if
+      the format is a depth/stencil format and the image view features also
+      contain ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR.
+    - ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR 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_KHR 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_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_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:VkImageDrmFormatModifierListCreateInfoEXT::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 an 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 the value of taking
+     the bitwise intersection, over the collected
+     `prop`::pname:drmFormatModifierTilingFeatures.
+endif::VK_EXT_image_drm_format_modifier[]
+
+
+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.txt[]
+--
+
+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.txt[]
+--
+
+[open,refpage='vkCreateAccelerationStructureNV',desc='Create a new acceleration structure object',type='protos']
+--
+:refpage: vkCreateAccelerationStructureNV
+
+To create acceleration structures, call:
+
+include::{generated}/api/protos/vkCreateAccelerationStructureNV.txt[]
+
+  * 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.
+Populating the data in the object after allocating and binding memory is
+done with 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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.
+
+Populating the data in the object after allocating and binding memory is
+done with commands such as flink:vkCmdBuildAccelerationStructuresKHR,
+flink:vkBuildAccelerationStructuresKHR,
+flink:vkCmdCopyAccelerationStructureKHR, and
+flink:vkCopyAccelerationStructureKHR.
+
+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 may: re-use 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, 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,bufferDeviceAddressMultiDevice>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkCreateAccelerationStructureKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+
+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:flags 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-flags-04954]]
+    If ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV is set in
+    pname:flags 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-flags-04955]]
+    If any geometry includes
+    sname:VkAccelerationStructureGeometryMotionTrianglesDataNV then
+    pname:flags must: contain
+    ename:VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV
+endif::VK_NV_ray_tracing_motion_blur[]
+****
+
+include::{generated}/validity/structs/VkAccelerationStructureCreateInfoKHR.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkAccelerationStructureMotionInfoFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkAccelerationStructureMotionInfoFlagsNV.txt[]
+
+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.txt[]
+
+  * 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 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 those specified in
+     pname:pBuildInfo.
+  ** pname:geometryCount is less than or equal to that specified in
+     pname:pBuildInfo.
+  ** For each element of either pname:pGeometries or pname:ppGeometries at a
+     given index, its pname:geometryType member is equal to that specified
+     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 those
+     specified in 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 that specified in 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.
+
+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-rayTracingPipeline-03617]]
+    The <<features-rayTracingPipeline, pname:rayTracingPipeline>> or
+    <<features-rayQuery, pname:rayQuery>> feature must: be enabled
+  * [[VUID-vkGetAccelerationStructureBuildSizesKHR-device-03618]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkAccelerationStructureTypeNV.txt[]
+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.
+--
+
+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.txt[]
+
+  * 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.
+--
+
+[open,refpage='VkAccelerationStructureCreateFlagsKHR',desc='Bitmask of VkAccelerationStructureCreateFlagBitsKHR',type='flags']
+--
+include::{generated}/api/flags/VkAccelerationStructureCreateFlagsKHR.txt[]
+
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkBuildAccelerationStructureFlagBitsNV.txt[]
+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.
+
+[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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/flags/VkBuildAccelerationStructureFlagsNV.txt[]
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkGeometryTypeNV.txt[]
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/enums/VkGeometryFlagBitsNV.txt[]
+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.txt[]
+
+ifdef::VK_NV_ray_tracing[]
+or the equivalent
+
+include::{generated}/api/flags/VkGeometryFlagsNV.txt[]
+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 specifes geometry in a bottom-level
+acceleration structure and is defined as:
+
+include::{generated}/api/structs/VkGeometryDataNV.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+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-02442]]
+    All submitted commands that refer to pname:accelerationStructure must:
+    have completed execution
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyAccelerationStructureKHR.txt[]
+--
+
+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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyAccelerationStructureNV.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+  * 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.
+
+[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-device-03504]]
+    If pname:device was created with multiple physical devices, then the
+    <<features-bufferDeviceAddressMultiDevice,bufferDeviceAddressMultiDevice>>
+    feature must: be enabled
+****
+
+include::{generated}/validity/protos/vkGetAccelerationStructureDeviceAddressKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_acceleration_structure[]
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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[]
+****
+
+include::{generated}/validity/protos/vkGetImageMemoryRequirements.txt[]
+--
+
+[open,refpage='VkMemoryRequirements',desc='Structure specifying memory requirements',type='structs']
+--
+The sname:VkMemoryRequirements structure is defined as:
+
+include::{generated}/api/structs/VkMemoryRequirements.txt[]
+
+  * 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.txt[]
+--
+
+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_KHR_maintenance4[]
+For this reason, applications also must: not call
+flink:vkGetDeviceImageMemoryRequirementsKHR with a slink:VkImageCreateInfo
+describing an external Android hardware buffer.
+endif::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_KHR_maintenance4[]
+flink:vkGetDeviceBufferMemoryRequirementsKHR,
+flink:vkGetDeviceImageMemoryRequirementsKHR,
+endif::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_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_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_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_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_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 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:vkGetDeviceBufferMemoryRequirementsKHR 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:vkGetDeviceImageMemoryRequirementsKHR 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_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.txt[]
+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.txt[]
+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.txt[]
+--
+
+ifdef::VK_KHR_maintenance4[]
+[open,refpage='vkGetDeviceBufferMemoryRequirementsKHR',desc='Returns the memory requirements for specified Vulkan object',type='protos']
+--
+To determine the memory requirements for a buffer resource without creating
+an object, call:
+
+include::{generated}/api/protos/vkGetDeviceBufferMemoryRequirementsKHR.txt[]
+
+  * pname:device is the logical device intended to own the buffer.
+  * pname:pInfo is a pointer to a slink:VkDeviceBufferMemoryRequirementsKHR
+    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/vkGetDeviceBufferMemoryRequirementsKHR.txt[]
+--
+endif::VK_KHR_maintenance4[]
+
+[open,refpage='VkBufferMemoryRequirementsInfo2',desc='(None)',type='structs']
+--
+The sname:VkBufferMemoryRequirementsInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkBufferMemoryRequirementsInfo2.txt[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBufferMemoryRequirementsInfo2KHR.txt[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+ifdef::VK_KHR_maintenance4[]
+[open,refpage='VkDeviceBufferMemoryRequirementsKHR',desc='(None)',type='structs']
+--
+The sname:VkDeviceBufferMemoryRequirementsKHR structure is defined as:
+
+include::{generated}/api/structs/VkDeviceBufferMemoryRequirementsKHR.txt[]
+
+  * pname:sType is the type of 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/VkDeviceBufferMemoryRequirementsKHR.txt[]
+--
+endif::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.txt[]
+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.txt[]
+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.txt[]
+--
+
+ifdef::VK_KHR_maintenance4[]
+[open,refpage='vkGetDeviceImageMemoryRequirementsKHR',desc='Returns the memory requirements for specified Vulkan object',type='protos']
+--
+To determine the memory requirements for an image resource without creating
+an object, call:
+
+include::{generated}/api/protos/vkGetDeviceImageMemoryRequirementsKHR.txt[]
+
+  * pname:device is the logical device intended to own the image.
+  * pname:pInfo is a pointer to a slink:VkDeviceImageMemoryRequirementsKHR
+    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/vkGetDeviceImageMemoryRequirementsKHR.txt[]
+--
+endif::VK_KHR_maintenance4[]
+
+[open,refpage='VkImageMemoryRequirementsInfo2',desc='(None)',type='structs']
+--
+The sname:VkImageMemoryRequirementsInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkImageMemoryRequirementsInfo2.txt[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageMemoryRequirementsInfo2KHR.txt[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is the type of 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[]
+****
+
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+include::{generated}/validity/structs/VkImageMemoryRequirementsInfo2.txt[]
+--
+
+ifdef::VK_KHR_maintenance4[]
+[open,refpage='VkDeviceImageMemoryRequirementsKHR',desc='(None)',type='structs']
+--
+The sname:VkDeviceImageMemoryRequirementsKHR structure is defined as:
+
+include::{generated}/api/structs/VkDeviceImageMemoryRequirementsKHR.txt[]
+
+  * pname:sType is the type of 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 pname:pCreateInfo::pname:flags has
+    ename:VK_IMAGE_CREATE_DISJOINT_BIT
+ifdef::VK_EXT_image_drm_format_modifier[]
+    or ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
+endif::VK_EXT_image_drm_format_modifier[]
+    set.
+
+.Valid Usage
+****
+  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06416]]
+    The pname:pCreateInfo::pname:pNext chain must: not contain a
+    slink:VkImageSwapchainCreateInfoKHR structure
+  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06417]]
+    If pname:pCreateInfo::pname:flags has ename:VK_IMAGE_CREATE_DISJOINT_BIT
+    set then pname:planAspect must: not be zero
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06418]]
+    If pname:pCreateInfo::pname:flags has
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT set then pname:planAspect
+    must: not be zero
+endif::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkDeviceImageMemoryRequirementsKHR-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 _format plane_ for the image
+    (that is, for a two-plane image pname:planeAspect must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT or ename:VK_IMAGE_ASPECT_PLANE_1_BIT,
+    and for a three-plane image pname:planeAspect must: be
+    ename:VK_IMAGE_ASPECT_PLANE_0_BIT, ename:VK_IMAGE_ASPECT_PLANE_1_BIT or
+    ename:VK_IMAGE_ASPECT_PLANE_2_BIT)
+ifdef::VK_EXT_image_drm_format_modifier[]
+  * [[VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06420]]
+    If pname:pCreateInfo::pname:flags has
+    ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT set and the
+    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/VkDeviceImageMemoryRequirementsKHR.txt[]
+--
+endif::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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkImagePlaneMemoryRequirementsInfoKHR.txt[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is the type of 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 _format plane_ for the image (that is, for a two-plane image
+    pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT or
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and for a three-plane image
+    pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT or ename:VK_IMAGE_ASPECT_PLANE_2_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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryRequirements2KHR.txt[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_dedicated_allocation[]
+or the equivalent
+
+include::{generated}/api/structs/VkMemoryDedicatedRequirementsKHR.txt[]
+endif::VK_KHR_dedicated_allocation[]
+
+  * pname:sType is the type of 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.
+    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[]
+  * 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.txt[]
+--
+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.txt[]
+
+  * 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[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/bind_buffer_common.txt[]
+****
+
+include::{generated}/validity/protos/vkBindBufferMemory.txt[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+[open,refpage='vkBindBufferMemory2',desc='Bind device memory to buffer objects',type='protos']
+--
+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.txt[]
+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.txt[]
+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.
+
+include::{generated}/validity/protos/vkBindBufferMemory2.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_bind_memory2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindBufferMemoryInfoKHR.txt[]
+endif::VK_KHR_bind_memory2[]
+
+  * pname:sType is the type of 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.txt[]
+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.txt[]
+--
+
+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.txt[]
+
+// Jon: this conditional needs to be enhanced for 1.1 / bind_memory_2
+ifdef::VK_KHR_device_group+VK_KHR_bind_memory2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindBufferMemoryDeviceGroupInfoKHR.txt[]
+endif::VK_KHR_device_group+VK_KHR_bind_memory2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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[]
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/bind_image_common.txt[]
+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.txt[]
+--
+
+ifdef::VK_VERSION_1_1,VK_KHR_bind_memory2[]
+[open,refpage='vkBindImageMemory2',desc='Bind device memory to image objects',type='protos']
+--
+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.txt[]
+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.txt[]
+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.
+
+.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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_bind_memory2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindImageMemoryInfoKHR.txt[]
+endif::VK_KHR_bind_memory2[]
+
+  * pname:sType is the type of 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.txt[]
+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-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
+  * [[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
+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.txt[]
+--
+
+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.txt[]
+
+// Jon: this conditional needs to be enhanced for 1.1 / bind_memory_2
+ifdef::VK_KHR_device_group+VK_KHR_bind_memory2[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindImageMemoryDeviceGroupInfoKHR.txt[]
+endif::VK_KHR_device_group+VK_KHR_bind_memory2[]
+
+  * pname:sType is the type of 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]#pDeviceIndices[i]#.
+
+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.
+
+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
+****
+  * [[VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01633]]
+    At least one of pname:deviceIndexCount and
+    pname:splitInstanceBindRegionCount must: be zero
+  * [[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
+  * [[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
+****
+
+include::{generated}/validity/structs/VkBindImageMemoryDeviceGroupInfo.txt[]
+--
+
+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.txt[]
+
+  * pname:sType is the type of 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
+****
+
+include::{generated}/validity/structs/VkBindImageMemorySwapchainInfoKHR.txt[]
+--
+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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkBindImagePlaneMemoryInfoKHR.txt[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is the type of 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 _format plane_ for the image (that is, for a two-plane image
+    pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT or
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT, and for a three-plane image
+    pname:planeAspect must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
+    ename:VK_IMAGE_ASPECT_PLANE_1_BIT or ename:VK_IMAGE_ASPECT_PLANE_2_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.txt[]
+--
+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
+There is an implementation-dependent limit, pname:bufferImageGranularity,
+which 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.txt[]
+
+  * 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[]
+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.
+====
+
+
+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.txt[]
+--
+
+
+=== 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.txt[]
+
+  * 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
+    which controls 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.txt[]
+
+.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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+=== 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.txt[]
+
+  * 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 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 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.txt[]
+--
+
+[open,refpage='VkImageConstraintsInfoFlagsFUCHSIA',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkImageConstraintsInfoFlagsFUCHSIA.txt[]
+
+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.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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 an array of slink:VkSysmemColorSpaceFUCHSIA
+    structs of size pname:colorSpaceCount
+
+include::{generated}/validity/structs/VkImageFormatConstraintsInfoFUCHSIA.txt[]
+--
+
+[open,refpage='VkImageFormatConstraintsFlagsFUCHSIA',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkImageFormatConstraintsFlagsFUCHSIA.txt[]
+
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+==== 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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkBufferConstraintsInfoFUCHSIA',desc='Structure buffer-based buffer collection constraints',type='structs']
+--
+The sname:VkBufferConstraintsInfoFUCHSIA structure is defined as:
+
+include::{generated}/api/structs/VkBufferConstraintsInfoFUCHSIA.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+=== 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+=== 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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='vkDestroyBufferCollectionFUCHSIA',desc='Destroy a buffer collection',type='protos']
+--
+To release a slink:VkBufferCollectionFUCHSIA:
+
+include::{generated}/api/protos/vkDestroyBufferCollectionFUCHSIA.txt[]
+
+  * 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
+    which controls 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.txt[]
+--
+endif::VK_FUCHSIA_buffer_collection[]
diff --git a/registry/vulkan/chapters/samplers.txt b/registry/vulkan/chapters/samplers.txt
new file mode 100644
index 0000000..726b4a7
--- /dev/null
+++ b/registry/vulkan/chapters/samplers.txt
@@ -0,0 +1,1025 @@
+// Copyright 2015-2021 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.txt[]
+--
+
+[open,refpage='vkCreateSampler',desc='Create a new sampler object',type='protos']
+--
+To create a sampler object, call:
+
+include::{generated}/api/protos/vkCreateSampler.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateSampler-maxSamplerAllocationCount-04110]]
+    There must: be less than
+    slink:VkPhysicalDeviceLimits::pname:maxSamplerAllocationCount
+    slink:VkSampler objects currently created on the device
+****
+
+include::{generated}/validity/protos/vkCreateSampler.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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 (level-of-detail) calculation and bias provided by image
+    sampling functions in SPIR-V, as described in the
+    <<textures-level-of-detail-operation, Level-of-Detail 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
+    function 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,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,anisotropic sampling>> 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]]
+    The sampler reduction mode must: be set to
+    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE if
+    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> is enabled
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+  * [[VUID-VkSamplerCreateInfo-addressModeU-01079]]
+    If <<features-samplerMirrorClampToEdge,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[]
+ifndef::VK_EXT_filter_cubic[]
+  * [[VUID-VkSamplerCreateInfo-magFilter-01422]]
+    If 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_EXT_filter_cubic[]
+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_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,maxCustomBorderColorSamplers>>
+    member of the slink:VkPhysicalDeviceCustomBorderColorPropertiesEXT
+    structure
+endif::VK_EXT_custom_border_color[]
+****
+
+include::{generated}/validity/structs/VkSamplerCreateInfo.txt[]
+--
+
+[open,refpage='VK_LOD_CLAMP_NONE',desc='Maximum level of detail 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.txt[]
+--
+
+[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.txt[]
+
+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.
+
+[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[]
+--
+
+[open,refpage='VkSamplerCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkSamplerCreateFlags.txt[]
+
+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.txt[]
+
+ifdef::VK_EXT_sampler_filter_minmax[]
+or the equivalent
+
+include::{generated}/api/structs/VkSamplerReductionModeCreateInfoEXT.txt[]
+endif::VK_EXT_sampler_filter_minmax[]
+
+  * pname:sType is the type of 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 that controls 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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_EXT_sampler_filter_minmax[]
+or the equivalent
+
+include::{generated}/api/enums/VkSamplerReductionModeEXT.txt[]
+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.
+--
+endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[]
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+
+  * 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,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='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.txt[]
+
+  * 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 which contains 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 which contains 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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroySampler.txt[]
+--
+
+
+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 Y'C~B~C~R~ 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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionInfoKHR.txt[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/handles/VkSamplerYcbcrConversionKHR.txt[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+--
+
+[open,refpage='vkCreateSamplerYcbcrConversion',desc='Create a new {YCbCr} conversion',type='protos']
+--
+To create a slink:VkSamplerYcbcrConversion, call:
+
+ifdef::VK_VERSION_1_1[]
+include::{generated}/api/protos/vkCreateSamplerYcbcrConversion.txt[]
+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.txt[]
+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.
+
+.Valid Usage
+****
+  * [[VUID-vkCreateSamplerYcbcrConversion-None-01648]]
+    The <<features-samplerYcbcrConversion, sampler {YCbCr} conversion
+    feature>> must: be enabled
+****
+
+include::{generated}/validity/protos/vkCreateSamplerYcbcrConversion.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/structs/VkSamplerYcbcrConversionCreateInfoKHR.txt[]
+endif::VK_KHR_sampler_ycbcr_conversion[]
+
+  * pname:sType is the type of 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
+****
+ifndef::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-04060]]
+    pname:format must: represent unsigned normalized values (i.e. the format
+    must be a etext:UNORM format)
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+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
+  * [[VUID-VkSamplerYcbcrConversionCreateInfo-format-04061]]
+    If an external format conversion is not being created, pname:format
+    must: represent unsigned normalized values (i.e. the format must be a
+    etext:UNORM format)
+endif::VK_ANDROID_external_memory_android_hardware_buffer[]
+  * [[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 which contains 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
+****
+
+include::{generated}/validity/structs/VkSamplerYcbcrConversionCreateInfo.txt[]
+
+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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/enums/VkSamplerYcbcrModelConversionKHR.txt[]
+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 Y’C~B~C~R~ 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 Y’C~B~C~R~ 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 Y’C~B~C~R~ 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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/enums/VkSamplerYcbcrRangeKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_sampler_ycbcr_conversion[]
+or the equivalent
+
+include::{generated}/api/enums/VkChromaLocationKHR.txt[]
+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.
+--
+
+[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.txt[]
+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.txt[]
+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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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,customBorderColorWithoutFormat>>
+    feature is enabled.
+
+.Valid Usage
+****
+  * [[VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04013]]
+    If provided pname:format is not ename:VK_FORMAT_UNDEFINED then the
+    slink:VkSamplerCreateInfo::pname:borderColor type must: match the
+    sampled type of the provided pname:format, as shown in the _SPIR-V
+    Sampled Type_ column of the <<formats-numericformat>> table
+  * [[VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04014]]
+    If the
+    <<features-customBorderColorWithoutFormat,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, or
+    ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 format then pname:format must: not
+    be ename:VK_FORMAT_UNDEFINED
+****
+
+include::{generated}/validity/structs/VkSamplerCustomBorderColorCreateInfoEXT.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_EXT_border_color_swizzle[]
diff --git a/registry/vulkan/chapters/shaders.txt b/registry/vulkan/chapters/shaders.txt
new file mode 100644
index 0000000..7e923e8
--- /dev/null
+++ b/registry/vulkan/chapters/shaders.txt
@@ -0,0 +1,1909 @@
+// Copyright 2015-2021 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
+<<pipeline-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 that describe
+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.
+
+
+[[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.txt[]
+--
+
+[open,refpage='vkCreateShaderModule',desc='Creates a new shader module object',type='protos']
+--
+To create a shader module, call:
+
+include::{generated}/api/protos/vkCreateShaderModule.txt[]
+
+  * 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>>.
+
+include::{generated}/validity/protos/vkCreateShaderModule.txt[]
+--
+
+[open,refpage='VkShaderModuleCreateInfo',desc='Structure specifying parameters of a newly created shader module',type='structs']
+--
+The sname:VkShaderModuleCreateInfo structure is defined as:
+
+include::{generated}/api/structs/VkShaderModuleCreateInfo.txt[]
+
+  * pname:sType is the type of 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
+****
+  * [[VUID-VkShaderModuleCreateInfo-codeSize-01085]]
+    pname:codeSize must: be greater than 0
+ifndef::VK_NV_glsl_shader[]
+  * [[VUID-VkShaderModuleCreateInfo-codeSize-01086]]
+    pname:codeSize must: be a multiple of 4
+  * [[VUID-VkShaderModuleCreateInfo-pCode-01087]]
+    pname:pCode must: point to valid SPIR-V code, formatted and packed as
+    described by the <<spirv-spec,Khronos SPIR-V Specification>>
+  * [[VUID-VkShaderModuleCreateInfo-pCode-01088]]
+    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
+endif::VK_NV_glsl_shader[]
+ifdef::VK_NV_glsl_shader[]
+  * [[VUID-VkShaderModuleCreateInfo-pCode-01376]]
+    If pname:pCode is a pointer to SPIR-V code, pname:codeSize must: be a
+    multiple of 4
+  * [[VUID-VkShaderModuleCreateInfo-pCode-01377]]
+    pname:pCode must: point to either valid SPIR-V code, formatted and
+    packed as described by the <<spirv-spec,Khronos SPIR-V Specification>>
+    or valid GLSL code which must: be written to the `GL_KHR_vulkan_glsl`
+    extension specification
+  * [[VUID-VkShaderModuleCreateInfo-pCode-01378]]
+    If pname:pCode is a pointer to SPIR-V code, that code 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-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-pCode-01089]]
+    pname:pCode must: declare the code:Shader capability for SPIR-V code
+  * [[VUID-VkShaderModuleCreateInfo-pCode-01090]]
+    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-VkShaderModuleCreateInfo-pCode-01091]]
+    If 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-VkShaderModuleCreateInfo-pCode-04146]]
+    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-VkShaderModuleCreateInfo-pCode-04147]]
+    If 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
+****
+
+include::{generated}/validity/structs/VkShaderModuleCreateInfo.txt[]
+--
+
+[open,refpage='VkShaderModuleCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkShaderModuleCreateFlags.txt[]
+
+tname:VkShaderModuleCreateFlags is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+ifdef::VK_EXT_validation_cache[]
+include::VK_EXT_validation_cache/shader-module-validation-cache.txt[]
+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.txt[]
+
+  * 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.txt[]
+--
+
+
+[[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-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[]
+[[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.
+The only fixed output of the task shader is a task count, identifying the
+number of mesh shader workgroups to create.
+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_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.
+
+
+[[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_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 explcitly via the API, or
+implicitly through the task shader's work creation mechanism.
+endif::VK_NV_mesh_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[]
+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[]
+ifdef::VK_NV_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[]
+
+
+[[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[]
+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.txt[]
+
+  * 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 when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the
+slink:VkPipelineTessellationStateCreateInfo::pname:patchControlPoints value
+used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetPatchControlPointsEXT-None-04873]]
+    The <<features-extendedDynamicState2PatchControlPoints,
+    extendedDynamicState2PatchControlPoints>> feature must: be enabled
+  * [[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.txt[]
+--
+endif::VK_EXT_extended_dynamic_state2[]
+
+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_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 fname:vkCmdTraceRaysKHR
+using the pname:raygenShaderBindingTableBuffer and
+pname:raygenShaderBindingOffset parameters.
+
+
+[[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
+
+Interpolation decorations control the behavior of attribute interpolation in
+the fragment shader stage.
+Interpolation decorations can: be applied to code:Input storage class
+variables in the fragment shader stage's interface, and control the
+interpolation behavior of those variables.
+
+Inputs that could be interpolated can: be decorated by at most one of the
+following decorations:
+
+  * code:Flat: no interpolation
+  * code:NoPerspective: linear interpolation (for
+    <<line_linear_interpolation,lines>> and
+    <<triangle_linear_interpolation,polygons>>)
+ifdef::VK_NV_fragment_shader_barycentric[]
+  * code:PerVertexNV: values fetched from shader-specified primitive vertex
+endif::VK_NV_fragment_shader_barycentric[]
+
+Fragment input variables decorated with neither code:Flat nor
+code:NoPerspective use perspective-correct interpolation (for
+<<line_perspective_interpolation,lines>> and
+<<triangle_perspective_interpolation,polygons>>).
+
+The presence of and type of interpolation is controlled by the above
+interpolation decorations as well as the auxiliary decorations code:Centroid
+and code:Sample.
+
+A variable decorated with code:Flat will not be interpolated.
+Instead, it will have the same value for every fragment within a triangle.
+This value will come from a single <<vertexpostproc-flatshading,provoking
+vertex>>.
+A variable decorated with code:Flat can: also be decorated with
+code:Centroid or code:Sample, which will mean the same thing as decorating
+it only as code:Flat.
+
+For fragment shader input variables decorated with neither code:Centroid nor
+code:Sample, the assigned variable may: be interpolated anywhere within the
+fragment and a single value may: be assigned to each sample within the
+fragment.
+
+If a fragment shader input is decorated with code:Centroid, a single value
+may: be assigned to that variable for all samples in the fragment, but that
+value must: be interpolated to a location that lies in both the fragment and
+in the primitive being rendered, including any of the fragment's samples
+covered by the primitive.
+Because the location at which the variable is interpolated may: be different
+in neighboring fragments, and derivatives may: be computed by computing
+differences between neighboring fragments, derivatives of centroid-sampled
+inputs may: be less accurate than those for non-centroid interpolated
+variables.
+ifdef::VK_EXT_post_depth_coverage[]
+The code:PostDepthCoverage execution mode does not affect the determination
+of the centroid location.
+endif::VK_EXT_post_depth_coverage[]
+
+If a fragment shader input is decorated with code:Sample, a separate value
+must: be assigned to that variable for each covered sample in the fragment,
+and that value must: be sampled at the location of the individual sample.
+When pname:rasterizationSamples is ename:VK_SAMPLE_COUNT_1_BIT, the fragment
+center must: be used for code:Centroid, code:Sample, and undecorated
+attribute interpolation.
+
+Fragment shader inputs that are signed or unsigned integers, integer
+vectors, or any double-precision floating-point type must: be decorated with
+code:Flat.
+
+ifdef::VK_AMD_shader_explicit_vertex_parameter[]
+When the `apiext:VK_AMD_shader_explicit_vertex_parameter` device extension
+is enabled inputs can: be also decorated with the code:CustomInterpAMD
+interpolation decoration, including fragment shader inputs that are signed
+or unsigned integers, integer vectors, or any double-precision
+floating-point type.
+Inputs decorated with code:CustomInterpAMD can: only be accessed by the
+extended instruction code:InterpolateAtVertexAMD and allows accessing the
+value of the input for individual vertices of the primitive.
+endif::VK_AMD_shader_explicit_vertex_parameter[]
+
+ifdef::VK_NV_fragment_shader_barycentric[]
+[[shaders-interpolation-decorations-pervertexnv]]
+When the pname:fragmentShaderBarycentric feature is enabled, inputs can: be
+also decorated with the code:PerVertexNV interpolation decoration, including
+fragment shader inputs that are signed or unsigned integers, integer
+vectors, or any double-precision floating-point type.
+Inputs decorated with code:PerVertexNV can: only be accessed using an extra
+array dimension, where the extra index identifies one of the vertices of the
+primitive that produced the fragment.
+endif::VK_NV_fragment_shader_barycentric[]
+
+
+[[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
+memory instruction or image instruction with code:x as an code:id operand.
+See the "`Memory Instructions`" and "`Image Instructions`" subsections of
+section 3 "`Binary Form`" of the SPIR-V specification for the complete list
+of SPIR-V memory instructions.
+
+Static use is not used to control the behavior of variables with code:Input
+and code:Output storage.
+The effects of those variables are applied based only on whether they are
+present in a shader entry point's 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[]
+task, mesh, and
+endif::VK_NV_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>>.
+
+
+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.
+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, as
+    <<primsrast-shading-rate-image,determined by the shading rate>>.
+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 level of detail 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, and values returned by atomic instructions in helper invocations
+are undefined:.
+
+Helper invocations may: become inactive at any time for any reason, with one
+exception.
+If a helper invocation would be active if it were not a helper invocation,
+it must: be active for <<shaders-derivative-operations, derivative>>
+ifdef::VK_VERSION_1_1[]
+and <<shaders-quad-operations, quad group>>
+endif::VK_VERSION_1_1[]
+operations.
+
+ifdef::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_EXT_shader_demote_to_helper_invocation[]
+
+
+ifdef::VK_NV_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.
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkCooperativeMatrixPropertiesNV',desc='Structure specifying cooperative matrix properties',type='structs']
+--
+Each sname:VkCooperativeMatrixPropertiesNV structure describes a single
+supported combination of types for a matrix multiply/add operation
+(code:OpCooperativeMatrixMulAddNV).
+The multiply can: be described in terms of the following variables and types
+(in SPIR-V pseudocode):
+
+[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
+~~~~
+
+A matrix multiply with these dimensions is known as an _MxNxK_ matrix
+multiply.
+
+The sname:VkCooperativeMatrixPropertiesNV structure is defined as:
+
+include::{generated}/api/structs/VkCooperativeMatrixPropertiesNV.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkScopeNV',desc='Specify SPIR-V scope',type='enums']
+--
+Possible values for elink:VkScopeNV include:
+
+include::{generated}/api/enums/VkScopeNV.txt[]
+
+  * ename:VK_SCOPE_DEVICE_NV corresponds to SPIR-V code:Device scope.
+  * ename:VK_SCOPE_WORKGROUP_NV corresponds to SPIR-V code:Workgroup scope.
+  * ename:VK_SCOPE_SUBGROUP_NV corresponds to SPIR-V code:Subgroup scope.
+  * ename:VK_SCOPE_QUEUE_FAMILY_NV corresponds to SPIR-V code:QueueFamily
+    scope.
+
+All enum values match the corresponding SPIR-V value.
+--
+
+[open,refpage='VkComponentTypeNV',desc='Specify SPIR-V cooperative matrix component type',type='enums']
+--
+Possible values for elink:VkComponentTypeNV include:
+
+include::{generated}/api/enums/VkComponentTypeNV.txt[]
+
+  * ename:VK_COMPONENT_TYPE_FLOAT16_NV corresponds to SPIR-V
+    code:OpTypeFloat 16.
+  * ename:VK_COMPONENT_TYPE_FLOAT32_NV corresponds to SPIR-V
+    code:OpTypeFloat 32.
+  * ename:VK_COMPONENT_TYPE_FLOAT64_NV corresponds to SPIR-V
+    code:OpTypeFloat 64.
+  * ename:VK_COMPONENT_TYPE_SINT8_NV corresponds to SPIR-V code:OpTypeInt 8 1.
+  * ename:VK_COMPONENT_TYPE_SINT16_NV corresponds to SPIR-V code:OpTypeInt
+    16 1.
+  * ename:VK_COMPONENT_TYPE_SINT32_NV corresponds to SPIR-V code:OpTypeInt
+    32 1.
+  * ename:VK_COMPONENT_TYPE_SINT64_NV corresponds to SPIR-V code:OpTypeInt
+    64 1.
+  * ename:VK_COMPONENT_TYPE_UINT8_NV corresponds to SPIR-V code:OpTypeInt 8 0.
+  * ename:VK_COMPONENT_TYPE_UINT16_NV corresponds to SPIR-V code:OpTypeInt
+    16 0.
+  * ename:VK_COMPONENT_TYPE_UINT32_NV corresponds to SPIR-V code:OpTypeInt
+    32 0.
+  * ename:VK_COMPONENT_TYPE_UINT64_NV corresponds to SPIR-V code:OpTypeInt
+    64 0.
+--
+endif::VK_NV_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.txt[]
+--
+
+[open,refpage='vkCreateValidationCacheEXT',desc='Creates a new validation cache',type='protos']
+--
+To create validation cache objects, call:
+
+include::{generated}/api/protos/vkCreateValidationCacheEXT.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkValidationCacheCreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkValidationCacheCreateFlagsEXT.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+  * 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.txt[]
+--
+endif::VK_EXT_validation_cache[]
diff --git a/registry/vulkan/chapters/sparsemem.txt b/registry/vulkan/chapters/sparsemem.txt
new file mode 100644
index 0000000..dc6d76a
--- /dev/null
+++ b/registry/vulkan/chapters/sparsemem.txt
@@ -0,0 +1,1813 @@
+// Copyright 2015-2021 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.
+
+
+[[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.
+
+  * <<features-sparseBinding,Sparse binding>> is the base feature, 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:
++
+  *** <<features-sparseResidencyBuffer,pname:sparseResidencyBuffer>>:
+      Support for creating sname:VkBuffer objects with the
+      ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT.
+  *** <<features-sparseResidencyImage2D,pname:sparseResidencyImage2D>>:
+      Support for creating 2D single-sampled sname:VkImage objects with
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** <<features-sparseResidencyImage3D,pname:sparseResidencyImage3D>>:
+      Support for creating 3D sname:VkImage objects with
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** <<features-sparseResidency2Samples,pname:sparseResidency2Samples>>:
+      Support for creating 2D sname:VkImage objects with 2 samples and
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** <<features-sparseResidency4Samples,pname:sparseResidency4Samples>>:
+      Support for creating 2D sname:VkImage objects with 4 samples and
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** <<features-sparseResidency8Samples,pname:sparseResidency8Samples>>:
+      Support for creating 2D sname:VkImage objects with 8 samples and
+      ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT.
+  *** <<features-sparseResidency16Samples,pname:sparseResidency16Samples>>:
+      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.
+
+  * <<features-sparseResidencyAliased,Sparse aliasing>> 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.
++
+See <<sparsememory-sparse-memory-aliasing,Sparse Memory Aliasing>> for more
+information.
+
+
+[[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.
+
+Formatted accesses to 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,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,sparse residency>> 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[]
+
+
+[[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>>
+  * <<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>>
+
+
+[[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.txt[]
+
+  * pname:residencyStandard2DBlockShape 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.
+  * pname:residencyStandard2DMultisampleBlockShape 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.
+  * pname:residencyStandard3DBlockShape 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.
+  * pname:residencyAlignedMipSize 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.
+  * pname:residencyNonResidentStrict 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.
+
+include::{generated}/validity/structs/VkPhysicalDeviceSparseProperties.txt[]
+--
+
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceSparseImageFormatInfo2',desc='Structure specifying sparse image format inputs',type='structs']
+--
+The sname:VkPhysicalDeviceSparseImageFormatInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceSparseImageFormatInfo2.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPhysicalDeviceSparseImageFormatInfo2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkSparseImageFormatProperties2',desc='Structure specifying sparse image format properties',type='structs']
+--
+The sname:VkSparseImageFormatProperties2 structure is defined as:
+
+include::{generated}/api/structs/VkSparseImageFormatProperties2.txt[]
+
+ifdef::VK_KHR_get_physical_device_properties2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSparseImageFormatProperties2KHR.txt[]
+endif::VK_KHR_get_physical_device_properties2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+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.txt[]
+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.txt[]
+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.txt[]
+--
+
+ifdef::VK_KHR_maintenance4[]
+[open,refpage='vkGetDeviceImageSparseMemoryRequirementsKHR',desc='Query the memory requirements for a sparse image',type='protos']
+--
+To determine the sparse memory requirements for an image resource without
+creating an object, call:
+
+include::{generated}/api/protos/vkGetDeviceImageSparseMemoryRequirementsKHR.txt[]
+
+  * pname:device is the logical device intended to own the image.
+  * pname:pInfo is a pointer to a slink:VkDeviceImageMemoryRequirementsKHR
+    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/vkGetDeviceImageSparseMemoryRequirementsKHR.txt[]
+--
+endif::VK_KHR_maintenance4[]
+
+[open,refpage='VkImageSparseMemoryRequirementsInfo2',desc='(None)',type='structs']
+--
+The sname:VkImageSparseMemoryRequirementsInfo2 structure is defined as:
+
+include::{generated}/api/structs/VkImageSparseMemoryRequirementsInfo2.txt[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkImageSparseMemoryRequirementsInfo2KHR.txt[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkSparseImageMemoryRequirements2',desc='(None)',type='structs']
+--
+The sname:VkSparseImageMemoryRequirements2 structure is defined as:
+
+include::{generated}/api/structs/VkSparseImageMemoryRequirements2.txt[]
+
+ifdef::VK_KHR_get_memory_requirements2[]
+or the equivalent
+
+include::{generated}/api/structs/VkSparseImageMemoryRequirements2KHR.txt[]
+endif::VK_KHR_get_memory_requirements2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.
+
+[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.
+====
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkSparseImageMemoryBind',desc='Structure specifying sparse image memory bind',type='structs']
+--
+The sname:VkSparseImageMemoryBind structure is defined as:
+
+include::{generated}/api/structs/VkSparseImageMemoryBind.txt[]
+
+  * 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,sparse aliased residency>>
+    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-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-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-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.txt[]
+--
+
+[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.txt[]
+
+  * 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
+  * [[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
+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 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.txt[]
+--
+
+[open,refpage='VkBindSparseInfo',desc='Structure specifying a sparse binding operation',type='structs']
+--
+The sname:VkBindSparseInfo structure is defined as:
+
+include::{generated}/api/structs/VkBindSparseInfo.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+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.txt[]
+
+ifdef::VK_KHR_device_group[]
+or the equivalent
+
+include::{generated}/api/structs/VkDeviceGroupBindSparseInfoKHR.txt[]
+endif::VK_KHR_device_group[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_VERSION_1_1,VK_KHR_device_group[]
diff --git a/registry/vulkan/chapters/synchronization.txt b/registry/vulkan/chapters/synchronization.txt
new file mode 100644
index 0000000..0f316f8
--- /dev/null
+++ b/registry/vulkan/chapters/synchronization.txt
@@ -0,0 +1,6534 @@
+// Copyright 2015-2021 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.
+
+<<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.
+
+<<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.
+
+<<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.
+
+
+[[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 *A* and *B* be separate sets of operations.
+  * Let *S* be a synchronization command.
+  * Let *A~S~* and *B~S~* be the synchronization scopes of *S*.
+  * Let *A'* be the intersection of sets *A* and *A~S~*.
+  * Let *B'* be the intersection of sets *B* and *B~S~*.
+  * Submitting *A*, *S* and *B* for execution, in that order, will result in
+    execution dependency *E* between *A'* and *B'*.
+  * Execution dependency *E* guarantees that *A'* happens-before *B'*.
+
+[[synchronization-dependencies-chains]]
+An _execution dependency chain_ is a sequence of execution dependencies that
+form a happens-before relation between the first dependency's *A'* and the
+final dependency's *B'*.
+For each consecutive pair of execution dependencies, a chain exists if the
+intersection of *B~S~* in the first dependency and *A~S~* 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 *S* be a set of synchronization commands that generate an execution
+    dependency chain.
+  * Let *A~S~* be the first synchronization scope of the first command in
+    *S*.
+  * Let *B~S~* be the second synchronization scope of the last command in
+    *S*.
+
+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 *A'* is made available.
+Any type of access that is in a memory dependency's second access scope and
+occurs in *B'* 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 *a* be the set of memory accesses performed by *A'*.
+  * Let *b* be the set of memory accesses performed by *B'*.
+  * Let *a~S~* be the first access scope of the first command in *S*.
+  * Let *b~S~* be the second access scope of the last command in *S*.
+  * Let *a'* be the intersection of sets *a* and *a~S~*.
+  * Let *b'* be the intersection of sets *b* and *b~S~*.
+  * Submitting *A*, *S* and *B* for execution, in that order, will result in
+    a memory dependency *m* between *A'* and *B'*.
+  * Memory dependency *m* guarantees that:
+  ** Memory writes in *a'* are made available.
+  ** Available memory writes, including those from *a'*, are made visible to
+     *b'*.
+
+[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.
+
+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_KHR_synchronization2[]
+slink:VkImageMemoryBarrier2KHR or
+endif::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
+or synchronization 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.
+<<drawing,Drawing commands>>, <<dispatch,dispatching commands>>,
+<<copies,copy commands>>, <<clears,clear commands>>, and <<synchronization,
+synchronization commands>> all execute in different sets of
+<<VkPipelineStageFlagBits,pipeline stages>>.
+<<synchronization, Synchronization commands>> do not execute in a defined
+pipeline stage.
+
+[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_KHR_synchronization2[]
+[open,refpage='VkPipelineStageFlagBits2KHR',desc='Pipeline stage flags for VkPipelineStageFlags2KHR',type='enums']
+--
+Bits which can: be set in a tlink:VkPipelineStageFlags2KHR 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/VkPipelineStageFlagBits2KHR.txt[]
+
+  * ename:VK_PIPELINE_STAGE_2_NONE_KHR specifies no stages of execution.
+  * ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR 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[]
+  * ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV specifies the task shader
+    stage.
+  * ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV specifies the mesh shader
+    stage.
+endif::VK_NV_mesh_shader[]
+  * ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR specifies the stage of the
+    pipeline where index buffers are consumed.
+  * ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR specifies the
+    stage of the pipeline where vertex buffers are consumed.
+  * ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR is equivalent to the
+    logical OR of:
+  ** ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR
+  * ename:VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR specifies the vertex
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR specifies
+    the tessellation control shader stage.
+  * ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
+    specifies the tessellation evaluation shader stage.
+  * ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR specifies the geometry
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR is
+    equivalent to specifying all supported
+    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
+    stages>>:
+  ** ename:VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR
+ifdef::VK_NV_mesh_shader[]
+  ** ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV
+  ** ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV
+endif::VK_NV_mesh_shader[]
+  * ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR specifies the fragment
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR 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-store-ops, subpass load
+    operations>> for framebuffer attachments with a depth/stencil format.
+  * ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR specifies the
+    stage of the pipeline where late fragment tests (depth and stencil tests
+    after fragment shading) are performed.
+    This stage also includes <<renderpass-load-store-ops, subpass store
+    operations>> for framebuffer attachments with a depth/stencil format.
+  * ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR specifies the
+    stage of the pipeline after blending where the final color values are
+    output from the pipeline.
+    This stage also includes <<renderpass-load-store-ops, subpass load and
+    store operations>> and multisample resolve operations for framebuffer
+    attachments with a color
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    or depth/stencil
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    format.
+  * ename:VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR specifies the compute
+    shader stage.
+  * ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR 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_KHR specifies the execution of all
+    <<copies,copy commands>>, including flink:vkCmdCopyQueryPoolResults.
+  * ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR specifies the execution of
+    flink:vkCmdBlitImage.
+  * ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR specifies the execution of
+    flink:vkCmdResolveImage.
+  * ename:VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR specifies the execution of
+    <<clears,clear commands>>, with the exception of
+    flink:vkCmdClearAttachments.
+  * ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR is equivalent to
+    specifying all of:
+  ** ename:VK_PIPELINE_STAGE_2_COPY_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR
+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>>.
+endif::VK_KHR_acceleration_structure,VK_NV_ray_tracing[]
+  * ename:VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR specifies the execution
+    of all graphics pipeline stages, and is equivalent to the logical OR of:
+  ** ename:VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR
+ifdef::VK_NV_mesh_shader[]
+  ** ename:VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV
+  ** ename:VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV
+endif::VK_NV_mesh_shader[]
+  ** ename:VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR
+  ** ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR
+ifdef::VK_EXT_conditional_rendering[]
+  ** ename:VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+  ** ename:VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_shading_rate_image[]
+  ** ename:VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV
+endif::VK_NV_shading_rate_image[]
+ifdef::VK_EXT_fragment_density_map[]
+  ** ename:VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_HUAWEI_invocation_mask[]
+  ** ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
+endif::VK_HUAWEI_invocation_mask[]
+  * ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR 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 stage of
+    the pipeline where <<video-decode-operations, video decode operation>>
+    are performed.
+endif::VK_KHR_video_decode_queue[]
+ifdef::VK_KHR_video_encode_queue[]
+  * ename:VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR specifies the stage of
+    the pipeline where <<video-encode-operations, video encode operation>>
+    are performed.
+endif::VK_KHR_video_encode_queue[]
+ifdef::VK_HUAWEI_subpass_shading[]
+  * ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI specifies the
+    subpass shading shader stage.
+endif::VK_HUAWEI_subpass_shading[]
+  * ename:VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR is equivalent to
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR with
+    tlink:VkAccessFlags2KHR set to `0` when specified in the second
+    synchronization scope, but equivalent to
+    ename:VK_PIPELINE_STAGE_2_NONE_KHR in the first scope.
+  * ename:VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR is equivalent to
+    ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR with
+    tlink:VkAccessFlags2KHR set to `0` when specified in the first
+    synchronization scope, but equivalent to
+    ename:VK_PIPELINE_STAGE_2_NONE_KHR 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_KHR
+and ename:VK_PIPELINE_STAGE_2_NONE_KHR.
+====
+
+[NOTE]
+.Note
+====
+The tname:VkPipelineStageFlags2KHR 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='VkPipelineStageFlags2KHR',desc='64-bit mask of pipeline stage flags',type='flags']
+--
+tname:VkPipelineStageFlags2KHR is a bitmask type for setting a mask of zero
+or more elink:VkPipelineStageFlagBits2KHR flags:
+
+include::{generated}/api/flags/VkPipelineStageFlags2KHR.txt[]
+--
+endif::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.txt[]
+
+ifdef::VK_KHR_synchronization2[]
+These values all have the same meaning as the equivalently named values for
+tlink:VkPipelineStageFlags2KHR.
+endif::VK_KHR_synchronization2[]
+
+  * ename:VK_PIPELINE_STAGE_NONE_KHR specifies no stages of execution.
+  * 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[]
+  * ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV specifies the task shader
+    stage.
+  * ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV specifies the mesh shader
+    stage.
+endif::VK_NV_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-store-ops, subpass 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-load-store-ops, subpass 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 also includes <<renderpass-load-store-ops, subpass load and
+    store operations>> and multisample resolve operations for framebuffer
+    attachments with a color
+ifdef::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    or depth/stencil
+endif::VK_VERSION_1_2,VK_KHR_depth_stencil_resolve[]
+    format.
+  * 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_KHR_copy_commands2[]
+  ** flink:vkCmdBlitImage
+  ** flink:vkCmdResolveImage
+endif::VK_KHR_copy_commands2[]
+ifdef::VK_KHR_copy_commands2[]
+  ** flink:vkCmdBlitImage2KHR and flink:vkCmdBlitImage
+  ** flink:vkCmdResolveImage2KHR and flink:vkCmdResolveImage
+endif::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[]
+  ** ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+  ** ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
+endif::VK_NV_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.txt[]
+
+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 its first
+<<synchronization-dependencies-access-scopes, access scope>> only includes
+memory accesses performed by pipeline stages specified in that 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 its second
+<<synchronization-dependencies-access-scopes, access scope>> only includes
+memory access performed by pipeline stages specified in that mask.
+
+[NOTE]
+.Note
+====
+Including a particular pipeline stage in the first
+<<synchronization-dependencies-scopes, synchronization scope>> of a command
+implicitly includes <<synchronization-pipeline-stages-order, logically
+earlier>> pipeline stages in the synchronization scope.
+Similarly, the second <<synchronization-dependencies-scopes, synchronization
+scope>> includes <<synchronization-pipeline-stages-order, logically later>>
+pipeline stages.
+
+However, note that <<synchronization-dependencies-access-scopes, access
+scopes>> are not affected in this way - only the precise stages specified
+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="60%,40%",options="header"]
+|====
+|Pipeline stage flag                                          | Required queue capability flag
+|ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                      | None required
+|ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                    | ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT
+|ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                     | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                    | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT      | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT   | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                  | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                  | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT             | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT              | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT          | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                   | ename:VK_QUEUE_COMPUTE_BIT
+|ename:VK_PIPELINE_STAGE_TRANSFER_BIT                         | ename:VK_QUEUE_GRAPHICS_BIT, ename:VK_QUEUE_COMPUTE_BIT or ename:VK_QUEUE_TRANSFER_BIT
+|ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT                   | None required
+|ename:VK_PIPELINE_STAGE_HOST_BIT                             | None required
+|ename:VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                     | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                     | None required
+ifdef::VK_EXT_conditional_rendering[]
+|ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT        | ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_EXT_transform_feedback[]
+|ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT           | ename:VK_QUEUE_GRAPHICS_BIT
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_device_generated_commands[]
+|ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV            | ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT
+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 | ename:VK_QUEUE_GRAPHICS_BIT
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_NV_mesh_shader[]
+|ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV                   | ename:VK_QUEUE_GRAPHICS_BIT
+|ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV                   | ename:VK_QUEUE_GRAPHICS_BIT
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+|ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR | ename:VK_QUEUE_COMPUTE_BIT
+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           | ename:VK_QUEUE_COMPUTE_BIT
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_EXT_fragment_density_map[]
+|ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT     | ename:VK_QUEUE_GRAPHICS_BIT
+endif::VK_EXT_fragment_density_map[]
+ifdef::VK_HUAWEI_subpass_shading[]
+|ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI         | ename:VK_QUEUE_GRAPHICS_BIT
+endif::VK_HUAWEI_subpass_shading[]
+|====
+
+[[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 *A~S~* 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 *B~S~* 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[]
+primitive
+endif::VK_NV_mesh_shader[]
+pipeline executes the following stages, with the logical ordering of the
+stages matching the order specified here:
+
+  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+ifdef::VK_KHR_synchronization2[]
+  * ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR
+  * ename:VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR
+endif::VK_KHR_synchronization2[]
+ifndef::VK_KHR_synchronization2[]
+  * ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
+endif::VK_KHR_synchronization2[]
+  * 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
+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[]
+  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
+  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+  * ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
+  * ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+
+ifdef::VK_NV_mesh_shader[]
+The graphics mesh pipeline executes the following stages, with the logical
+ordering of the stages matching the order specified here:
+
+  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+  * ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
+  * ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV
+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[]
+  * ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
+  * ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+  * ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
+  * ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+endif::VK_NV_mesh_shader[]
+
+For the compute pipeline, the following stages occur in this order:
+
+  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+  * ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
+
+ifdef::VK_HUAWEI_subpass_shading[]
+For the subpass shading pipeline, the following stages occur in this order:
+
+  * ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI
+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:
+
+  * ename:VK_PIPELINE_STAGE_TRANSFER_BIT
+
+For host operations, only one pipeline stage occurs, so no order is
+guaranteed:
+
+  * ename:VK_PIPELINE_STAGE_HOST_BIT
+
+ifdef::VK_NV_device_generated_commands[]
+For the command preprocessing pipeline, the following stages occur in this
+order:
+
+  * ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
+endif::VK_NV_device_generated_commands[]
+
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+For acceleration structure operations, only one pipeline stage occurs, so no
+order is guaranteed:
+
+  * ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+For the ray tracing pipeline, the following stages occur in this order:
+
+  * ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+  * ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
+
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+
+[[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_KHR_synchronization2[]
+[open,refpage='VkAccessFlagBits2KHR',desc='Access flags for VkAccessFlags2KHR',type='enums']
+--
+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/VkAccessFlagBits2KHR.txt[]
+
+  * ename:VK_ACCESS_2_NONE_KHR specifies no accesses.
+  * ename:VK_ACCESS_2_MEMORY_READ_BIT_KHR 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_KHR 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_KHR 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_KHR pipeline stage.
+  * ename:VK_ACCESS_2_INDEX_READ_BIT_KHR specifies read access to an index
+    buffer as part of an indexed drawing command, bound by
+    flink:vkCmdBindIndexBuffer.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR
+    pipeline stage.
+  * ename:VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR 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_KHR pipeline stage.
+  * ename:VK_ACCESS_2_UNIFORM_READ_BIT_KHR specifies read access to a
+    <<descriptorsets-uniformbuffer, uniform buffer>> in any shader pipeline
+    stage.
+  * ename:VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR 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_SHADING_BIT_HUAWEI or
+endif::VK_HUAWEI_subpass_shading[]
+    ename:VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR pipeline stage.
+  * ename:VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR 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_KHR 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.
+  * ename:VK_ACCESS_2_SHADER_READ_BIT_KHR
+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[]
+    is equivalent to the logical OR of:
+  ** ename:VK_ACCESS_2_UNIFORM_READ_BIT_KHR
+  ** ename:VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR
+  ** ename:VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR
+  * ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR 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_KHR is equivalent to
+    ename:VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR.
+  * ename:VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR specifies read access to
+    a <<renderpass, color attachment>>, such as via <<framebuffer-blending,
+    blending>>, <<framebuffer-logicop, logic operations>>, or via certain
+    <<renderpass-load-store-ops, subpass load operations>>.
+ifdef::VK_EXT_blend_operation_advanced[]
+    It does not include <<framebuffer-blend-advanced, advanced blend
+    operations>>.
+endif::VK_EXT_blend_operation_advanced[]
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR pipeline
+    stage.
+  * ename:VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR 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
+    <<renderpass-load-store-ops, subpass load and store operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR pipeline
+    stage.
+  * ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR specifies read
+    access to a <<renderpass, depth/stencil attachment>>, via
+    <<fragops-ds-state, depth or stencil operations>> or via certain
+    <<renderpass-load-store-ops, subpass load operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR or
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR pipeline stages.
+  * ename:VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR specifies write
+    access to a <<renderpass, depth/stencil attachment>>, via
+    <<fragops-ds-state, depth or stencil operations>> or via certain
+    <<renderpass-load-store-ops, subpass load and store operations>>.
+    Such access occurs in the
+    ename:VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR or
+    ename:VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR pipeline stages.
+  * ename:VK_ACCESS_2_TRANSFER_READ_BIT_KHR 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_KHR,
+    ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR pipeline stages.
+  * ename:VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR 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_KHR,
+    ename:VK_PIPELINE_STAGE_2_BLIT_BIT_KHR,
+    ename:VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR, or
+    ename:VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR pipeline stages.
+  * ename:VK_ACCESS_2_HOST_READ_BIT_KHR 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_KHR
+    pipeline stage.
+  * ename:VK_ACCESS_2_HOST_WRITE_BIT_KHR 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_KHR
+    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_KHR 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 as part of 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 as part of 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 as part of 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 as part of 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[]
+
+[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_KHR or
+ename:VK_ACCESS_2_MEMORY_WRITE_BIT_KHR can be used.
+This is particularly useful when specifying stages that only have a single
+access type.
+====
+
+[NOTE]
+.Note
+====
+The tname:VkAccessFlags2KHR 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='VkAccessFlags2KHR',desc='64-bit mask of access flags',type='flags']
+--
+tname:VkAccessFlags2KHR is a bitmask type for setting a mask of zero or more
+elink:VkAccessFlagBits2KHR:
+
+include::{generated}/api/flags/VkAccessFlags2KHR.txt[]
+--
+endif::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.txt[]
+
+ifdef::VK_KHR_synchronization2[]
+These values all have the same meaning as the equivalently named values for
+tlink:VkAccessFlags2KHR.
+
+  * ename:VK_ACCESS_NONE_KHR specifies no accesses.
+endif::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
+    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_SHADING_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-uniformbuffer, uniform buffer>>,
+    <<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 <<framebuffer-blending,
+    blending>>, <<framebuffer-logicop, logic operations>>, or via certain
+    <<renderpass-load-store-ops, subpass load operations>>.
+ifdef::VK_EXT_blend_operation_advanced[]
+    It does not include <<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[]
+  * 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
+    <<renderpass-load-store-ops, subpass load and 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 via certain
+    <<renderpass-load-store-ops, subpass 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.
+  * 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 via certain
+    <<renderpass-load-store-ops, subpass load and 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.
+    Such access occurs in the ename:VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR
+    pipeline stage.
+  * ename:VK_ACCESS_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_ALL_TRANSFER_BIT_KHR
+    pipeline stage.
+  * 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:VkBuffer 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
+|ename:VK_ACCESS_INDIRECT_COMMAND_READ_BIT                    | ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+ifdef::VK_KHR_acceleration_structure[]
+, ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+endif::VK_KHR_acceleration_structure[]
+|ename:VK_ACCESS_INDEX_READ_BIT                               | ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
+|ename:VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT                    | ename:VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
+
+|ename:VK_ACCESS_UNIFORM_READ_BIT                             |
+ifdef::VK_NV_mesh_shader[]
+                                                               ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+                                                               ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+                                                               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, or ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
+
+|ename:VK_ACCESS_SHADER_READ_BIT                              |
+ifdef::VK_KHR_acceleration_structure[]
+                                                               ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+endif::VK_KHR_acceleration_structure[]
+ifdef::VK_NV_mesh_shader[]
+                                                               ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+                                                               ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+                                                               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, or ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
+
+|ename:VK_ACCESS_SHADER_WRITE_BIT                             |
+ifdef::VK_NV_mesh_shader[]
+                                                               ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
+endif::VK_NV_mesh_shader[]
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+                                                               ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+                                                               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, or ename:VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
+
+|ename:VK_ACCESS_INPUT_ATTACHMENT_READ_BIT                    |
+ifdef::VK_HUAWEI_subpass_shading[]
+                                                               ename:VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI, or
+endif::VK_HUAWEI_subpass_shading[]
+                                                               ename:VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+|ename:VK_ACCESS_COLOR_ATTACHMENT_READ_BIT                    | ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+|ename:VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT                   | ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+|ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT            | ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, or ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
+|ename:VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT           | ename:VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, or ename:VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
+|ename:VK_ACCESS_TRANSFER_READ_BIT                            | ename:VK_PIPELINE_STAGE_TRANSFER_BIT
+ifdef::VK_KHR_acceleration_structure[or ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR]
+|ename:VK_ACCESS_TRANSFER_WRITE_BIT                           | ename:VK_PIPELINE_STAGE_TRANSFER_BIT
+ifdef::VK_KHR_acceleration_structure[or ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR]
+|ename:VK_ACCESS_HOST_READ_BIT                                | ename:VK_PIPELINE_STAGE_HOST_BIT
+|ename:VK_ACCESS_HOST_WRITE_BIT                               | ename:VK_PIPELINE_STAGE_HOST_BIT
+|ename:VK_ACCESS_MEMORY_READ_BIT                              | Any
+|ename:VK_ACCESS_MEMORY_WRITE_BIT                             | Any
+ifdef::VK_EXT_blend_operation_advanced[]
+|ename:VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT    | ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+endif::VK_EXT_blend_operation_advanced[]
+ifdef::VK_NV_device_generated_commands[]
+|ename:VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV               | ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
+|ename:VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV              | ename:VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
+endif::VK_NV_device_generated_commands[]
+ifdef::VK_EXT_conditional_rendering[]
+|ename:VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT           | ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
+endif::VK_EXT_conditional_rendering[]
+ifdef::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+|ename:VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR | ename:VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
+endif::VK_KHR_fragment_shading_rate,VK_NV_shading_rate_image[]
+ifdef::VK_HUAWEI_invocation_mask[]
+|ename:VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI                           | ename:VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI
+endif::VK_HUAWEI_invocation_mask[]
+ifdef::VK_EXT_transform_feedback[]
+|ename:VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT             | ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
+|ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT     | ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
+|ename:VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT      | ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+endif::VK_EXT_transform_feedback[]
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+|ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR          |
+ifdef::VK_KHR_ray_query[]
+ifdef::VK_NV_mesh_shader[]
+                                                               ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,
+endif::VK_NV_mesh_shader[]
+                                                               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_COMPUTE_SHADER_BIT,
+endif::VK_KHR_ray_query[]
+ifdef::VK_KHR_ray_tracing_pipeline[]
+ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
+endif::VK_KHR_ray_tracing_pipeline[]
+ifdef::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+ or
+endif::VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+|ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR         | ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+ifdef::VK_EXT_fragment_density_map[]
+|ename:VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT            | ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
+endif::VK_EXT_fragment_density_map[]
+|====
+--
+
+[open,refpage='VkAccessFlags',desc='Bitmask of VkAccessFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkAccessFlags.txt[]
+
+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[]
+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[]
+ifdef::VK_QCOM_render_pass_shader_resolve[]
+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[]
+
+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[]
+
+[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_KHR_synchronization2[]
+    and flink:vkQueueSubmit2KHR
+endif::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_KHR_synchronization2[]
+    or in which slink:VkSubmitInfo2KHR structures are specified in the
+    pname:pSubmits parameter of flink:vkQueueSubmit2KHR,
+endif::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_KHR_synchronization2[]
+    or slink:VkSubmitInfo2KHR
+endif::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.
+
+<<queries-order, Query commands>>, <<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_KHR_synchronization2[]
+    and flink:vkQueueSubmit2KHR
+endif::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_KHR_synchronization2[]
+    or in which slink:VkSubmitInfo2KHR structures are specified in the
+    pname:pSubmits parameter of flink:vkQueueSubmit2KHR,
+endif::VK_KHR_synchronization2[]
+    from lowest index to highest.
+  . The fence signal operation defined by the pname:fence parameter of a
+    flink:vkQueueSubmit,
+ifdef::VK_KHR_synchronization2[]
+    flink:vkQueueSubmit2KHR,
+endif::VK_KHR_synchronization2[]
+    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_KHR_synchronization2[]
+slink:VkSubmitInfo2KHR,
+endif::VK_KHR_synchronization2[]
+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.txt[]
+--
+
+[open,refpage='vkCreateFence',desc='Create a new fence object',type='protos']
+--
+To create a fence, call:
+
+include::{generated}/api/protos/vkCreateFence.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateFence.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkFenceCreateFlagBits',desc='Bitmask specifying initial state and behavior of a fence',type='enums']
+--
+include::{generated}/api/enums/VkFenceCreateFlagBits.txt[]
+
+  * 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.txt[]
+
+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.txt[]
+
+ifdef::VK_KHR_external_fence[]
+or the equivalent
+
+include::{generated}/api/structs/VkExportFenceCreateInfoKHR.txt[]
+endif::VK_KHR_external_fence[]
+
+  * pname:sType is the type of 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
+****
+
+include::{generated}/validity/structs/VkExportFenceCreateInfo.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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 inluded 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 if it is 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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']
+--
+To export a POSIX file descriptor representing the payload of a fence, call:
+
+include::{generated}/api/protos/vkGetFenceFdKHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetFenceFdKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_external_fence_fd[]
+
+[open,refpage='vkDestroyFence',desc='Destroy a fence object',type='protos']
+--
+To destroy a fence, call:
+
+include::{generated}/api/protos/vkDestroyFence.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyFence.txt[]
+--
+
+[open,refpage='vkGetFenceStatus',desc='Return the status of a fence',type='protos']
+--
+To query the status of a fence from the host, call:
+
+include::{generated}/api/protos/vkGetFenceStatus.txt[]
+
+  * 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::{generated}/validity/protos/vkGetFenceStatus.txt[]
+--
+
+[[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.txt[]
+
+  * 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.txt[]
+--
+
+[[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 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 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']
+--
+To wait for one or more fences to enter the signaled state on the host,
+call:
+
+include::{generated}/api/protos/vkWaitForFences.txt[]
+
+  * 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::{generated}/validity/protos/vkWaitForFences.txt[]
+--
+
+[[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::VK_EXT_display_control/fence_events.txt[]
+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 that specified
+when creating the fence from which the payload was exported, rather than
+that 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.txt[]
+
+  * 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.txt[]
+--
+
+[open,refpage='VkImportFenceWin32HandleInfoKHR',desc='(None)',type='structs']
+--
+The sname:VkImportFenceWin32HandleInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImportFenceWin32HandleInfoKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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']
+--
+To import a fence payload from a POSIX file descriptor, call:
+
+include::{generated}/api/protos/vkImportFenceFdKHR.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+[open,refpage='VkImportFenceFdInfoKHR',desc='(None)',type='structs']
+--
+The sname:VkImportFenceFdInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkImportFenceFdInfoKHR.txt[]
+
+  * pname:sType is the type of 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>>
+****
+
+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.txt[]
+--
+endif::VK_KHR_external_fence_fd[]
+
+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.txt[]
+
+ifdef::VK_KHR_external_fence[]
+or the equivalent
+
+include::{generated}/api/enums/VkFenceImportFlagBitsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_external_fence[]
+or the equivalent
+
+include::{generated}/api/flags/VkFenceImportFlagsKHR.txt[]
+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.txt[]
+--
+
+[open,refpage='vkCreateSemaphore',desc='Create a new queue semaphore object',type='protos']
+--
+To create a semaphore, call:
+
+include::{generated}/api/protos/vkCreateSemaphore.txt[]
+
+  * 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::{generated}/validity/protos/vkCreateSemaphore.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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/VkSemaphoreCreateInfo.txt[]
+--
+
+[open,refpage='VkSemaphoreCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkSemaphoreCreateFlags.txt[]
+
+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.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkSemaphoreTypeCreateInfoKHR.txt[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is the type of 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.
+
+.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
+****
+
+include::{generated}/validity/structs/VkSemaphoreTypeCreateInfo.txt[]
+--
+
+[open,refpage='VkSemaphoreType',desc='Sepcifies 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.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/enums/VkSemaphoreTypeKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_external_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkExportSemaphoreCreateInfoKHR.txt[]
+endif::VK_KHR_external_semaphore[]
+
+  * pname:sType is the type of 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
+****
+
+include::{generated}/validity/structs/VkExportSemaphoreCreateInfo.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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 if it is 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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_KHR_external_semaphore_win32[]
+
+ifdef::VK_KHR_external_semaphore_fd[]
+[open,refpage='vkGetSemaphoreFdKHR',desc='Get a POSIX file descriptor handle for a semaphore',type='protos']
+--
+To export a POSIX file descriptor representing the payload of a semaphore,
+call:
+
+include::{generated}/api/protos/vkGetSemaphoreFdKHR.txt[]
+
+  * 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::{generated}/validity/protos/vkGetSemaphoreFdKHR.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_FUCHSIA_external_semaphore[]
+
+[open,refpage='vkDestroySemaphore',desc='Destroy a semaphore object',type='protos']
+--
+To destroy a semaphore, call:
+
+include::{generated}/api/protos/vkDestroySemaphore.txt[]
+
+  * 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.
+
+.Valid Usage
+****
+  * [[VUID-vkDestroySemaphore-semaphore-01137]]
+    All submitted batches that refer to pname:semaphore must: have completed
+    execution
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroySemaphore.txt[]
+--
+
+
+[[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_KHR_synchronization2[]
+In the case of flink:vkQueueSubmit2KHR, the first synchronization scope is
+limited to the pipeline stage specified by
+slink:VkSemaphoreSubmitInfoKHR::pname:stageMask.
+endif::VK_KHR_synchronization2[]
+Semaphore signal operations that are defined by flink:vkQueueSubmit
+ifdef::VK_KHR_synchronization2[]
+or flink:vkQueueSubmit2KHR
+endif::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 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_KHR_synchronization2[]
+In the case of flink:vkQueueSubmit2KHR, the second synchronization scope is
+limited to the pipeline stage specified by
+slink:VkSemaphoreSubmitInfoKHR::pname:stageMask.
+endif::VK_KHR_synchronization2[]
+Also, in the case of
+ifdef::VK_KHR_synchronization2[]
+either flink:vkQueueSubmit2KHR or
+endif::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
+<<pipeline-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']
+--
+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.txt[]
+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.txt[]
+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.
+====
+
+.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.txt[]
+--
+
+[open,refpage='vkWaitSemaphores',desc='Wait for timeline semaphores on the host',type='protos',alias='vkWaitSemaphoresKHR']
+--
+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.txt[]
+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.txt[]
+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::{generated}/validity/protos/vkWaitSemaphores.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkSemaphoreWaitInfoKHR.txt[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is the type of 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
+****
+
+include::{generated}/validity/structs/VkSemaphoreWaitInfo.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/enums/VkSemaphoreWaitFlagBitsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/flags/VkSemaphoreWaitFlagsKHR.txt[]
+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']
+--
+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.txt[]
+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.txt[]
+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::{generated}/validity/protos/vkSignalSemaphore.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_timeline_semaphore[]
+or the equivalent
+
+include::{generated}/api/structs/VkSemaphoreSignalInfoKHR.txt[]
+endif::VK_KHR_timeline_semaphore[]
+
+  * pname:sType is the type of 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>>
+****
+
+include::{generated}/validity/structs/VkSemaphoreSignalInfo.txt[]
+--
+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 that specified
+when creating the semaphore from which the payload was exported, rather than
+that 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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+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']
+--
+To import a semaphore payload from a POSIX file descriptor, call:
+
+include::{generated}/api/protos/vkImportSemaphoreFdKHR.txt[]
+
+  * 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.
+
+.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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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
+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.txt[]
+--
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+endif::VK_FUCHSIA_external_semaphore[]
+
+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.txt[]
+
+ifdef::VK_KHR_external_semaphore[]
+or the equivalent
+
+include::{generated}/api/enums/VkSemaphoreImportFlagBitsKHR.txt[]
+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.txt[]
+
+ifdef::VK_KHR_external_semaphore[]
+or the equivalent
+
+include::{generated}/api/flags/VkSemaphoreImportFlagsKHR.txt[]
+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.txt[]
+--
+
+[open,refpage='vkCreateEvent',desc='Create a new event object',type='protos']
+--
+To create an event, call:
+
+include::{generated}/api/protos/vkCreateEvent.txt[]
+
+  * 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.
+
+ifdef::VK_KHR_portability_subset[]
+.Valid Usage
+****
+  * [[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::{generated}/validity/protos/vkCreateEvent.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkEventCreateInfo.txt[]
+--
+
+[open,refpage='VkEventCreateFlagBits',desc='Event creation flag bits',type='enums']
+--
+include::{generated}/api/enums/VkEventCreateFlagBits.txt[]
+
+ifndef::VK_KHR_synchronization2[]
+All values for this enum are defined by extensions.
+endif::VK_KHR_synchronization2[]
+ifdef::VK_KHR_synchronization2[]
+  * ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR specifies that host event
+    commands will not be used with this event.
+endif::VK_KHR_synchronization2[]
+--
+
+[open,refpage='VkEventCreateFlags',desc='Bitmask of event creation flag bits',type='flags']
+--
+include::{generated}/api/flags/VkEventCreateFlags.txt[]
+
+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.txt[]
+
+  * 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
+  * [[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`
+****
+
+include::{generated}/validity/protos/vkDestroyEvent.txt[]
+--
+
+[open,refpage='vkGetEventStatus',desc='Retrieve the status of an event object',type='protos']
+--
+To query the state of an event from the host, call:
+
+include::{generated}/api/protos/vkGetEventStatus.txt[]
+
+  * 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.
+
+ifdef::VK_KHR_synchronization2[]
+.Valid Usage
+****
+ * [[VUID-vkGetEventStatus-event-03940]]
+    pname:event must: not have been created with
+    ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR
+****
+endif::VK_KHR_synchronization2[]
+
+include::{generated}/validity/protos/vkGetEventStatus.txt[]
+--
+
+[[synchronization-events-signaling-host]]
+[open,refpage='vkSetEvent',desc='Set an event to signaled state',type='protos']
+--
+To set the state of an event to signaled from the host, call:
+
+include::{generated}/api/protos/vkSetEvent.txt[]
+
+  * 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.
+
+ifdef::VK_KHR_synchronization2[]
+.Valid Usage
+****
+ * [[VUID-vkSetEvent-event-03941]]
+   pname:event must: not have been created with
+   ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR
+****
+endif::VK_KHR_synchronization2[]
+
+include::{generated}/validity/protos/vkSetEvent.txt[]
+--
+
+[[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.txt[]
+
+  * 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_KHR_synchronization2[]
+  * [[VUID-vkResetEvent-event-03822]]
+    There must: be an execution dependency between fname:vkResetEvent and
+    the execution of any flink:vkCmdWaitEvents2KHR that includes pname:event
+    in its pname:pEvents parameter
+endif::VK_KHR_synchronization2[]
+ifdef::VK_KHR_synchronization2[]
+  * [[VUID-vkResetEvent-event-03823]]
+    pname:event must: not have been created with
+    ename:VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR
+endif::VK_KHR_synchronization2[]
+****
+
+include::{generated}/validity/protos/vkResetEvent.txt[]
+--
+
+The state of an event can: also be updated on the device by commands
+inserted in command buffers.
+
+[[synchronization-events-signaling-device]]
+ifdef::VK_KHR_synchronization2[]
+[open,refpage='vkCmdSetEvent2KHR',desc='Set an event object to signaled state',type='protos']
+--
+To signal an event from a device, call:
+
+include::{generated}/api/protos/vkCmdSetEvent2KHR.txt[]
+
+  * 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:VkDependencyInfoKHR
+    structure defining the first scopes of this operation.
+
+When flink:vkCmdSetEvent2KHR 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:vkCmdWaitEvents2KHR 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:vkCmdSetEvent2KHR.
+
+[NOTE]
+.Note
+====
+The extra information provided by flink:vkCmdSetEvent2KHR 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:vkCmdSetEvent2KHR
+is executed on the device, then flink:vkCmdSetEvent2KHR has no effect, no
+event signal operation occurs, and no dependency is generated.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetEvent2KHR-synchronization2-03824]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdSetEvent2KHR-dependencyFlags-03825]]
+    The pname:dependencyFlags member of pname:pDependencyInfo must: be `0`
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-vkCmdSetEvent2KHR-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-vkCmdSetEvent2KHR-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-vkCmdSetEvent2KHR-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/vkCmdSetEvent2KHR.txt[]
+--
+
+[open,refpage='VkDependencyInfoKHR',desc='Structure specifying dependency information for a synchronization command',type='structs']
+--
+The sname:VkDependencyInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkDependencyInfoKHR.txt[]
+
+  * pname:sType is the type of 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:VkMemoryBarrier2KHR structures that define 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:VkBufferMemoryBarrier2KHR structures that define 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:VkImageMemoryBarrier2KHR structures that define 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/VkDependencyInfoKHR.txt[]
+--
+endif::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.txt[]
+
+  * 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_KHR_synchronization2[]
+fname:vkCmdSetEvent behaves identically to flink:vkCmdSetEvent2KHR, except
+that it does not define an access scope, and must: only be used with
+flink:vkCmdWaitEvents, not flink:vkCmdWaitEvents2KHR.
+endif::VK_KHR_synchronization2[]
+
+ifndef::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_KHR_synchronization2[]
+
+.Valid Usage
+****
+:stageMaskName: stageMask
+include::{chapters}/commonvalidity/stage_mask_common.txt[]
+  * [[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]]
+    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/vkCmdSetEvent.txt[]
+--
+
+[[synchronization-events-unsignaling-device]]
+ifdef::VK_KHR_synchronization2[]
+[open,refpage='vkCmdResetEvent2KHR',desc='Reset an event object to non-signaled state',type='protos']
+--
+:refpage: vkCmdResetEvent2KHR
+
+To unsignal the event from a device, call:
+
+include::{generated}/api/protos/vkCmdResetEvent2KHR.txt[]
+
+  * 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:VkPipelineStageFlags2KHR mask of pipeline
+    stages used to determine the first
+    <<synchronization-dependencies-scopes, synchronization scope>>.
+
+When flink:vkCmdResetEvent2KHR 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:vkCmdResetEvent2KHR 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.txt[]
+  * [[VUID-vkCmdResetEvent2KHR-synchronization2-03829]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdResetEvent2KHR-stageMask-03830]]
+    pname:stageMask must: not include ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR
+  * [[VUID-vkCmdResetEvent2KHR-event-03831]]
+    There must: be an execution dependency between fname:vkCmdResetEvent2KHR
+    and the execution of any flink:vkCmdWaitEvents that includes pname:event
+    in its pname:pEvents parameter
+  * [[VUID-vkCmdResetEvent2KHR-event-03832]]
+    There must: be an execution dependency between fname:vkCmdResetEvent2KHR
+    and the execution of any flink:vkCmdWaitEvents2KHR that includes
+    pname:event in its pname:pEvents parameter
+ifdef::VK_VERSION_1_1,VK_KHR_device_group[]
+  * [[VUID-vkCmdResetEvent2KHR-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/vkCmdResetEvent2KHR.txt[]
+--
+endif::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.txt[]
+
+  * 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_KHR_synchronization2[]
+fname:vkCmdResetEvent behaves identically to flink:vkCmdResetEvent2KHR.
+endif::VK_KHR_synchronization2[]
+
+ifndef::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_KHR_synchronization2[]
+
+.Valid Usage
+****
+:stageMaskName: stageMask
+include::{chapters}/commonvalidity/stage_mask_common.txt[]
+  * [[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_KHR_synchronization2[]
+  * [[VUID-vkCmdResetEvent-event-03835]]
+    There must: be an execution dependency between fname:vkCmdResetEvent and
+    the execution of any flink:vkCmdWaitEvents2KHR that includes pname:event
+    in its pname:pEvents parameter
+endif::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.txt[]
+--
+
+ifdef::VK_KHR_synchronization2[]
+[open,refpage='vkCmdWaitEvents2KHR',desc='Wait for one or more events',type='protos']
+--
+To wait for one or more events to enter the signaled state on a device,
+call:
+
+[[synchronization-events-waiting-device]]
+include::{generated}/api/protos/vkCmdWaitEvents2KHR.txt[]
+
+  * 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:VkDependencyInfoKHR structures, defining the second
+    <<synchronization-dependencies-scopes, synchronization scope>>.
+
+When fname:vkCmdWaitEvents2KHR is submitted to a queue, it inserts memory
+dependencies according to the elements of pname:pDependencyInfos and each
+corresponding element of pname:pEvents.
+fname:vkCmdWaitEvents2KHR must: not be used to wait on event signal
+operations occurring on other queues, or signal operations execyted 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:vkCmdSetEvent2KHR 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_KHR,
+    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_KHR).
+
+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:vkCmdWaitEvents2KHR.
+
+[NOTE]
+.Note
+====
+flink:vkCmdWaitEvents2KHR is used with flink:vkCmdSetEvent2KHR 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:vkCmdSetEvent2KHR and
+flink:vkCmdResetEvent2KHR, flink:vkCmdResetEvent, or flink:vkCmdSetEvent.
+Another execution dependency (e.g. a pipeline barrier or semaphore with
+ename:VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR) is needed to prevent such a
+race condition.
+====
+
+.Valid Usage
+****
+  * [[VUID-vkCmdWaitEvents2KHR-synchronization2-03836]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03837]]
+    Members of pname:pEvents must: not have been signaled by
+    flink:vkCmdSetEvent
+  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03838]]
+    For any element [eq]#i# of pname:pEvents, if that event is signaled by
+    flink:vkCmdSetEvent2KHR, that command's pname:dependencyInfo parameter
+    must: be exactly equal to the [eq]##i##th element of
+    pname:pDependencyInfos
+  * [[VUID-vkCmdWaitEvents2KHR-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-vkCmdWaitEvents2KHR-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:vkCmdWaitEvents2KHR is executed
+  * [[VUID-vkCmdWaitEvents2KHR-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:vkCmdSetEvent2KHR that occurred earlier in
+    <<synchronization-submission-order,submission order>>
+  * [[VUID-vkCmdWaitEvents2KHR-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_KHR
+  * [[VUID-vkCmdWaitEvents2KHR-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-vkCmdWaitEvents2KHR-dependencyFlags-03844]]
+    The pname:dependencyFlags member of any element of pname:pDependencyInfo
+    must: be `0`
+  * [[VUID-vkCmdWaitEvents2KHR-pEvents-03845]]
+    If pname:pEvents includes one or more events that will be signaled by
+    flink:vkSetEvent after pname:commandBuffer has been submitted to a
+    queue, then fname:vkCmdWaitEvents2KHR must: not be called inside a
+    render pass instance
+  * [[VUID-vkCmdWaitEvents2KHR-commandBuffer-03846]]
+    pname:commandBuffer's current device mask must: include exactly one
+    physical device
+****
+
+include::{generated}/validity/protos/vkCmdWaitEvents2KHR.txt[]
+--
+endif::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.txt[]
+
+  * 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_KHR_synchronization2[]
+fname:vkCmdWaitEvents is largely similar to flink:vkCmdWaitEvents2KHR, 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:vkCmdSetEvent2KHR and
+flink:vkCmdWaitEvents2KHR.
+====
+endif::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_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_KHR_synchronization2[flink:vkCmdResetEvent2KHR,]
+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_KHR_synchronization2[]
+
+.Valid Usage
+****
+:stageMaskName: srcStageMask
+include::{chapters}/commonvalidity/stage_mask_common.txt[]
+
+:stageMaskName: dstStageMask
+include::{chapters}/commonvalidity/stage_mask_common.txt[]
+include::{chapters}/commonvalidity/fine_sync_commands_common.txt[]
+  * [[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-pEvents-01163]]
+    If pname:pEvents includes one or more events that will be signaled by
+    fname:vkSetEvent after pname:commandBuffer has been submitted to a
+    queue, then fname:vkCmdWaitEvents must: not be called inside a render
+    pass instance
+  * [[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_KHR_synchronization2[]
+  * [[VUID-vkCmdWaitEvents-pEvents-03847]]
+    Elements of pname:pEvents must: not have been signaled by
+    flink:vkCmdSetEvent2KHR
+endif::VK_KHR_synchronization2[]
+****
+
+include::{generated}/validity/protos/vkCmdWaitEvents.txt[]
+--
+
+
+[[synchronization-pipeline-barriers]]
+== Pipeline Barriers
+
+ifdef::VK_KHR_synchronization2[]
+[open,refpage='vkCmdPipelineBarrier2KHR',desc='Insert a memory dependency',type='protos']
+--
+:refpage: vkCmdPipelineBarrier2KHR
+
+To record a pipeline barrier, call:
+
+include::{generated}/api/protos/vkCmdPipelineBarrier2KHR.txt[]
+
+  * pname:commandBuffer is the command buffer into which the command is
+    recorded.
+  * pname:pDependencyInfo is a pointer to a slink:VkDependencyInfoKHR
+    structure defining the scopes of this operation.
+
+When flink:vkCmdPipelineBarrier2KHR is submitted to a queue, it defines
+memory dependencies between commands that were submitted before it, and
+those submitted after it.
+
+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>>.
+
+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>>.
+
+If fname:vkCmdPipelineBarrier2KHR is recorded within a render pass instance,
+the synchronization scopes are
+<<synchronization-pipeline-barriers-subpass-self-dependencies, limited to
+operations within the same subpass>>.
+
+.Valid Usage
+****
+include::{chapters}/commonvalidity/pipeline_barrier_common.txt[]
+  * [[VUID-vkCmdPipelineBarrier2KHR-synchronization2-03848]]
+    The <<features-synchronization2, pname:synchronization2>> feature must:
+    be enabled
+  * [[VUID-vkCmdPipelineBarrier2KHR-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-vkCmdPipelineBarrier2KHR-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/vkCmdPipelineBarrier2KHR.txt[]
+--
+endif::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.txt[]
+
+  * 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_KHR_synchronization2[]
+fname:vkCmdPipelineBarrier operates almost identically to
+flink:vkCmdPipelineBarrier2KHR, except that the scopes and barriers are
+defined as direct parameters rather than being defined by an
+slink:VkDependencyInfoKHR.
+endif::VK_KHR_synchronization2[]
+
+When flink:vkCmdPipelineBarrier is submitted to a queue, it defines a memory
+dependency between commands that were submitted before it, and those
+submitted 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
+include::{chapters}/commonvalidity/stage_mask_common.txt[]
+
+:stageMaskName: dstStageMask
+include::{chapters}/commonvalidity/stage_mask_common.txt[]
+include::{chapters}/commonvalidity/fine_sync_commands_common.txt[]
+include::{chapters}/commonvalidity/pipeline_barrier_common.txt[]
+****
+
+include::{generated}/validity/protos/vkCmdPipelineBarrier.txt[]
+--
+
+[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.txt[]
+
+  * 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 a
+    <<synchronization-pipeline-barriers-subpass-self-dependencies, subpass
+    has more than one view>>.
+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[]
+--
+
+[open,refpage='VkDependencyFlags',desc='Bitmask of VkDependencyFlagBits',type='flags']
+--
+include::{generated}/api/flags/VkDependencyFlags.txt[]
+
+tname:VkDependencyFlags is a bitmask type for setting a mask of zero or more
+elink:VkDependencyFlagBits.
+--
+
+
+[[synchronization-pipeline-barriers-subpass-self-dependencies]]
+=== Subpass Self-dependency
+
+ifdef::VK_KHR_dynamic_rendering[]
+flink:vkCmdPipelineBarrier
+ifdef::VK_KHR_synchronization2[]
+or flink:vkCmdPipelineBarrier2KHR
+endif::VK_KHR_synchronization2[]
+must: not be called within a render pass instance started with
+flink:vkCmdBeginRenderingKHR.
+endif::VK_KHR_dynamic_rendering[]
+
+If flink:vkCmdPipelineBarrier
+ifdef::VK_KHR_synchronization2[]
+or flink:vkCmdPipelineBarrier2KHR
+endif::VK_KHR_synchronization2[]
+is called inside a render pass instance, the following restrictions apply.
+For a given subpass to allow a pipeline barrier, the render pass must:
+declare a _self-dependency_ from that subpass to itself.
+That is, there must: exist a subpass dependency with pname:srcSubpass and
+pname:dstSubpass both equal to that subpass index.
+More than one self-dependency can: be declared for each subpass.
+
+Self-dependencies must: only include pipeline stage bits that are graphics
+stages.
+If any of the stages in pname:srcStageMask are
+<<synchronization-framebuffer-regions,framebuffer-space stages>>,
+pname:dstStageMask must: only contain
+<<synchronization-framebuffer-regions,framebuffer-space stages>>.
+This means that pseudo-stages like ename:VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
+which include the execution of both framebuffer-space stages and
+non-framebuffer-space stages must: not be used.
+
+If the source and destination stage masks both include framebuffer-space
+stages, then pname:dependencyFlags must: include
+ename:VK_DEPENDENCY_BY_REGION_BIT.
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+If the subpass has more than one view, then pname:dependencyFlags must:
+include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT.
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+
+Each of the <<synchronization-dependencies-scopes, synchronization scopes>>
+and <<synchronization-dependencies-access-scopes, access scopes>> of a
+ifdef::VK_KHR_synchronization2[]
+flink:vkCmdPipelineBarrier2KHR or
+endif::VK_KHR_synchronization2[]
+flink:vkCmdPipelineBarrier command inside a render pass instance must: be a
+subset of the scopes of one of the self-dependencies for the current
+subpass.
+
+If the self-dependency has ename:VK_DEPENDENCY_BY_REGION_BIT
+ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
+or ename:VK_DEPENDENCY_VIEW_LOCAL_BIT
+endif::VK_VERSION_1_1,VK_KHR_multiview[]
+set, then so must: the pipeline barrier.
+Pipeline barriers within a render pass instance must: not include buffer
+memory barriers.
+Image memory barriers must: only specify image subresources that are used as
+attachments within the subpass, and must: not define an
+<<synchronization-image-layout-transitions, image layout transition>> or
+<<synchronization-queue-transfers, queue family ownership transfer>>.
+
+
+[[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_KHR_synchronization2[]
+[open,refpage='VkMemoryBarrier2KHR',desc='Structure specifying a global memory barrier',type='structs']
+--
+:refpage: VkMemoryBarrier2KHR
+
+The sname:VkMemoryBarrier2KHR structure is defined as:
+
+include::{generated}/api/structs/VkMemoryBarrier2KHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    first synchronization scope>>.
+  * pname:srcAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
+    be included in the <<synchronization-dependencies-access-scopes, first
+    access scope>>.
+  * pname:dstStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    second synchronization scope>>.
+  * pname:dstAccessMask is a tlink:VkAccessFlags2KHR 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.txt[]
+include::{chapters}/commonvalidity/access_mask_2_common.txt[]
+
+:stageMaskName: dstStageMask
+:accessMaskName: dstAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
+include::{chapters}/commonvalidity/access_mask_2_common.txt[]
+****
+
+include::{generated}/validity/structs/VkMemoryBarrier2KHR.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+
+[[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_KHR_synchronization2[]
+[open,refpage='VkBufferMemoryBarrier2KHR',desc='Structure specifying a buffer memory barrier',type='structs']
+--
+:refpage: VkBufferMemoryBarrier2KHR
+
+The sname:VkBufferMemoryBarrier2KHR structure is defined as:
+
+include::{generated}/api/structs/VkBufferMemoryBarrier2KHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    first synchronization scope>>.
+  * pname:srcAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
+    be included in the <<synchronization-dependencies-access-scopes, first
+    access scope>>.
+  * pname:dstStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    second synchronization scope>>.
+  * pname:dstAccessMask is a tlink:VkAccessFlags2KHR 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.txt[]
+include::{chapters}/commonvalidity/access_mask_2_common.txt[]
+
+:stageMaskName: dstStageMask
+:accessMaskName: dstAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
+include::{chapters}/commonvalidity/access_mask_2_common.txt[]
+include::{chapters}/commonvalidity/buffer_memory_barrier_common.txt[]
+  * [[VUID-VkBufferMemoryBarrier2KHR-srcStageMask-03851]]
+    If either pname:srcStageMask or pname:dstStageMask includes
+    ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: be equal
+****
+
+include::{generated}/validity/structs/VkBufferMemoryBarrier2KHR.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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, 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 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, 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 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.txt[]
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkBufferMemoryBarrier-synchronization2-03852]]
+    If the <<features-synchronization2,pname:synchronization2 feature>> is
+    not enabled, and pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkBufferMemoryBarrier-synchronization2-03853]]
+    If the <<features-synchronization2,pname:synchronization2 feature>> is
+    not enabled, and 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[]
+****
+
+include::{generated}/validity/structs/VkBufferMemoryBarrier.txt[]
+--
+
+[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.txt[]
+--
+
+
+[[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_KHR_synchronization2[]
+[open,refpage='VkImageMemoryBarrier2KHR',desc='Structure specifying an image memory barrier',type='structs']
+--
+:refpage: VkImageMemoryBarrier2KHR
+
+The sname:VkImageMemoryBarrier2KHR structure is defined as:
+
+include::{generated}/api/structs/VkImageMemoryBarrier2KHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:srcStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    first synchronization scope>>.
+  * pname:srcAccessMask is a tlink:VkAccessFlags2KHR mask of access flags to
+    be included in the <<synchronization-dependencies-access-scopes, first
+    access scope>>.
+  * pname:dstStageMask is a tlink:VkPipelineStageFlags2KHR mask of pipeline
+    stages to be included in the <<synchronization-dependencies-scopes,
+    second synchronization scope>>.
+  * pname:dstAccessMask is a tlink:VkAccessFlags2KHR 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.txt[]
+include::{chapters}/commonvalidity/access_mask_2_common.txt[]
+
+:stageMaskName: dstStageMask
+:accessMaskName: dstAccessMask
+include::{chapters}/commonvalidity/stage_mask_2_common.txt[]
+include::{chapters}/commonvalidity/access_mask_2_common.txt[]
+include::{chapters}/commonvalidity/image_memory_barrier_common.txt[]
+  * [[VUID-VkImageMemoryBarrier2KHR-srcStageMask-03854]]
+    If either pname:srcStageMask or pname:dstStageMask includes
+    ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: be equal
+  * [[VUID-VkImageMemoryBarrier2KHR-srcStageMask-03855]]
+    If pname:srcStageMask includes ename:VK_PIPELINE_STAGE_2_HOST_BIT_KHR,
+    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/VkImageMemoryBarrier2KHR.txt[]
+--
+endif::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.txt[]
+
+  * pname:sType is the type of 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_KHR_synchronization2[]
+If the <<features-synchronization2,pname:synchronization2 feature>> is not
+enabled or pname:oldLayout is not equal to pname:newLayout,
+endif::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_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_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.txt[]
+ifndef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkImageMemoryBarrier-synchronization2-03856]]
+    If the <<features-synchronization2,pname:synchronization2 feature>> is
+    not enabled, and pname:image was created with a sharing mode of
+    ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED
+endif::VK_VERSION_1_1,VK_KHR_external_memory[]
+ifdef::VK_VERSION_1_1,VK_KHR_external_memory[]
+  * [[VUID-VkImageMemoryBarrier-synchronization2-03857]]
+    If the <<features-synchronization2,pname:synchronization2 feature>> is
+    not enabled, and 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[]
+****
+
+include::{generated}/validity/structs/VkImageMemoryBarrier.txt[]
+--
+
+
+[[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.txt[]
+--
+
+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.txt[]
+
+ifdef::VK_KHR_external_memory[]
+or the equivalent
+
+include::{generated}/api/enums/VK_QUEUE_FAMILY_EXTERNAL_KHR.txt[]
+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.txt[]
+--
+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.
+====
+
+
+[[synchronization-wait-idle]]
+== Wait Idle Operations
+
+[open,refpage='vkQueueWaitIdle',desc='Wait for a queue to become idle',type='protos']
+--
+To wait on the host for the completion of outstanding queue operations for a
+given queue, call:
+
+include::{generated}/api/protos/vkQueueWaitIdle.txt[]
+
+  * 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::{generated}/validity/protos/vkQueueWaitIdle.txt[]
+--
+
+[open,refpage='vkDeviceWaitIdle',desc='Wait for a device to become idle',type='protos']
+--
+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.txt[]
+
+  * pname:device is the logical device to idle.
+
+fname:vkDeviceWaitIdle is equivalent to calling fname:vkQueueWaitIdle for
+all queues owned by pname:device.
+
+include::{generated}/validity/protos/vkDeviceWaitIdle.txt[]
+--
+
+
+[[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>> is
+defined by the host execution model, but includes execution of
+flink:vkQueueSubmit on the host and anything that happened-before it.
+
+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 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']
+--
+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.txt[]
+
+  * 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 devation 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.
+
+include::{generated}/validity/protos/vkGetCalibratedTimestampsEXT.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkTimeDomainEXT',desc='Supported time domains',type='enums']
+--
+The set of supported time domains consists of:
+
+include::{generated}/api/enums/VkTimeDomainEXT.txt[]
+
+  * 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_KHR_synchronization2[]
+    or flink:vkCmdWriteTimestamp2KHR
+endif::VK_KHR_synchronization2[]
+    and are defined to be incrementing according to the
+    <<limits-timestampPeriod,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_KHR_synchronization2[]
+or flink:vkCmdWriteTimestamp2KHR
+endif::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/registry/vulkan/chapters/tessellation.txt b/registry/vulkan/chapters/tessellation.txt
new file mode 100644
index 0000000..f03336d
--- /dev/null
+++ b/registry/vulkan/chapters/tessellation.txt
@@ -0,0 +1,629 @@
+// Copyright 2015-2021 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 in the tessellation evaluation or
+tessellation control shader using one of execution modes code:Triangles,
+code:Quads, and code:IsoLines.
+Other tessellation-related execution modes can: also be specified in either
+the tessellation control or tessellation evaluation shaders, and if they are
+specified in both then the modes 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.
+    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.
+    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_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.
+    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.
+    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 (0,x) through (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) five and (b) four 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 (0,1) and (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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineTessellationStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineTessellationStateCreateFlags.txt[]
+
+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.txt[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/structs/VkPipelineTessellationDomainOriginStateCreateInfoKHR.txt[]
+endif::VK_KHR_maintenance2[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[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.txt[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/enums/VkTessellationDomainOriginKHR.txt[]
+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[]
diff --git a/registry/vulkan/chapters/textures.txt b/registry/vulkan/chapters/textures.txt
new file mode 100644
index 0000000..2bc160b
--- /dev/null
+++ b/registry/vulkan/chapters/textures.txt
@@ -0,0 +1,2991 @@
+// Copyright 2015-2021 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[]
+  * Instructions with code:Dref in the name apply
+    <<textures-depth-compare-operation,depth comparison>> on the texel
+    values.
+  * Instructions with code:Sparse in the name 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.
+
+[[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, 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.
+
+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
+====
+[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[]
+
+
+[[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 that specified in 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_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_KHR_format_feature_flags2[]
+ifdef::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_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 numeric format of the image, as shown in the _SPIR-V Sampled Type_
+     column of the <<formats-numericformat>> table.
+  ** 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 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 that enables
+<<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>.
+
+The code:ConstOffset and code:Offset operands must: not be used with a
+sampler that enables <<samplers-YCbCr-conversion,sampler {YCbCr}
+conversion>>.
+endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
+
+ifdef::VK_KHR_format_feature_flags2[]
+If the <<resources-image-view-format-features,image view's format features>>
+do not support
+ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR then
+code:OpImage*Dref* instructions must: not be used to sample from it.
+endif::VK_KHR_format_feature_flags2[]
+
+
+[[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,
++
+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, 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.
+
+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~#
+| Stencil aspect              | [eq]#S                                     = B~r~#
+| 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~]#
+|====
+
+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_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_EXT_image_robustness[]
+<<features-robustImageAccess,pname:robustImageAccess>> 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.
+endif::VK_EXT_image_robustness[]
+ifdef::VK_EXT_image_robustness+VK_EXT_robustness2[If]
+ifdef::VK_EXT_robustness2[]
+<<features-robustImageAccess2,pname:robustImageAccess2>> 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_EXT_image_robustness,VK_EXT_robustness2[]
+
+ifdef::VK_EXT_image_robustness[]
+Additionally, if <<features-robustImageAccess,pname:robustImageAccess>> is
+enabled,
+ifdef::VK_EXT_robustness2[]
+but <<features-robustImageAccess2,pname:robustImageAccess2>> 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_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 a code:Dref
+instruction, a depth comparison is performed.
+The value of the result [eq]#D# is [eq]#1.0# if the result of the compare
+operation is [eq]#true#, and [eq]#0.0# otherwise.
+The compare operation is selected by the pname:compareOp member of the
+sampler.
+
+[latexmath]
++++++++++++++++++++
+\begin{aligned}
+D & = 1.0 &
+  \begin{cases}
+    D_{\textit{ref}} \leq D_{\textit{tex}} & \text{for LEQUAL}   \\
+    D_{\textit{ref}} \geq D_{\textit{tex}} & \text{for GEQUAL}   \\
+    D_{\textit{ref}} < D_{\textit{tex}}    & \text{for LESS}     \\
+    D_{\textit{ref}} > D_{\textit{tex}}    & \text{for GREATER}  \\
+    D_{\textit{ref}} = D_{\textit{tex}}    & \text{for EQUAL}    \\
+    D_{\textit{ref}} \neq D_{\textit{tex}} & \text{for NOTEQUAL} \\
+    \textit{true}                          & \text{for ALWAYS}   \\
+    \textit{false}                         & \text{for NEVER}
+  \end{cases} \\
+D & = 0.0 & \text{otherwise}
+\end{aligned}
++++++++++++++++++++
+
+where [eq]#D~tex~# is the texel depth value and [eq]#D~ref~# is the
+reference value from the SPIR-V operand.
+If the image being sampled has a fixed-point format then the reference value
+is clamped to [0, 1] before the comparison 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~]#
+|====
+
+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:.
+
+[[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.
+
+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
+type defined for the format, as specified in the _SPIR-V Sampled Type_
+column of the <<formats-numericformat>> table, 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.
+Any unused components are ignored.
+
+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,
+Level-of-Detail 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, Level-of-Detail 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]]
+==== Level-of-Detail 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}
+d' = level_{base} + \text{clamp}(\lambda, 0, q)
+\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:
+
+  {empty}:: [eq]#level~base~ = pname:baseMipLevel#
+  {empty}:: [eq]#q = pname:levelCount - 1#
+
+pname:baseMipLevel and pname:levelCount are taken from the
+pname:subresourceRange of the image view.
+
+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, 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)# then any values fetched are
+ifdef::VK_EXT_robustness2[]
+zero if <<features-robustImageAccess2,pname:robustImageAccess2>> 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
+
+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[]
+
+
+[[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 Catmull-Rom
+weights.
+
+Catmull-Rom 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}
+++++++++++++++++++++++++
+
+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:
+
+[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[]
+
+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}
+++++++++++++++++++++++++
+
+[[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.
+
+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 ),
+         \left ( v \left (x-\frac{1}{2}+\frac{i}{N+1}, y \right ),
+\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}
+++++++++++++++++++++++++
+
+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 miplevel 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 miplevel 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[]
+
+
+[[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, Level-of-Detail 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.
+
+
+[[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 (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/registry/vulkan/chapters/vertexpostproc.txt b/registry/vulkan/chapters/vertexpostproc.txt
new file mode 100644
index 0000000..5511353
--- /dev/null
+++ b/registry/vulkan/chapters/vertexpostproc.txt
@@ -0,0 +1,1446 @@
+// Copyright 2015-2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[vertexpostproc]]
+= Fixed-Function Vertex Post-Processing
+
+After <<pipeline-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
+<<pipeline-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
+<<pipeline-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,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,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,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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+  * 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 <<pipeline-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.txt[]
+--
+
+[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.txt[]
+
+  * 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.txt[]
+--
+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.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkPipelineViewportSwizzleStateCreateFlagsNV',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineViewportSwizzleStateCreateFlagsNV.txt[]
+
+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.
+
+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.txt[]
+
+  * 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.txt[]
+--
+
+[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.txt[]
+
+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 <<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>>.
+
+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.txt[]
+
+  * pname:sType is the type of 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,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,provokingVertexLast>> feature must: be
+    enabled
+****
+
+include::{generated}/validity/structs/VkPipelineRasterizationProvokingVertexStateCreateInfoEXT.txt[]
+--
+
+[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.txt[]
+
+  * 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>>.
+--
+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 \\
+0 \leq z_c \leq w_c
+\end{array}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+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[]
+When depth clipping is disabled, the plane equation
+
+  {empty}:: [eq]#0 {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.txt[]
+
+ifdef::VK_KHR_maintenance2[]
+or the equivalent
+
+include::{generated}/api/enums/VkPointClippingBehaviorKHR.txt[]
+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.
+
+
+[[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::VK_NV_clip_space_w_scaling/vertexpostproc.txt[]
+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.txt[]
+
+  * pname:sType is the type of 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,multiple viewports>> feature is not
+    enabled, pname:viewportCount must: not be greater than `1`
+  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217]]
+    If the <<features-multiViewport,multiple viewports>> 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
+ifndef::VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01220]]
+    pname:scissorCount and pname:viewportCount must: be identical
+endif::VK_EXT_extended_dynamic_state[]
+  * [[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
+ifndef::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_EXT_extended_dynamic_state[]
+ifdef::VK_EXT_extended_dynamic_state[]
+  * [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-04134]]
+    If the graphics pipeline is being created without
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT and
+    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT set then
+    pname:scissorCount and pname:viewportCount must: be identical
+  * [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-04135]]
+    If the graphics pipeline is being created with
+    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT 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_EXT set then
+    pname:scissorCount must: be `0`, otherwise it must: be greater than `0`
+endif::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.txt[]
+--
+
+ifdef::VK_EXT_extended_dynamic_state[]
+[open,refpage='vkCmdSetViewportWithCountEXT',desc='Set the viewport count and viewports dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the viewport count and
+viewports, call:
+
+include::{generated}/api/protos/vkCmdSetViewportWithCountEXT.txt[]
+
+  * 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 when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the corresponding
+slink:VkPipelineViewportStateCreateInfo::pname:viewportCount and
+pname:pViewports values used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetViewportWithCountEXT-None-03393]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+  * [[VUID-vkCmdSetViewportWithCountEXT-viewportCount-03394]]
+    pname:viewportCount must: be between `1` and
+    sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+  * [[VUID-vkCmdSetViewportWithCountEXT-viewportCount-03395]]
+    If the <<features-multiViewport,multiple viewports>> feature is not
+    enabled, pname:viewportCount must: be `1`
+ifdef::VK_NV_inherited_viewport_scissor[]
+  * [[VUID-vkCmdSetViewportWithCountEXT-commandBuffer-04819]]
+    pname:commandBuffer must: not have
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled
+endif::VK_NV_inherited_viewport_scissor[]
+****
+
+include::{generated}/validity/protos/vkCmdSetViewportWithCountEXT.txt[]
+--
+
+[open,refpage='vkCmdSetScissorWithCountEXT',desc='Set the scissor count and scissor rectangular bounds dynamically for a command buffer',type='protos']
+--
+To <<pipelines-dynamic-state, dynamically set>> the scissor count and
+scissor rectangular bounds, call:
+
+include::{generated}/api/protos/vkCmdSetScissorWithCountEXT.txt[]
+
+  * 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
+subsequence drawing commands when the graphics pipeline is created with
+ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT set in
+slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates.
+Otherwise, this state is specified by the corresponding
+slink:VkPipelineViewportStateCreateInfo::pname:scissorCount and
+pname:pScissors values used to create the currently active pipeline.
+
+.Valid Usage
+****
+  * [[VUID-vkCmdSetScissorWithCountEXT-None-03396]]
+    The <<features-extendedDynamicState, extendedDynamicState>> feature
+    must: be enabled
+  * [[VUID-vkCmdSetScissorWithCountEXT-scissorCount-03397]]
+    pname:scissorCount must: be between `1` and
+    sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
+  * [[VUID-vkCmdSetScissorWithCountEXT-scissorCount-03398]]
+    If the <<features-multiViewport,multiple viewports>> feature is not
+    enabled, pname:scissorCount must: be `1`
+  * [[VUID-vkCmdSetScissorWithCountEXT-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-vkCmdSetScissorWithCountEXT-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-vkCmdSetScissorWithCountEXT-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-vkCmdSetScissorWithCountEXT-commandBuffer-04820]]
+    pname:commandBuffer must: not have
+    slink:VkCommandBufferInheritanceViewportScissorInfoNV::pname:viewportScissor2D
+    enabled
+endif::VK_NV_inherited_viewport_scissor[]
+****
+
+include::{generated}/validity/protos/vkCmdSetScissorWithCountEXT.txt[]
+--
+endif::VK_EXT_extended_dynamic_state[]
+
+[open,refpage='VkPipelineViewportStateCreateFlags',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkPipelineViewportStateCreateFlags.txt[]
+
+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 _<<pipeline-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
+<<pipeline-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 <<pipeline-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 <<pipeline-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 _<<pipeline-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
+<<pipeline-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
+<<pipeline-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 <<pipeline-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.txt[]
+
+  * 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 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,multiple viewports>> feature is not
+    enabled, pname:firstViewport must: be `0`
+  * [[VUID-vkCmdSetViewport-viewportCount-01225]]
+    If the <<features-multiViewport,multiple viewports>> 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.txt[]
+--
+
+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.txt[]
+
+  * 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#
+  {empty}:: [eq]#p~x~ = pname:width#
+  {empty}:: [eq]#p~y~ = pname:height#
+  {empty}:: [eq]#p~z~ = pname:maxDepth - pname:minDepth#.
+
+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
+<<pipeline-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::VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height[]
+  * [[VUID-VkViewport-height-01772]]
+    pname:height must: be greater than `0.0`
+endif::VK_VERSION_1_1,VK_KHR_maintenance1,VK_AMD_negative_viewport_height[]
+  * [[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]]
+    Unless `apiext:VK_EXT_depth_range_unrestricted` extension is 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]]
+    Unless `apiext:VK_EXT_depth_range_unrestricted` extension is 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.txt[]
+--
diff --git a/registry/vulkan/chapters/video_decode_extensions.txt b/registry/vulkan/chapters/video_decode_extensions.txt
new file mode 100644
index 0000000..8ba6d63
--- /dev/null
+++ b/registry/vulkan/chapters/video_decode_extensions.txt
@@ -0,0 +1,341 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[video-decode-operations]]
+== Video Decode Operations
+
+Before the application can start recording Vulkan command buffers for the
+Video Decode Operations, it must: do the following, beforehand:
+
+  . Ensure that the implementation can decode 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 <<decoded-output-picture,output>> and
+    <<reference-picture,reference>> pictures must: be queried and chosen
+    separately.
+    Refer to the section on
+    <<supported-video-input-output-dpb-formats-enumeration,enumeration of
+    supported video formats>>.
+  . 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:VkVideoProfilesKHR to the pname:pNext
+    chain of slink:VkFormatProperties2.
+    When querying the parameters with
+    flink:vkGetPhysicalDeviceImageFormatProperties2 for images targeting
+    decoded <<decoded-output-picture,output>> and
+    <<reference-picture,reference (DPB)>> pictures, the
+    slink:VkPhysicalDeviceImageFormatInfo2::pname:usage field should contain
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR and
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, respectively.
+  . Create none, some, or all of the required <<VkImage,images>> for the
+    <<decoded-output-picture,decoded output>> and
+    <<reference-picture,reference>> pictures.
+    More Video Picture Resources can: be created at some later point if
+    needed while processing the decoded content.
+    Also, if the decoded picture size is expected to change, the images can:
+    be created based on the maximum decoded content size required.
+  . Create the <<video-session,video session>> to be used for video decode
+    operations.
+    Before creating the Decode Video Session, the decode 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 decode 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-introduction,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-introduction,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 Decode Commands against a Vulkan command buffer
+consists of the following sequence:
+
+  . flink:vkCmdBeginVideoCodingKHR starts the recording of one or more Video
+    Decode operations in the command buffer.
+    For each Video Decode Command operation, a Video Session must: be bound
+    to the command buffer within this command.
+    This command establishes a Vulkan Video Decode Context that consists of
+    the bound Video Session Object, Session Parameters Object, and the
+    required Video Picture Resources.
+    The established Video Decode Context is in effect until the
+    flink:vkCmdEndVideoCodingKHR command is recorded.
+    If more Video Decode operations are to be required after the
+    flink:vkCmdEndVideoCodingKHR command, another Video Decode Context can:
+    be started with the flink:vkCmdBeginVideoCodingKHR command.
+  . flink:vkCmdDecodeVideoKHR specifies one or more compressed data buffers
+    to be decoded.
+    The slink:VkVideoDecodeInfoKHR parameters, and the codec extension
+    structures chained to this, specify the details of the decode operation.
+  . flink:vkCmdControlVideoCodingKHR records operations against the decoded
+    data, decoding device, or the Video Session state.
+  . flink:vkCmdEndVideoCodingKHR signals the end of the recording of the
+    Vulkan Video Decode 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_DECODE_DPB_KHR and
+    ename:VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR layouts).
+  * Pipeline Barriers
+  * Events
+  * Timestamps
+  * Device Groups (device mask)
+
+The following Video Decode related commands must: be recorded *outside* the
+Vulkan Video Decode Context established with the
+flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR commands:
+
+  * Sparse Memory Binding
+  * Copy Commands
+  * Clear Commands
+
+
+[[video-picture-decode-modes]]
+=== Video Picture Decode Modes
+
+There are a few ways that the flink:vkCmdDecodeVideoKHR can be configured
+for the Video Picture Decode Operations, based on:
+
+  * if the <<decoded-output-picture, output resource>> would need to be used
+    as <<reference-picture,Reference Picture>> for subsequent decode
+    operations and;
+  * if <<dpb-slot,DPB Slots>> are required for use as
+    <<reference-picture,Reference Pictures>> indexes.
+
+[[video-picture-decode-no-reference-picture-no-slot-update]]
+The most basic Video Picture Decode operation with the
+flink:vkCmdDecodeVideoKHR command is to output the decoded pixel data
+without using any DPB <<reference-picture,Reference Pictures>> and without
+updating any <<dpb-slot,DPB Slot's>> indexes.
+
+In this case, the following slink:VkVideoDecodeInfoKHR parameters must: be
+set:
+
+  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding
+    must: be a valid slink:VkImageView.
+    This slink:VkImageView represents the <<decoded-output-picture, output
+    resource>> where the decoded pixels will be populated after a successful
+    decode operation.
+  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex must:
+    be an invalid <<dpb-slot,DPB Slot>> index (-1) since the decoded picture
+    is not intended to be used as a reference picture with subsequent video
+    decode operations.
+  * The value of the slink:VkVideoDecodeInfoKHR::pname:referenceSlotCount
+    can: be `0` and slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots can:
+    be `NULL`.
+  * If slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots is not `NULL`, it
+    can: still have entries representing <<dpb-slot,DPB Slot>> indexes with
+    a <<video-session-dpb-slot-states, Valid Picture Reference>>.
+    The codec extension selects the actual use of the
+    <<reference-picture,Reference Pictures>> by referring to a
+    <<dpb-slot,DPB Slot>> index with a <<video-session-dpb-slot-states,
+    Valid Picture Reference>>.
+
+[[video-picture-decode-with-references-no-slot-update]]
+
+Video Picture Decode operations with the flink:vkCmdDecodeVideoKHR command,
+requiring one or more <<reference-picture,Reference Pictures>> for the
+predictions of the values of samples for the <<decoded-output-picture,
+decoded output picture>> would require <<dpb-slot,DPB Slots>> with
+<<video-session-dpb-slot-states, Valid Picture Reference>>.
+
+In this case, the following slink:VkVideoDecodeInfoKHR parameters must: be
+set:
+
+  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding
+    must: be a valid slink:VkImageView.
+    This slink:VkImageView represents the <<decoded-output-picture, output
+    resource>> where the decoded pixels will be populated after a successful
+    decode operation.
+  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex must:
+    be an invalid <<dpb-slot,DPB Slot>> index (-1) since the decoded picture
+    is not intended to be used as a reference picture with subsequent video
+    decode operations.
+  * The value of the slink:VkVideoDecodeInfoKHR::pname:referenceSlotCount
+    must: not be `0` and slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots
+    should represent at least the number of the reference slots required for
+    the decode operation.
+    The codec extension selects the actual use of the
+    <<reference-picture,Reference Pictures>> by referring to a
+    <<dpb-slot,DPB Slot>> index with a <<video-session-dpb-slot-states,
+    Valid Picture Reference>>.
+    If the implementation does not use an opaque DPB, each <<dpb-slot,DPB
+    slot>> representing a <<reference-picture,reference picture>> must:
+    refer to a valid <<VkImageView,image view>>.
+    The <<VkImageView,image views>> must: represent the same
+    <<resources-images, image resources>> that were used to create the
+    <<reference-picture,reference picture>> for the corresponding
+    <<dpb-slot,DPB Slot>> index.
+  * slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots can: still have
+    entries representing <<dpb-slot,DPB Slot>> indexes with a
+    <<video-session-dpb-slot-states, Valid Picture Reference>>.
+
+After the flink:vkCmdDecodeVideoKHR operation is completed successfully, the
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding
+pixel data will be updated with the decoded content.
+The operation will not update any <<dpb-slot,DPB Slot>> with
+<<reference-picture,Reference Pictures>> data.
+However, any <<dpb-slot,DPB Slot>> activation, invalidation, or deactivation
+operations requested via slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots
+are still going to be performed.
+
+image::images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg[align="center",title="Decoding a Frame to VkImageView without a slot update for a *Reference Picture*",opts="{imageopts}"]
+
+
+[[video-picture-decode-with-reference-picture-and-slot-update]]
+==== Video Picture Decode with a <<reference-picture,Reference Picture>> slot update and using optional <<reference-picture,Reference Pictures>>
+
+When it is known that the picture to be decoded will be used as a
+<<reference-picture,reference picture>> for subsequent decode operations,
+one of the available <<dpb-slot,DPB Slots>> needs to be selected for
+<<video-session-activating-dpb-slot, activation and update>> operations as
+part of the flink:vkCmdDecodeVideoKHR command.
+
+Based on whether a decode operation
+<<video-picture-decode-with-references-no-slot-update, with reference
+pictures>> or <<video-picture-decode-no-reference-picture-no-slot-update,
+without reference pictures>> is required, the flink:vkCmdDecodeVideoKHR
+should be configured with parameters as described in the previous sections.
+In addition, one of the available <<dpb-slot,DPB Slots>> must: be selected
+by the application, activated with resources and then set-up for an update
+with the decode operation.
+
+In this case, the following slink:VkVideoDecodeInfoKHR parameters must: be
+set:
+
+  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding
+    must: be a valid slink:VkImageView.
+    This slink:VkImageView represents the <<decoded-output-picture, output
+    resource>> where the decoded pixels will be populated after a successful
+    decode operation.
+    If the implementation does not use an opaque DPB, both the
+    <<decoded-output-picture, output>> and <<reference-picture,reference
+    picture>> resource coincide.
+  * slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->slotIndex must:
+    be a valid <<dpb-slot,DPB Slot>> index selected by the application,
+    based on the currently available slots.
+  * slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots can: still have
+    entries representing <<dpb-slot,DPB Slot>> indexes with a
+    <<video-session-dpb-slot-states, Valid Picture Reference>>.
+
+After the flink:vkCmdDecodeVideoKHR operation has completed successfully,
+the decoded content will be available in the resource provided for
+slink:VkVideoDecodeInfoKHR::pname:pSetupReferenceSlot->pPictureResource->imageViewBinding.
+In addition, this operation will update the selected <<dpb-slot,DPB Slot>>
+with <<reference-picture,Reference Pictures>> data.
+Any other <<dpb-slot,DPB Slot>> activation,invalidation, or deactivation
+operation requested via the
+slink:VkVideoDecodeInfoKHR::pname:pReferenceSlots are going to be performed
+as well.
+
+image::images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg[align="center",title="Decoding a Frame to VkImageView with an update to a <<reference-picture,Reference Pictures>> DPB Slot",opts="{imageopts}"]
+
+
+=== Video Decode Command Buffer Commands
+
+[open,refpage='vkCmdDecodeVideoKHR',desc='Decode a frame',type='protos']
+--
+To decode a frame, call:
+
+include::{generated}/api/protos/vkCmdDecodeVideoKHR.txt[]
+
+  * pname:commandBuffer is the command buffer to be filled with this
+    function for decode frame command.
+  * pname:pFrameInfo is a pointer to a slink:VkVideoDecodeInfoKHR structure.
+
+include::{generated}/validity/protos/vkCmdDecodeVideoKHR.txt[]
+--
+
+[open,refpage='VkVideoDecodeInfoKHR',desc='Structure specifying parameters of decoding a frame',type='structs']
+--
+The slink:VkVideoDecodeInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeInfoKHR.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+    All the codec specific structures related to each frame(picture
+    parameters, quantization matrix, etc.) must: be chained here and pass to
+    decode session with the function call flink:vkCmdDecodeVideoKHR.
+  * pname:flags is a bitmask of elink:VkVideoDecodeFlagBitsKHR specifying
+    decode flags, reserved for future versions of this specification.
+  * pname:codedOffset is the coded offset of the decode operations.
+    The purpose of this field is interpreted based on the codec extension.
+ifdef::VK_EXT_video_decode_h264[]
+    When decoding content in H.264 field mode, the pname:codedOffset
+    specifies the line or picture field's offset within the image.
+endif::VK_EXT_video_decode_h264[]
+  * pname:codedExtent is the coded size of the decode operations.
+  * pname:srcBuffer is the source buffer that holds the encoded bitstream.
+  * pname:srcBufferOffset is the buffer offset where the valid encoded
+    bitstream starts in srcBuffer.
+    It must: meet the alignment requirement
+    pname:minBitstreamBufferOffsetAlignment within
+    slink:VkVideoCapabilitiesKHR queried with the
+    flink:vkGetPhysicalDeviceVideoCapabilitiesKHR function.
+  * pname:srcBufferRange is the size of the srcBuffer with valid encoded
+    bitstream, starting from pname:srcBufferOffset.
+    It must: meet the alignment requirement
+    pname:minBitstreamBufferSizeAlignment within
+    slink:VkVideoCapabilitiesKHR queried with the
+    flink:vkGetPhysicalDeviceVideoCapabilitiesKHR function.
+  * pname:dstPictureResource is the destination
+    <<decoded-output-picture,Decoded Output Picture>> Resource.
+  * pname:pSetupReferenceSlot is `NULL` or a pointer to a
+    slink:VkVideoReferenceSlotKHR structure used for generating a DPB
+    reference slot and Picture Resource.
+    pname:pSetupReferenceSlot->slotIndex specifies the slot index number to
+    use as a target for producing the DPB data.
+    pname:slotIndex must: reference a valid entry as specified in
+    slink:VkVideoBeginCodingInfoKHR via the pname:pReferenceSlots within the
+    flink:vkCmdBeginVideoCodingKHR command that established the Vulkan Video
+    Decode Context for this command.
+  * pname:referenceSlotCount is the number of the DPB Reference Pictures
+    that will be used when this decoding operation is executing.
+  * pname:pReferenceSlots is a pointer to an array of
+    slink:VkVideoReferenceSlotKHR structures specifying the DPB Reference
+    pictures that will be used when this decoding operation is executing.
+
+include::{generated}/validity/structs/VkVideoDecodeInfoKHR.txt[]
+--
+
+[open,refpage='VkVideoDecodeFlagBitsKHR',desc='Video Decode Command Flags',type='enums']
+--
+The flink:vkCmdDecodeVideoKHR flags are defined with the following
+enumeration:
+
+include::{generated}/api/enums/VkVideoDecodeFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_DECODE_RESERVED_0_BIT_KHR The current version of the
+    specification has reserved this value for future use.
+--
+
+[open,refpage='VkVideoDecodeFlagsKHR',desc='Bitmask specifying the video decode flink:vkCmdDecodeVideoKHR flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoDecodeFlagsKHR.txt[]
+
+tlink:VkVideoDecodeFlagsKHR is a bitmask type for setting a mask of zero or
+more elink:VkVideoDecodeFlagBitsKHR.
+--
diff --git a/registry/vulkan/chapters/video_decode_h264_extensions.txt b/registry/vulkan/chapters/video_decode_h264_extensions.txt
new file mode 100644
index 0000000..7adb51d
--- /dev/null
+++ b/registry/vulkan/chapters/video_decode_h264_extensions.txt
@@ -0,0 +1,343 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[decode-h264]]
+== Video Decode of AVC (ITU-T H.264)
+
+This extension adds H.264 codec specific structures needed for decode
+session to execute decode jobs which include H.264 sequence header, picture
+parameter header and quantization matrix etc.
+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 http://www.itu.int/rec/T-REC-H.264.
+
+
+=== H.264 decode profile
+
+A H.264 decode profile is specified using slink:VkVideoDecodeH264ProfileEXT
+chained to slink:VkVideoProfileKHR when the codec-operation in
+slink:VkVideoProfileKHR is
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT.
+
+[open,refpage='VkVideoDecodeH264ProfileEXT',desc='Structure specifying H.264 decode profile',type='structs']
+--
+The sname:VkVideoDecodeH264ProfileEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264ProfileEXT.txt[]
+
+  * pname:sType is the type of 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
+  * pname:pictureLayout is a bitmask of
+    elink:VkVideoDecodeH264PictureLayoutFlagBitsEXT specifying the layout of
+    the decoded picture's contents depending on the nature (progressive vs.
+    interlaced) of the input content.
+
+[NOTE]
+.Note
+====
+When passing sname:VkVideoDecodeH264ProfileEXT to
+flink:vkCreateVideoSessionKHR in the pname:pNext chain of
+slink:VkVideoSessionCreateInfoKHR, requests for a pname:pictureLayout not
+supported by the implementation will result in failure of the command.
+====
+
+.Valid Usage
+****
+  * [[VUID-VkVideoDecodeH264ProfileEXT-pNext-06259]]
+    If the slink:VkVideoDecodeH264ProfileEXT structure is included in the
+    pname:pNext chain of the slink:VkVideoCapabilitiesKHR structure passed
+    to flink:vkGetPhysicalDeviceVideoCapabilitiesKHR, the value in
+    pname:pictureLayout is treated as a bitmask of requested picture
+    layouts.
+    It is always valid to use the value
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT as the
+    implementation is guaranteed to support decoding of progressive content.
+  * [[VUID-VkVideoDecodeH264ProfileEXT-pNext-06260]]
+    If the slink:VkVideoDecodeH264ProfileEXT structure is included in the
+    pname:pNext chain of the slink:VkVideoSessionCreateInfoKHR structure
+    passed to flink:vkCreateVideoSessionKHR, the value in
+    pname:pictureLayout must: be exactly one of
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT,
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT
+    or
+    ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT.
+****
+
+include::{generated}/validity/structs/VkVideoDecodeH264ProfileEXT.txt[]
+--
+
+[open,refpage='VkVideoDecodeH264PictureLayoutFlagsEXT',desc='Bitmask of VkVideoDecodeH264PictureLayoutFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoDecodeH264PictureLayoutFlagsEXT.txt[]
+
+tname:VkVideoDecodeH264PictureLayoutFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoDecodeH264PictureLayoutFlagBitsEXT.
+--
+
+[open,refpage='VkVideoDecodeH264PictureLayoutFlagBitsEXT',desc='H.264 video decode picture layout flags',type='enums']
+--
+The H.264 video decode picture layout flags are defined with the following
+enum:
+
+include::{generated}/api/enums/VkVideoDecodeH264PictureLayoutFlagBitsEXT.txt[]
+
+  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT specifies
+    support for progressive content.
+    This flag has the value `0`.
+  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT
+    specifies support for or use of a picture layout for interlaced content
+    where all lines belonging to the first field are decoded to the
+    even-numbered lines within the picture resource, and all lines belonging
+    to the second field are decoded to the odd-numbered lines within the
+    picture resource.
+  * ename:VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT
+    specifies support for or use of a picture layout for interlaced content
+    where all lines belonging to the first field are grouped together in a
+    single plane, followed by another plane containing all lines belonging
+    to the second field.
+--
+
+
+=== Selecting a H.264 decode profile
+
+When using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
+capabilities for the input pname:pVideoProfile with
+pname:videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT, a
+slink:VkVideoDecodeH264ProfileEXT structure must: be chained to
+slink:VkVideoProfileKHR to select a H.264 decode profile.
+If supported, the implementation returns the capabilities associated with
+the specified H.264 decode profile.
+The requirement is similar when querying supported image formats using
+flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR.
+
+A supported H.264 decode profile must: be selected when creating a video
+session by chaining slink:VkVideoDecodeH264ProfileEXT to the
+slink:VkVideoProfileKHR field of slink:VkVideoSessionCreateInfoKHR.
+
+
+=== Capabilities
+
+[open,refpage='VkVideoDecodeH264CapabilitiesEXT',desc='Structure specifying H.264 decode capabilities',type='structs']
+--
+When using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
+capabilities for the input pname:pVideoProfile with
+pname:videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT, a
+slink:VkVideoDecodeH264CapabilitiesEXT structure must: be chained to
+slink:VkVideoCapabilitiesKHR to get this H.264 decode profile specific
+capabilities.
+
+The slink:VkVideoDecodeH264CapabilitiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264CapabilitiesEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxLevel is the maximum H.264 level supported by the device.
+  * pname:fieldOffsetGranularity - if Interlaced Video Content is suported,
+    the maximum field offset granularity supported for the picture resource.
+  * pname:stdExtensionVersion is a slink:VkExtensionProperties structure
+    specifying the H.264 extension name and version supported by this
+    implementation.
+
+include::{generated}/validity/structs/VkVideoDecodeH264CapabilitiesEXT.txt[]
+--
+
+
+=== Create Information
+
+[open,refpage='VkVideoDecodeH264SessionCreateInfoEXT',desc='Structure specifies H.264 decode session creation parameters',type='structs']
+--
+A slink:VkVideoDecodeH264SessionCreateInfoEXT structure can: be chained to
+slink:VkVideoSessionCreateInfoKHR when the function
+flink:vkCreateVideoSessionKHR is called to create a video session for H.264
+decode.
+
+The slink:VkVideoDecodeH264SessionCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264SessionCreateInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
+    structure specifying the H.264 codec extensions defined in
+    code:StdVideoH264Extensions.
+
+include::{generated}/validity/structs/VkVideoDecodeH264SessionCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoDecodeH264CreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoDecodeH264CreateFlagsEXT.txt[]
+
+tname:VkVideoDecodeH264CreateFlagsEXT is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
+
+
+=== Decoder Parameter Sets
+
+To reduce parameter traffic during decoding, the decoder parameter set
+object supports storing H.264 SPS/PPS parameter sets that may: be later
+referenced during decoding.
+
+[open,refpage='VkVideoDecodeH264SessionParametersCreateInfoEXT',desc='Structure specifies H.264 decoder parameter set information',type='structs']
+--
+A slink:VkVideoDecodeH264SessionParametersCreateInfoEXT structure holding
+one H.264 SPS and at least one H.264 PPS paramater set must: be chained to
+slink:VkVideoSessionParametersCreateInfoKHR when calling
+flink:vkCreateVideoSessionParametersKHR to store these parameter set(s) with
+the decoder parameter set object for later reference.
+The provided H.264 SPS/PPS parameters must: be within the limits specified
+during decoder creation for the decoder specified in
+slink:VkVideoSessionParametersCreateInfoKHR.
+
+The slink:VkVideoDecodeH264SessionParametersCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264SessionParametersCreateInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxSpsStdCount is the maximum number of SPS parameters that the
+    sname:VkVideoSessionParametersKHR can contain.
+  * pname:maxPpsStdCount is the maximum number of PPS parameters that the
+    sname:VkVideoSessionParametersKHR can contain.
+  * pname:pParametersAddInfo is `NULL` or a pointer to a
+    slink:VkVideoDecodeH264SessionParametersAddInfoEXT structure specifying
+    H.264 parameters to add upon object creation.
+
+include::{generated}/validity/structs/VkVideoDecodeH264SessionParametersCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoDecodeH264SessionParametersAddInfoEXT',desc='Structure specifies H.264 decoder parameter set information',type='structs']
+--
+include::{generated}/api/structs/VkVideoDecodeH264SessionParametersAddInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:spsStdCount is the number of SPS elements in pname:pSpsStd.
+    Its value must: be less than or equal to the value of
+    pname:maxSpsStdCount.
+  * pname:pSpsStd 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:ppsStdCount is the number of PPS provided in pname:pPpsStd.
+    Its value must: be less than or equal to the value of
+    pname:maxPpsStdCount.
+  * pname:pPpsStd 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-VkVideoDecodeH264SessionParametersAddInfoEXT-spsStdCount-04822]]
+    The values of pname:spsStdCount and pname:ppsStdCount must: be less than
+    or equal to the values of pname:maxSpsStdCount and pname:maxPpsStdCount,
+    respectively
+  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-maxSpsStdCount-04823]]
+    When the pname:maxSpsStdCount number of parameters of type
+    StdVideoH264SequenceParameterSet in the Video Session Parameters object
+    is reached, no additional parameters of that type can be added to this
+    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-VkVideoDecodeH264SessionParametersAddInfoEXT-maxPpsStdCount-04824]]
+    When the pname:maxPpsStdCount number of parameters of type
+    StdVideoH264PictureParameterSet in the Video Session Parameters object
+    is reached, no additional parameters of that type can be added to this
+    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-VkVideoDecodeH264SessionParametersAddInfoEXT-None-04825]]
+    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-VkVideoDecodeH264SessionParametersAddInfoEXT-None-04826]]
+    Parameter entries that already exist in Video Session Parameters object
+    with a particular SPS-PPS IDs cannot: be replaced nor updated
+  * [[VUID-VkVideoDecodeH264SessionParametersAddInfoEXT-None-04827]]
+    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-VkVideoDecodeH264SessionParametersAddInfoEXT-None-04828]]
+    SPS/PPS parameters must: comply with the limits specified in
+    slink:VkVideoSessionCreateInfoKHR during Video Session creation
+****
+
+include::{generated}/validity/structs/VkVideoDecodeH264SessionParametersAddInfoEXT.txt[]
+--
+
+
+=== Picture Decoding
+
+To decode a picture, the structure slink:VkVideoDecodeH264PictureInfoEXT
+may: be chained to slink:VkVideoDecodeInfoKHR when calling
+flink:vkCmdDecodeVideoKHR.
+
+[open,refpage='VkVideoDecodeH264PictureInfoEXT',desc='Structure specifies H.264 decode picture parameters when decoding a picture',type='structs']
+--
+The structure slink:VkVideoDecodeH264PictureInfoEXT representing a picture
+decode operation is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264PictureInfoEXT.txt[]
+
+  * pname:sType is the type of 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 the codec
+    standard specific picture information from the H.264 specification.
+  * pname:slicesCount is the number of slices in this picture.
+  * pname:pSlicesDataOffsets is a pointer to an array of pname:slicesCount
+    offsets indicating the start offset of each slice within the bitstream
+    buffer.
+
+include::{generated}/validity/structs/VkVideoDecodeH264PictureInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoDecodeH264DpbSlotInfoEXT',desc='Structure specifies H.264 decode DPB picture information',type='structs']
+--
+The slink:VkVideoDecodeH264DpbSlotInfoEXT structure correlates a DPB Slot
+index with codec-specific information and is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264DpbSlotInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pStdReferenceInfo is a pointer to a
+    code:StdVideoDecodeH264ReferenceInfo structure specifying the codec
+    standard specific picture reference information from the H.264
+    specification.
+
+include::{generated}/validity/structs/VkVideoDecodeH264DpbSlotInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoDecodeH264MvcEXT',desc='Structure specifies parameters of mvc views',type='structs']
+--
+The slink:VkVideoDecodeH264MvcEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH264MvcEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pStdMvc is a pointer to a code:StdVideoDecodeH264Mvc structure
+    specifying H.264 codec specification information for MVC.
+
+When the content type is H.264 MVC, a slink:VkVideoDecodeH264MvcEXT
+structure must: be chained to slink:VkVideoDecodeH264PictureInfoEXT.
+
+include::{generated}/validity/structs/VkVideoDecodeH264MvcEXT.txt[]
+--
diff --git a/registry/vulkan/chapters/video_decode_h265_extensions.txt b/registry/vulkan/chapters/video_decode_h265_extensions.txt
new file mode 100644
index 0000000..28df08a
--- /dev/null
+++ b/registry/vulkan/chapters/video_decode_h265_extensions.txt
@@ -0,0 +1,254 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[decode-h265]]
+== Video Decode of HEVC (ITU-T H.265)
+
+This extension adds H.265 codec specific structures needed for decode
+session to execute decode jobs which include H.265 sequence header, picture
+parameter header and quantization matrix etc.
+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 http://www.itu.int/rec/T-REC-H.265.
+
+
+=== H.265 decode profile
+
+A H.265 decode profile is specified using slink:VkVideoDecodeH265ProfileEXT
+chained to slink:VkVideoProfileKHR when the codec-operation in
+slink:VkVideoProfileKHR is
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT.
+
+[open,refpage='VkVideoDecodeH265ProfileEXT',desc='Structure specifying H.265 decode profile',type='structs']
+--
+The slink:VkVideoDecodeH265ProfileEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265ProfileEXT.txt[]
+
+  * pname:sType is the type of 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/VkVideoDecodeH265ProfileEXT.txt[]
+--
+
+
+=== Selecting an H.265 Profile
+
+When using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
+capabilities for the input pname:pVideoProfile with
+pname:videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT, a
+slink:VkVideoDecodeH265ProfileEXT structure must: be chained to
+slink:VkVideoProfileKHR to select a H.265 decode profile.
+If supported, the implementation returns the capabilities associated with
+the specified H.265 decode profile.
+The requirement is similar when querying supported image formats using
+flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR.
+
+A supported H.265 decode profile must: be selected when creating a video
+session by chaining slink:VkVideoDecodeH265ProfileEXT to the
+slink:VkVideoProfileKHR field of slink:VkVideoSessionCreateInfoKHR.
+
+
+=== Capabilities
+
+[open,refpage='VkVideoDecodeH265CapabilitiesEXT',desc='Structure specifies H.265 decode capabilities parameters when decoding a frame',type='structs']
+--
+When uses flink:vkGetPhysicalDeviceVideoCapabilitiesKHR to query the
+capabilities for the parameter pname:videoCodecOperation specified as
+ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT,
+slink:VkVideoDecodeH265CapabilitiesEXT structure can: be chained to
+slink:VkVideoCapabilitiesKHR to get this H.265 extension specific
+capabilities.
+
+The slink:VkVideoDecodeH265CapabilitiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265CapabilitiesEXT.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxLevel is the maximum H.265 level supported by the device.
+  * pname:stdExtensionVersion is a slink:VkExtensionProperties structure
+    specifying the H.265 extension name and version supported by this
+    implementation.
+
+include::{generated}/validity/structs/VkVideoDecodeH265CapabilitiesEXT.txt[]
+--
+
+
+=== Create Infomation
+
+[open,refpage='VkVideoDecodeH265SessionCreateInfoEXT',desc='Structure specifies H.265 decode session creation parameters',type='structs']
+--
+A slink:VkVideoDecodeH265SessionCreateInfoEXT structure can: be chained to
+slink:VkVideoSessionCreateInfoKHR when the function
+flink:vkCreateVideoSessionKHR is called to create a video session for H.265
+decode operations.
+
+The slink:VkVideoDecodeH265SessionCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265SessionCreateInfoEXT.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
+    structure specifying H.265 codec extensions.
+
+include::{generated}/validity/structs/VkVideoDecodeH265SessionCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoDecodeH265CreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoDecodeH265CreateFlagsEXT.txt[]
+
+tname:VkVideoDecodeH265CreateFlagsEXT is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
+
+
+=== Decoder Parameter Sets
+
+To reduce parameter traffic during decoding, the decoder parameter set
+object supports storing H.265 SPS/PPS parameter sets that may be later
+referenced during decoding.
+
+[open,refpage='VkVideoDecodeH265SessionParametersCreateInfoEXT',desc='Structure specifies H.265 decoder parameter set information',type='structs']
+--
+A sname:VkVideoDecodeH265SessionParametersCreateInfoEXT structure holding
+one H.265 SPS and at least one H.265 PPS paramater set must: be chained to
+sname:VkVideoSessionParametersCreateInfoKHR when calling
+fname:vkCreateVideoSessionParametersKHR to store these parameter set(s) with
+the decoder parameter set object for later reference.
+The provided H.265 SPS/PPS parameters must: be within the limits specified
+during decoder creation for the decoder specified in
+sname:VkVideoSessionParametersCreateInfoKHR.
+
+The sname:VkVideoDecodeH265SessionParametersCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265SessionParametersCreateInfoEXT.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxSpsStdCount is the maximum number of SPS parameters that the
+    sname:VkVideoSessionParametersKHR can contain.
+  * pname:maxPpsStdCount is the maximum number of PPS parameters that the
+    sname:VkVideoSessionParametersKHR can contain.
+  * pname:pParametersAddInfo is `NULL` or a pointer to a
+    slink:VkVideoDecodeH265SessionParametersAddInfoEXT structure specifying
+    H.265 parameters to add upon object creation.
+
+include::{generated}/validity/structs/VkVideoDecodeH265SessionParametersCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoDecodeH265SessionParametersAddInfoEXT',desc='Structure specifies H.265 decoder parameter set information',type='structs']
+--
+include::{generated}/api/structs/VkVideoDecodeH265SessionParametersAddInfoEXT.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:spsStdCount is the number of SPS elements in the pname:pSpsStd.
+    Its value must: be less than or equal to the value of
+    pname:maxSpsStdCount.
+  * pname:pSpsStd is a pointer to an array of
+    code:StdVideoH265SequenceParameterSet structures representing H.265
+    sequence parameter sets.
+    Each element of the array must: have a unique H.265 VPS-SPS ID pair.
+  * pname:ppsStdCount is the number of PPS provided in pname:pPpsStd.
+    Its value must: be less than or equal to the value of
+    pname:maxPpsStdCount.
+  * pname:pPpsStd is a pointer to an array of
+    code:StdVideoH265PictureParameterSet structures representing H.265
+    picture parameter sets.
+    Each element of the array entry must: have a unique H.265 VPS-SPS-PPS ID
+    tuple.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-vpsStdCount-04829]]
+    The values of pname:vpsStdCount, pname:spsStdCount and pname:ppsStdCount
+    must: be less than or equal to the values of pname:maxVpsStdCount,
+    pname:maxSpsStdCount and pname:maxPpsStdCount, respectively
+  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-maxVpsStdCount-04830]]
+    When the pname:maxVpsStdCount number of parameters of type
+    StdVideoH265VideoParameterSet 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-VkVideoDecodeH265SessionParametersAddInfoEXT-maxSpsStdCount-04831]]
+    When the pname:maxSpsStdCount number of parameters of type
+    StdVideoH265SequenceParameterSet 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-VkVideoDecodeH265SessionParametersAddInfoEXT-maxPpsStdCount-04832]]
+    When the pname:maxPpsStdCount number of parameters of type
+    StdVideoH265PictureParameterSet 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-VkVideoDecodeH265SessionParametersAddInfoEXT-None-04833]]
+    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-VkVideoDecodeH265SessionParametersAddInfoEXT-None-04834]]
+    Parameter entries that already exist in Video Session Parameters object
+    with a particular VPS-SPS-PPS IDs cannot: be replaced nor updated
+  * [[VUID-VkVideoDecodeH265SessionParametersAddInfoEXT-None-04835]]
+    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-VkVideoDecodeH265SessionParametersAddInfoEXT-None-04836]]
+    VPS/SPS/PPS parameters must: comply with the limits specified in
+    slink:VkVideoSessionCreateInfoKHR during Video Session creation
+****
+
+include::{generated}/validity/structs/VkVideoDecodeH265SessionParametersAddInfoEXT.txt[]
+--
+
+
+=== Picture Parameters
+
+[open,refpage='VkVideoDecodeH265PictureInfoEXT',desc='Structure specifies H.265 picture information when decoding a frame',type='structs']
+--
+The slink:VkVideoDecodeH265PictureInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265PictureInfoEXT.txt[]
+  * pname:sType is the type of 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 codec standard
+    specific picture information from the H.265 specification.
+  * pname:slicesCount is the number of slices in this picture.
+  * pname:pSlicesDataOffsets is a pointer to an array of pname:slicesCount
+    offsets indicating the start offset of each slice within the bitstream
+    buffer.
+
+include::{generated}/validity/structs/VkVideoDecodeH265PictureInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoDecodeH265DpbSlotInfoEXT',desc='Structure specifies H.265 DPB information when decoding a frame',type='structs']
+--
+The slink:VkVideoDecodeH265DpbSlotInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoDecodeH265DpbSlotInfoEXT.txt[]
+  * pname:sType is the type of 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 the codec
+    standard specific picture reference information from the H.264
+    specification.
+
+include::{generated}/validity/structs/VkVideoDecodeH265DpbSlotInfoEXT.txt[]
+--
+
diff --git a/registry/vulkan/chapters/video_encode_extensions.txt b/registry/vulkan/chapters/video_encode_extensions.txt
new file mode 100644
index 0000000..699ba6c
--- /dev/null
+++ b/registry/vulkan/chapters/video_encode_extensions.txt
@@ -0,0 +1,294 @@
+// Copyright 2018-2021 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 <<input-encode-picture,input>> and
+    <<reference-picture,reference>> pictures must: be queried and chosen
+    separately.
+    Refer to the section on
+    <<supported-video-input-output-dpb-formats-enumeration,enumeration of
+    supported video formats>>.
+  . 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:VkVideoProfilesKHR to the pname:pNext
+    chain of slink:VkFormatProperties2.
+    When querying the parameters with
+    flink:vkGetPhysicalDeviceImageFormatProperties2 for images targeting
+    <<input-encode-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
+    <<input-encode-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-introduction,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-introduction,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
+
+
+=== Video Encode Vulkan Command Buffer Commands
+
+[open,refpage='vkCmdEncodeVideoKHR',desc='Encode operation for bitstream generation',type='protos']
+--
+To launch an encode operation that results in bitstream generation, call:
+
+include::{generated}/api/protos/vkCmdEncodeVideoKHR.txt[]
+
+  * 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.
+
+include::{generated}/validity/protos/vkCmdEncodeVideoKHR.txt[]
+--
+
+[open,refpage='VkVideoEncodeInfoKHR',desc='Structure to chain codec-specific structures to',type='structs']
+--
+The slink:VkVideoEncodeInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeInfoKHR.txt[]
+  * pname:sType is the type of 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 a bitmask of elink:VkVideoEncodeFlagBitsKHR specifying
+    encode flags, and is reserved for future versions of this specification.
+  * pname:qualityLevel is the coding quality level of the encoding.
+    It is defined by the codec-specific extensions.
+  * pname:codedExtent is the coded size of the encode operations.
+  * pname:dstBitstreamBuffer is the buffer where the encoded bitstream
+    output will be produced.
+  * pname:dstBitstreamBufferOffset is the offset in the
+    pname:dstBitstreamBuffer where the encoded bitstream output will start.
+    pname:dstBitstreamBufferOffset's value must: be aligned to
+    slink:VkVideoCapabilitiesKHR::pname:minBitstreamBufferOffsetAlignment,
+    as reported by the implementation.
+  * pname:dstBitstreamBufferMaxRange is the maximum size of the
+    pname:dstBitstreamBuffer that can be used while the encoded bitstream
+    output is produced.
+    pname:dstBitstreamBufferMaxRange's value must: be aligned to
+    slink:VkVideoCapabilitiesKHR::pname:minBitstreamBufferSizeAlignment, as
+    reported by the implementation.
+  * pname:srcPictureResource is the Picture Resource of the
+    <<input-encode-picture,Input Picture>> to be encoded by the operation.
+  * pname:pSetupReferenceSlot is a pointer to a
+    slink:VkVideoReferenceSlotKHR 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:VkVideoReferenceSlotKHR 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.
+
+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:dstBitstreamBuffer of slink:VkVideoEncodeInfoKHR 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-bitstream-buffer-range, video encode bitstream buffer
+range queries>>.
+
+include::{generated}/validity/structs/VkVideoEncodeInfoKHR.txt[]
+--
+
+[open,refpage='VkVideoEncodeFlagBitsKHR',desc='Video Encode Command Flags',type='enums']
+--
+The flink:vkCmdEncodeVideoKHR flags are defined with the following
+enumeration:
+
+include::{generated}/api/enums/VkVideoEncodeFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR The current version of the
+    specification has reserved this value for future use.
+--
+
+[open,refpage='VkVideoEncodeFlagsKHR',desc='Bitmask specifying the video encode flink:vkCmdEncodeVideoKHR flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeFlagsKHR.txt[]
+
+tlink:VkVideoEncodeFlagsKHR is a bitmask type for setting a mask of zero or
+more elink:VkVideoEncodeFlagBitsKHR.
+--
+
+[open,refpage='VkVideoEncodeRateControlInfoKHR',desc='Structure to set encode rate control parameters',type='structs']
+--
+The slink:VkVideoEncodeRateControlInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeRateControlInfoKHR.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of
+    elink:VkVideoEncodeRateControlModeFlagBitsKHR specifying encode rate
+    control flags.
+  * pname:rateControlMode is a elink:VkVideoEncodeRateControlModeFlagBitsKHR
+    value specifying the encode rate control mode.
+  * pname:averageBitrate is the average bitrate in bits/second.
+    Valid when rate control is not
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR.
+  * pname:peakToAverageBitrateRatio is the peak bitrate to average bitrate
+    in percentage.
+    Valid when rate control is
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR.
+  * pname:frameRateNumerator is the numerator of the frame rate.
+    Valid when rate control is not
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR.
+  * pname:frameRateDenominator is the denominator of the frame rate.
+    Valid when rate control is not
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR.
+  * pname:virtualBufferSizeInMs is the leaky bucket model virtual buffer
+    size in milliseconds, with respect to peak bitrate.
+    Valid when rate control is not
+    ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR.
+    For example, virtual buffer size is (pname:virtualBufferSizeInMs *
+    pname:peakToAverageBitrateRatio * pname:averageBitrate / 100000).
+
+A codec-specific extension structure for further rate control parameter
+settings may: be chained to slink:VkVideoEncodeRateControlInfoKHR.
+
+include::{generated}/validity/structs/VkVideoEncodeRateControlInfoKHR.txt[]
+--
+
+[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.txt[]
+
+  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR for disabling rate
+    control.
+  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR for constant bitrate
+    rate control mode.
+  * ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR for variable bitrate
+    rate control mode.
+--
+
+[open,refpage='VkVideoEncodeRateControlModeFlagsKHR',desc='Bitmask specifying the video encode flink:vkCmdControlVideoCodingKHR flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeRateControlModeFlagsKHR.txt[]
+
+tlink:VkVideoEncodeRateControlModeFlagsKHR is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeRateControlModeFlagBitsKHR.
+--
+
+[open,refpage='VkVideoEncodeRateControlFlagBitsKHR',desc='Video Encode Rate Control Flags',type='enums']
+--
+The flink:vkCmdControlVideoCodingKHR flags are defined with the following
+enumeration:
+
+include::{generated}/api/enums/VkVideoEncodeRateControlFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR The current version of the
+    specification has reserved this value for future use.
+--
+
+[open,refpage='VkVideoEncodeRateControlFlagsKHR',desc='Bitmask specifying the video encode flink:vkCmdControlVideoCodingKHR flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeRateControlFlagsKHR.txt[]
+
+tlink:VkVideoEncodeRateControlFlagsKHR is a bitmask type for setting a mask
+of zero or more elink:VkVideoEncodeRateControlFlagBitsKHR.
+--
diff --git a/registry/vulkan/chapters/video_encode_h264_extensions.txt b/registry/vulkan/chapters/video_encode_h264_extensions.txt
new file mode 100644
index 0000000..50227ce
--- /dev/null
+++ b/registry/vulkan/chapters/video_encode_h264_extensions.txt
@@ -0,0 +1,547 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[encode-h264]]
+== Encode H.264
+
+This 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 http://www.itu.int/rec/T-REC-H.264.
+
+
+=== H.264 encode profile
+
+An H.264 encode profile is specified by including the
+slink:VkVideoEncodeH264ProfileEXT structure in the pname:pNext chain of the
+slink:VkVideoProfileKHR structure when
+slink:VkVideoProfileKHR::pname:videoCodecOperation is
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT.
+
+[open,refpage='VkVideoEncodeH264ProfileEXT',desc='Structure specifying H.264 encode profile',type='structs']
+--
+The slink:VkVideoEncodeH264ProfileEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264ProfileEXT.txt[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkVideoEncodeH264ProfileEXT.txt[]
+--
+
+
+=== Capabilities
+
+[open,refpage='VkVideoEncodeH264CapabilitiesEXT',desc='Structure specifying H.264 encode capabilities',type='structs']
+--
+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
+slink:VkVideoEncodeH264CapabilitiesEXT structure can: be chained to
+slink:VkVideoCapabilitiesKHR to retrieve H.264 extension specific
+capabilities.
+
+The slink:VkVideoEncodeH264CapabilitiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264CapabilitiesEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of elink:VkVideoEncodeH264CapabilityFlagBitsEXT
+    describing supported encoding tools.
+  * pname:inputModeFlags is a bitmask of
+    elink:VkVideoEncodeH264InputModeFlagBitsEXT describing supported command
+    buffer input granularities/modes.
+  * pname:outputModeFlags is a bitmask of
+    elink:VkVideoEncodeH264OutputModeFlagBitsEXT describing supported output
+    (bitstream size reporting) granularities/modes.
+  * pname:maxPictureSizeInMbs reports the maximum encoded picture width and
+    height in Macroblocks.
+  * pname:minPictureSizeInMbs reports the minimum encoded picture width and
+    height in Macroblocks.
+  * pname:inputImageDataAlignment reports alignment of data that must: be
+    filled in the input image horizontally and vertically in pixels.
+    Max is 16: Data must: be filled up to Macroblock boundary (no
+    extrapolation/filling is supported by implementation).
+    Min is 1: The implementation will take care of all needed
+    extrapolation/filling up to the next Macroblock boundary.
+  * pname:maxNumL0ReferenceForP reports the maximum number of reference
+    pictures the encoder supports as list0 references for P pictures.
+  * pname:maxNumL0ReferenceForB reports the maximum number of reference
+    pictures the encoder supports as list0 references for B pictures.
+    Reports 0 if B pictures are not supported.
+  * pname:maxNumL1Reference reports the maximum number of reference pictures
+    the encoder supports as list1 references if B pictures are supported.
+    Reports 0 if B pictures are not supported.
+  * pname:qualityLevelCount is the number of discrete quality levels
+    supported.
+  * pname:stdExtensionVersion is the specific H.264 extension name and
+    version supported by this implementation.
+
+include::{generated}/validity/structs/VkVideoEncodeH264CapabilitiesEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH264CapabilityFlagsEXT',desc='Bitmask of VkVideoEncodeH264CapabilityFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH264CapabilityFlagsEXT.txt[]
+
+tname:VkVideoEncodeH264CapabilityFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH264CapabilityFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH264CapabilityFlagBitsEXT',desc='Video encode H.264 capability flags',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH264CapabilitiesEXT::pname:flags, indicating the encoding
+tools supported, are:
+
+include::{generated}/api/enums/VkVideoEncodeH264CapabilityFlagBitsEXT.txt[]
+
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT reports if CABAC
+    entropy coding is supported.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT reports if CAVLC
+    entropy coding is supported.
+    An implementation must: support at least one entropy coding mode.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT
+    reports if using weighted_bipred_idc_flag from StdVideoH264PpsFlags is
+    supported.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT reports if
+    enabling transform_8x8_mode_flag in StdVideoH264PpsFlags is supported.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT reports
+    if setting chroma_qp_index_offset in StdVideoH264PictureParameterSet is
+    supported.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT
+    reports if setting second_chroma_qp_index_offset in
+    StdVideoH264PictureParameterSet is supported.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT
+    reports if using STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED
+    from StdVideoH264DisableDeblockingFilterIdc is supported.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT
+    reports if using STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED
+    from StdVideoH264DisableDeblockingFilterIdc is supported.
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT
+    reports if using 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_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT
+  * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT
+--
+
+[open,refpage='VkVideoEncodeH264InputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH264InputModeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH264InputModeFlagsEXT.txt[]
+
+tname:VkVideoEncodeH264InputModeFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH264InputModeFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH264InputModeFlagBitsEXT',desc='Video encode H.264 input modes',type='enums']
+--
+The pname:inputModeFlags field reports the various commmand buffer input
+granularities supported by the implementation as follows:
+
+include::{generated}/api/enums/VkVideoEncodeH264InputModeFlagBitsEXT.txt[]
+
+  * ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT indicates that a
+    single command buffer must: at least encode an entire frame.
+    Any non-VCL NALUs must: be encoded using the same command buffer as the
+    frame if ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT is not
+    supported.
+  * ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT indicates that a
+    single command buffer must: at least encode a single slice.
+    Any non-VCL NALUs must: be encoded using the same command buffer as the
+    first slice of the frame if
+    ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT is not supported.
+  * ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT indicates that a
+    single command buffer may: encode a non-VCL NALU by itself.
+
+An implementation must: support at least one of
+ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT or
+ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT.
+--
+
+[open,refpage='VkVideoEncodeH264OutputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH264OutputModeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH264OutputModeFlagsEXT.txt[]
+
+tname:VkVideoEncodeH264OutputModeFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH264InputModeFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH264OutputModeFlagBitsEXT',desc='Video encode H.264 output modes',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH264CapabilitiesEXT::pname:outputModeFlags, indicating
+the minimum bitstream generation commands that must: be included between
+each flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR pair
+(henceforth simply begin/end pair), are:
+
+include::{generated}/api/enums/VkVideoEncodeH264OutputModeFlagBitsEXT.txt[]
+
+  * ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT indicates that
+    calls to generate all NALUs of a frame must: be included within a single
+    begin/end pair.
+    Any non-VCL NALUs must: be encoded within the same begin/end pair if
+    ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
+  * ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT indicates that each
+    begin/end pair must: encode at least one slice.
+    Any non-VCL NALUs must: be encoded within the same begin/end pair as the
+    first slice of the frame if
+    ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
+  * ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT indicates that
+    each begin/end pair may: encode only a non-VCL NALU by itself.
+    An implementation must: support at least one of
+    ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT or
+    ename:VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT.
+
+A single begin/end pair must: not encode more than a single frame.
+
+The bitstreams of NALUs generated within a single begin/end pair are written
+continuously into the same bitstream buffer (any padding between the NALUs
+must: be compliant to the H.264 standard).
+
+The supported input modes must: be coarser or equal to the supported output
+modes.
+For example, it is illegal to report slice input is supported but only frame
+output is supported.
+
+An implementation must: report one of the following combinations of
+input/output modes:
+
+  ** Input: Frame, Output: Frame
+  ** Input: Frame, Output: Frame and Non-VCL
+  ** Input: Frame, Output: Slice
+  ** Input: Frame, Output: Slice and Non-VCL
+  ** Input: Slice, Output: Slice
+  ** Input: Slice, Output: Slice and Non-VCL
+  ** Input: Frame and Non-VCL, Output: Frame and Non-VCL
+  ** Input: Frame and Non-VCL, Output: Slice and Non-VCL
+  ** Input: Slice and Non-VCL, Output: Slice and Non-VCL
+--
+
+
+=== Create Information
+
+[open,refpage='VkVideoEncodeH264SessionCreateInfoEXT', desc='Structure specifies H.264 encoder creation parameters', type='structs']
+--
+A slink:VkVideoEncodeH264SessionCreateInfoEXT structure must: be chained to
+slink:VkVideoSessionCreateInfoKHR when the function
+flink:vkCreateVideoSessionKHR is called with pname:videoCodecOperation in
+slink:VkVideoSessionCreateInfoKHR set to
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT.
+
+The sname:VkVideoEncodeH264SessionCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264SessionCreateInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is a bitmask of tlink:VkVideoEncodeH264CreateFlagsEXT
+    specifying H.264 encoder creation flags.
+  * pname:maxPictureSizeInMbs specifies the syntax element
+    pic_width_in_mbs_minus1 + 1 and the syntax element
+    pic_height_in_map_units_minus1 + 1.
+  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
+    structure specifying H.264 codec extensions.
+
+include::{generated}/validity/structs/VkVideoEncodeH264SessionCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH264CreateFlagsEXT',desc='Bitmask specifying the video encode session creation flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH264CreateFlagsEXT.txt[]
+
+tlink:VkVideoEncodeH264CreateFlagsEXT is a bitmask type for setting a mask
+of zero or more elink:VkVideoEncodeH264CreateFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH264CreateFlagBitsEXT',desc='Video encode session creation flags',type='enums']
+--
+Bits which can: be set in
+slink:VkVideoEncodeH264SessionCreateInfoEXT::pname:flags are:
+
+include::{generated}/api/enums/VkVideoEncodeH264CreateFlagBitsEXT.txt[]
+
+  * ename:VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT is 0, and specifies no
+    additional creation flags.
+  * ename:VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT The current version
+    of the specification has reserved this value for future use.
+--
+
+
+=== 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']
+--
+A slink:VkVideoEncodeH264SessionParametersCreateInfoEXT structure holding
+one H.264 SPS and at least one H.264 PPS paramater set must: be chained to
+slink:VkVideoSessionParametersCreateInfoKHR when calling
+flink:vkCreateVideoSessionParametersKHR to store these parameter set(s) with
+the encoder parameter set object for later reference.
+The provided H.264 SPS/PPS parameters must: be within the limits specified
+during encoder creation for the encoder specified in
+slink:VkVideoSessionParametersCreateInfoKHR.
+
+The slink:VkVideoEncodeH264SessionParametersCreateInfoEXT structure is
+defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264SessionParametersCreateInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxSpsStdCount is the maximum number of SPS parameters that the
+    sname:VkVideoSessionParametersKHR can contain.
+  * pname:maxPpsStdCount 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.txt[]
+--
+
+[open,refpage='VkVideoEncodeH264SessionParametersAddInfoEXT',desc='Structure specifies H.264 encoder parameter set information',type='structs']
+--
+include::{generated}/api/structs/VkVideoEncodeH264SessionParametersAddInfoEXT.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:spsStdCount is the number of SPS elements in the pname:pSpsStd.
+    Its value must: be less than or equal to the value of
+    pname:maxSpsStdCount.
+  * pname:pSpsStd 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:ppsStdCount is the number of PPS provided in pname:pPpsStd.
+    Its value must: be less than or equal to the value of
+    pname:maxPpsStdCount.
+  * pname:pPpsStd 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-spsStdCount-04837]]
+    The values of pname:spsStdCount and pname:ppsStdCount must: be less than
+    or equal to the values of pname:maxSpsStdCount and pname:maxPpsStdCount,
+    respectively
+  * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-maxSpsStdCount-04838]]
+    When the pname:maxSpsStdCount 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-maxPpsStdCount-04839]]
+    When the pname:maxPpsStdCount 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.txt[]
+--
+
+
+=== Frame Encoding
+
+In order to encode a frame, add a slink:VkVideoEncodeH264VclFrameInfoEXT
+structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR
+structure passed to the flink:vkCmdEncodeVideoKHR command.
+
+[open,refpage='VkVideoEncodeH264VclFrameInfoEXT',desc='Structure specifies H.264 encode frame parameters',type='structs']
+--
+The structure slink:VkVideoEncodeH264VclFrameInfoEXT representing a frame
+encode operation is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264VclFrameInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:refDefaultFinalList0EntryCount is the default number of reference
+    List0 entries for all slices of this frame.
+    Each slice may: override this by providing its own List0 entries.
+  * pname:pRefDefaultFinalList0Entries is a pointer to an array of
+    slink:VkVideoEncodeH264DpbSlotInfoEXT structures providing information
+    for each reference List0 entry.
+    The entries provided must: be ordered after all reference List0
+    modification operations are applied (i.e. final list order).
+    The entires provided must: not reflect decoded picture marking
+    operations in this frame that are applicable to references; the impact
+    of such operations must: be reflected in future frame encode cmds.
+    The slot index in each entry must: match one of the slot indexes
+    provided in pname:pReferenceSlots of the slink:VkVideoEncodeInfoKHR
+    structure to which this structure is chained.
+  * pname:refDefaultFinalList1EntryCount is the default number of reference
+    List1 entries for all slices of this frame.
+    Each slice may: override this by providing its own List1 entries.
+  * pname:pRefDefaultFinalList1Entries is a pointer to an array of
+    slink:VkVideoEncodeH264DpbSlotInfoEXT structures providing information
+    related to each reference List1 entry.
+    The entries provided must: be ordered after all reference List1
+    modification operations are applied (i.e. final list order).
+    The entires provided must: not reflect decoded picture marking
+    operations in this frame that are applicable to references; the impact
+    of such operations must: be reflected in future frame encode cmds.
+    The slot index in each entry must: match one of the slot indexes
+    provided in pname:pReferenceSlots of the slink:VkVideoEncodeInfoKHR
+    structure to which this structure is chained.
+  * pname:naluSliceEntryCount is the number of NALUs in this frame.
+  * pname:pNaluSliceEntries is a pointer to an array of pname:naluCount
+    slink:VkVideoEncodeH264NaluSliceEXT structures that make up the frame.
+    This is an ordered sequence; the NALUs are generated consecutively in
+    the bitstream buffer (provided in pname:bitstreamBuffer in
+    slink:VkVideoBeginCodingInfoKHR) in the same order as in this array.
+  * pname:pCurrentPictureInfo is a pointer to a
+    slink:VkVideoEncodeH264DpbSlotInfoEXT structure specifying information
+    for the reconstructed picture for this frame.
+    Info provided must: reflect decoded picture marking operations in this
+    frame that are applicable to this frame.
+    The slot index in pCurrentPictureInfo must: match the slot index
+    provided in pname:pSetupReferenceSlot of slink:VkVideoEncodeInfoKHR
+    structure to which this structure is chained to.
+
+include::{generated}/validity/structs/VkVideoEncodeH264VclFrameInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH264DpbSlotInfoEXT',desc='Structure specifies H.264 encode DPB picture information',type='structs']
+--
+The slink:VkVideoEncodeH264DpbSlotInfoEXT structure correlates a DPB Slot
+index with codec-specific information and is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264DpbSlotInfoEXT.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:slotIndex is the slot index for this picture.
+    pname:slotIndex must: match the pname:slotIndex in
+    pname:pSetupReferenceSlot of slink:VkVideoEncodeInfoKHR in the command
+    used to encode the corresponding picture.
+  * pname:pStdPictureInfo is a pointer to a
+    code:StdVideoEncodeH264PictureInfo structure specifying codec standard
+    specific syntax/information associated with this picture from the H.264
+    specification.
+
+include::{generated}/validity/structs/VkVideoEncodeH264DpbSlotInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH264NaluSliceEXT',desc='Structure specifies H.264 encode slice NALU parameters',type='structs']
+--
+The structure slink:VkVideoEncodeH264NaluSliceEXT representing a slice is
+defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264NaluSliceEXT.txt[]
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pSliceHeaderStd is a pointer to a
+    code:StdVideoEncodeH264SliceHeader specifying the standard slice header
+    from the H.264 specification.
+  * pname:mbCount is the number of macroblocks in this slice.
+  * pname:refFinalList0EntryCount is the number of active references in
+    List0.
+    If zero, the default frame List0 provided in the enclosing
+    slink:VkVideoEncodeH264VclFrameInfoEXT is used.
+    If non-zero, it overrides the default frame List0 for this slice.
+  * pname:pRefFinalList0Entries is a pointer to a
+    slink:VkVideoEncodeH264DpbSlotInfoEXT specifying DPB information for the
+    active List0 references.
+    The same restrictions related to order of entries and decoded picture
+    marking operations described for List0 in
+    slink:VkVideoEncodeH264VclFrameInfoEXT apply here.
+  * pname:refFinalList1EntryCount is the number of active references in
+    List1.
+    If zero, the default frame List1 provided in the enclosing
+    slink:VkVideoEncodeH264VclFrameInfoEXT is used.
+    If non-zero, it overrides the default frame List1 for this slice.
+  * pname:pRefFinalList1Entries is a pointer to a
+    slink:VkVideoEncodeH264DpbSlotInfoEXT structure specifying DPB
+    information for the active List1 references.
+    The same restrictions related to order of entries and decoded picture
+    marking operations described for List1 in
+    slink:VkVideoEncodeH264VclFrameInfoEXT apply here.
+  * pname:precedingNaluBytes specifies the number of bytes consumed by
+    non-VCL NALUs inserted before this slice (not through this API).
+  * pname:minQp is the minimum quantization parameter when rate control is
+    enabled.
+  * pname:maxQp is the maximum quantization parameter when rate control is
+    enabled.
+
+ifdef::editing-notes[]
+[NOTE]
+.editing-note
+====
+TODO: move pname:precedingNaluBytes, pname:minQp, and pname:maxQP to the
+Frame/SliceRC struct?
+====
+endif::editing-notes[]
+
+When rate control is disabled, pname:minQp and pname:maxQp must: be set to
+the same QP value.
+
+include::{generated}/validity/structs/VkVideoEncodeH264NaluSliceEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH264EmitPictureParametersEXT',desc='Structure specifies H.264 encode SPS NALU insertion parameters',type='structs']
+--
+The structure slink:VkVideoEncodeH264EmitPictureParametersEXT is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH264EmitPictureParametersEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:spsId is the H.264 SPS ID for the H.264 SPS to insert in the
+    bitstream.
+    The SPS ID must: match the SPS provided in pname:spsStd of
+    slink:VkVideoEncodeH264SessionParametersCreateInfoEXT.
+    This is retrieved from the slink:VkVideoSessionParametersKHR object
+    provided in slink:VkVideoBeginCodingInfoKHR.
+  * pname:emitSpsEnable enables the emitting of the SPS structure with id of
+    pname:spsId.
+  * pname:ppsIdEntryCount is the number of entries in the
+    pname:ppsIdEntries.
+    If this parameter is `0` then no pps entries are going to be emitted in
+    the bitstream.
+  * pname:ppsIdEntries is a pointer to an array of H.264 PPS IDs for the
+    H.264 PPS to insert in the bitstream.
+    The PPS IDs must: match one of the IDs of the PPS(s) provided in
+    pname:pPpsStd of slink:VkVideoEncodeH264SessionParametersCreateInfoEXT
+    to identify the PPS parameter set to insert in the bitstream.
+    This is retrieved from the slink:VkVideoSessionParametersKHR object
+    provided in slink:VkVideoBeginCodingInfoKHR.
+
+include::{generated}/validity/structs/VkVideoEncodeH264EmitPictureParametersEXT.txt[]
+--
diff --git a/registry/vulkan/chapters/video_encode_h265_extensions.txt b/registry/vulkan/chapters/video_encode_h265_extensions.txt
new file mode 100644
index 0000000..b0b394f
--- /dev/null
+++ b/registry/vulkan/chapters/video_encode_h265_extensions.txt
@@ -0,0 +1,512 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[encode-h265]]
+== Encode H.265
+
+This 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 http://www.itu.int/rec/T-REC-H.265.
+
+
+=== H.265 encode profile
+
+An H.265 encode profile is specified by including the
+slink:VkVideoEncodeH265ProfileEXT structure in the pname:pNext chain of the
+slink:VkVideoProfileKHR structure when
+slink:VkVideoProfileKHR::pname:videoCodecOperation is
+ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT.
+
+[open,refpage='VkVideoEncodeH265ProfileEXT',desc='Structure specifying H.265 encode profile',type='structs']
+--
+The sname:VkVideoEncodeH265ProfileEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265ProfileEXT.txt[]
+
+  * pname:sType is the type of 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/VkVideoEncodeH265ProfileEXT.txt[]
+--
+
+
+=== 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
+H.265-specific capabilities for video encoding.
+
+The sname:VkVideoEncodeH265CapabilitiesEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265CapabilitiesEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:inputModeFlags is a bitmask of
+    elink:VkVideoEncodeH265InputModeFlagBitsEXT describing the command
+    buffer input granularities/modes supported by the implementation.
+  * pname:outputModeFlags is a bitmask of
+    elink:VkVideoEncodeH265OutputModeFlagBitsEXT describing the output
+    (bitstream size reporting) granularities/modes supported by the
+    implementation.
+  * pname:ctbSizes is a bitmask of elink:VkVideoEncodeH265CtbSizeFlagBitsEXT
+    describing the supported CTB sizes.
+  * pname:inputImageDataAlignment reports the alignment, in pixels, for the
+    width and height of the picture data within the images used in video
+    encoding.
+  * pname:maxNumL0ReferenceForP reports the maximum number of reference
+    pictures the implementation supports in the reference list L0 for P
+    pictures.
+  * pname:maxNumL0ReferenceForB reports 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:maxNumL1Reference 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:maxNumSubLayers reports the maximum number of sublayers.
+  * pname:qualityLevelCount is the number of quality levels supported.
+  * pname:stdExtensionVersion is a slink:VkExtensionProperties structure in
+    which the H.265 extension name and version supported by the
+    implementation are returned.
+
+include::{generated}/validity/structs/VkVideoEncodeH265CapabilitiesEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH265CapabilityFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265CapabilityFlagsEXT.txt[]
+
+tname:VkVideoEncodeH265CapabilityFlagsEXT is a bitmask type for setting a
+mask, but is currently reserved for future use.
+
+// ... a mask of zero or more elink:VkVideoEncodeH265CapabilityFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH265InputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH265InputModeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265InputModeFlagsEXT.txt[]
+
+tname:VkVideoEncodeH265InputModeFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH265InputModeFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH265InputModeFlagBitsEXT',desc='Video encode H.265 input modes',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH265CapabilitiesEXT::pname:inputModeFlags, indicating the
+commmand buffer input granularities supported by the implementation, are:
+
+include::{generated}/api/enums/VkVideoEncodeH265InputModeFlagBitsEXT.txt[]
+
+  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT indicates that a
+    single command buffer must: at least encode an entire frame.
+    Any non-VCL NALUs must: be encoded using the same command buffer as the
+    frame if ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT is not
+    supported.
+  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT indicates that a
+    single command buffer must: at least encode a single slice.
+    Any non-VCL NALUs must: be encoded using the same command buffer as the
+    first slice of the frame if
+    ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT is not supported.
+  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT indicates that a
+    single command buffer may: encode a non-VCL NALU by itself.
+
+An implementation must: support at least one of
+ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT or
+ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT.
+--
+
+[open,refpage='VkVideoEncodeH265OutputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH265OutputModeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265OutputModeFlagsEXT.txt[]
+
+tname:VkVideoEncodeH265OutputModeFlagsEXT is a bitmask type for setting a
+mask of zero or more elink:VkVideoEncodeH265OutputModeFlagBitsEXT.
+--
+
+[open,refpage='VkVideoEncodeH265OutputModeFlagBitsEXT',desc='Video encode H.265 output modes',type='enums']
+--
+Bits which may: be set in
+slink:VkVideoEncodeH265CapabilitiesEXT::pname:outputModeFlags, indicating
+the minimum bitstream generation commands that must: be included between
+each flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR pair
+(henceforth simply begin/end pair), are:
+
+include::{generated}/api/enums/VkVideoEncodeH265OutputModeFlagBitsEXT.txt[]
+
+  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT indicates that
+    calls to generate all NALUs of a frame must: be included within a single
+    begin/end pair.
+    Any non-VCL NALUs must: be encoded within the same begin/end pair if
+    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
+  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT indicates that each
+    begin/end pair must: encode at least one slice.
+    Any non-VCL NALUs must: be encoded within the same begin/end pair as the
+    first slice of the frame if
+    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
+  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT indicates that
+    each begin/end pair may: encode only a non-VCL NALU by itself.
+    An implementation must: support at least one of
+    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT or
+    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT.
+
+A single begin/end pair must: not encode more than a single frame.
+
+The bitstreams of NALUs generated within a single begin/end pair are written
+continuously into the same bitstream buffer (any padding between the NALUs
+must: be compliant to the H.265 standard).
+
+The supported input modes must: be coarser or equal to the supported output
+modes.
+For example, it is illegal to report slice input is supported but only frame
+output is supported.
+
+An implementation must: report one of the following combinations of
+input/output modes:
+
+  * Input: Frame, Output: Frame
+  * Input: Frame, Output: Frame and Non-VCL
+  * Input: Frame, Output: Slice
+  * Input: Frame, Output: Slice and Non-VCL
+  * Input: Slice, Output: Slice
+  * Input: Slice, Output: Slice and Non-VCL
+  * Input: Frame and Non-VCL, Output: Frame and Non-VCL
+  * Input: Frame and Non-VCL, Output: Slice and Non-VCL
+  * Input: Slice and Non-VCL, Output: Slice and Non-VCL
+--
+
+[open,refpage='VkVideoEncodeH265CtbSizeFlagsEXT',desc='Bitmask of VkVideoEncodeH265CtbSizeFlagBitsEXT',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265CtbSizeFlagsEXT.txt[]
+
+tname:VkVideoEncodeH265CtbSizeFlagsEXT is a bitmask type for setting a mask
+of zero or more elink: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.txt[]
+
+  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT specifies that a CTB size
+    of 8x8 is supported.
+  * 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.
+--
+
+
+=== Create Information
+
+[open,refpage='VkVideoEncodeH265SessionCreateInfoEXT', desc='Structure specifies H.265 encoder creation parameters', type='structs']
+--
+When creating a Video Session object with
+slink:VkVideoSessionCreateInfoKHR::pname:pVideoProfile->videoCodecOperation
+specified as ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, add a
+slink:VkVideoEncodeH265SessionCreateInfoEXT structure to the pname:pNext
+chain of the slink:VkVideoSessionCreateInfoKHR structure passed to
+flink:vkCreateVideoSessionKHR in order to specify the H.265-specific video
+encoder session creation parameters.
+
+The sname:VkVideoEncodeH265SessionCreateInfoEXT structure is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265SessionCreateInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
+    structure specifying the H.265 codec extension version.
+
+include::{generated}/validity/structs/VkVideoEncodeH265SessionCreateInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH265CreateFlagsEXT',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoEncodeH265CreateFlagsEXT.txt[]
+
+tname:VkVideoEncodeH265CreateFlagsEXT is a bitmask type for setting a mask,
+but is currently reserved for future use.
+--
+
+
+=== 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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:maxVpsStdCount is the maximum number of entries of type
+    code:StdVideoH265VideoParameterSet within
+    sname:VkVideoSessionParametersKHR.
+  * pname:maxSpsStdCount is the maximum number of entries of type
+    code:StdVideoH265SequenceParameterSet within
+    sname:VkVideoSessionParametersKHR.
+  * pname:maxPpsStdCount 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:maxVpsStdCount 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:maxSpsStdCount 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:maxPpsStdCount 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.txt[]
+--
+
+[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.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:vpsStdCount is the number of VPS elements in pname:pVpsStd.
+  * pname:pVpsStd is a pointer to an array of pname:vpsStdCount
+    code:StdVideoH265VideoParameterSet structures representing H.265 video
+    parameter sets.
+  * pname:spsStdCount is the number of SPS elements in pname:pSpsStd.
+  * pname:pSpsStd is a pointer to an array of pname:spsStdCount
+    code:StdVideoH265SequenceParameterSet structures representing H.265
+    sequence parameter sets.
+  * pname:ppsStdCount is the number of PPS elements in pname:pPpsStd.
+  * pname:pPpsStd is a pointer to an array of pname:ppsStdCount
+    code:StdVideoH265PictureParameterSet structures representing H.265
+    picture parameter sets.
+
+include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.txt[]
+
+.Valid Usage
+****
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-vpsStdCount-06438]]
+    The values of pname:vpsStdCount, pname:spsStdCount and pname:ppsStdCount
+    must: be less than or equal to the values of
+    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT::pname:maxVpsStdCount,
+    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxSpsStdCount,
+    and
+    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxPpsStdCount,
+    respectively
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pVpsStd-06439]]
+    Each code:StdVideoH265VideoParameterSet entry in pname:pVpsStd must:
+    have a unique H.265 VPS ID
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pSpsStd-06440]]
+    Each code:StdVideoH265SequenceParameterSet entry in pname:pSpsStd must:
+    have a unique H.265 VPS-SPS ID pair
+  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pPpsStd-06441]]
+    Each code:StdVideoH265PictureParameterSet entry in pname:pPpsStd 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
+****
+--
+
+
+=== Frame Encoding
+
+In order to encode a frame, add a slink:VkVideoEncodeH265VclFrameInfoEXT
+structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR
+structure passed to the flink:vkCmdEncodeVideoKHR command.
+
+[open,refpage='VkVideoEncodeH265VclFrameInfoEXT',desc='Structure specifies H.265 encode frame parameters',type='structs']
+--
+The structure slink:VkVideoEncodeH265VclFrameInfoEXT representing a frame
+encode operation is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265VclFrameInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:pReferenceFinalLists is `NULL` or a pointer to a
+    slink:VkVideoEncodeH265ReferenceListsEXT structure specifying the
+    reference lists to be used for the current picture.
+  * pname:naluSliceEntryCount is the number of slice NALUs in the frame.
+  * pname:pNaluSliceEntries is a pointer to an array of
+    slink:VkVideoEncodeH265NaluSliceEXT structures specifying the division
+    of the current picture into slices and the properties of these slices.
+  * pname:pCurrentPictureInfo 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/VkVideoEncodeH265VclFrameInfoEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH265NaluSliceEXT',desc='Structure specifies H.265 encode slice NALU parameters',type='structs']
+--
+The structure slink:VkVideoEncodeH265NaluSliceEXT representing a slice is
+defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265NaluSliceEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:ctbCount is the number of CTBs in this slice.
+  * pname:pReferenceFinalLists is `NULL` or a pointer to a
+    slink:VkVideoEncodeH265ReferenceListsEXT structure specifying the
+    reference lists to be used for the current slice.
+    If pname:pReferenceFinalLists is not `NULL`, these reference lists
+    override the reference lists provided in
+    slink:VkVideoEncodeH265VclFrameInfoEXT::pname:pReferenceFinalLists.
+  * pname:pSliceHeaderStd is a pointer to a
+    code:StdVideoEncodeH265SliceHeader structure specifying the slice header
+    for the current slice.
+
+include::{generated}/validity/structs/VkVideoEncodeH265NaluSliceEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH265DpbSlotInfoEXT',desc='Structure specifies H.265 encode decoded pic info',type='structs']
+--
+The structure slink:VkVideoEncodeH265DpbSlotInfoEXT, representing a
+reconstructed picture that is being used as a reference picture, is defined
+as:
+
+include::{generated}/api/structs/VkVideoEncodeH265DpbSlotInfoEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:slotIndex is the <<dpb-slot, DPB Slot>> index for this picture.
+  * 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.txt[]
+--
+
+[open,refpage='VkVideoEncodeH265ReferenceListsEXT',desc='Structure specifies H.265 reference frame lists',type='structs']
+--
+The structure slink:VkVideoEncodeH265ReferenceListsEXT representing
+reference lists is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265ReferenceListsEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:referenceList0EntryCount is the number of reference pictures in
+    reference list L0 and is identical to
+    code:StdVideoEncodeH265SliceHeader::pname:num_ref_idx_l0_active_minus1 + 1.
+  * pname:pReferenceList0Entries is a pointer to an array of
+    pname:referenceList0EntryCount slink:VkVideoEncodeH265DpbSlotInfoEXT
+    structures specifying the reference list L0 entries for the current
+    picture.
+  * pname:referenceList1EntryCount is the number of reference pictures in
+    reference list L1 and is identical to
+    code:StdVideoEncodeH265SliceHeader::pname:num_ref_idx_l1_active_minus1 + 1.
+  * pname:pReferenceList1Entries is a pointer to an array of
+    pname:referenceList1EntryCount slink:VkVideoEncodeH265DpbSlotInfoEXT
+    structures specifying the reference list L1 entries for the current
+    picture.
+  * pname:pReferenceModifications is a pointer to a
+    code:StdVideoEncodeH265ReferenceModifications structure specifying
+    reference list modifications.
+
+include::{generated}/validity/structs/VkVideoEncodeH265ReferenceListsEXT.txt[]
+--
+
+[open,refpage='VkVideoEncodeH265EmitPictureParametersEXT',desc='Structure specifies H.265 encode VPS NALU insertion parameters',type='structs']
+--
+The structure slink:VkVideoEncodeH265EmitPictureParametersEXT is defined as:
+
+include::{generated}/api/structs/VkVideoEncodeH265EmitPictureParametersEXT.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:vpsId is the H.265 VPS ID for the H.265 VPS to insert in the
+    bitstream.
+    The VPS ID must: match the VPS provided in pname:vpsStd of
+    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT.
+    This is retrieved from the slink:VkVideoSessionParametersKHR object
+    provided in slink:VkVideoBeginCodingInfoKHR.
+  * pname:spsId is the H.265 SPS ID for the H.265 SPS to insert in the
+    bitstream.
+    The SPS ID must: match one of the IDs of the SPS(s) provided in
+    pname:pSpsStd of slink:VkVideoEncodeH265SessionParametersCreateInfoEXT
+    to identify the SPS parameter set to insert in the bitstream.
+    This is retrieved from the slink:VkVideoSessionParametersKHR object
+    provided in slink:VkVideoBeginCodingInfoKHR.
+  * pname:emitVpsEnable enables the emitting of the VPS structure with id of
+    pname:vpsId.
+  * pname:emitSpsEnable enables the emitting of the SPS structure with id of
+    pname:spsId.
+  * pname:ppsIdEntryCount is the number of entries in the
+    pname:ppsIdEntries.
+    If this parameter is `0` then no pps entries are going to be emitted in
+    the bitstream.
+  * pname:ppsIdEntries is the H.265 PPS IDs for the H.265 PPS to insert in
+    the bitstream.
+    The PPS IDs must: match one of the IDs of the PPS(s) provided in
+    pname:pPpsStd of slink:VkVideoEncodeH265SessionParametersCreateInfoEXT
+    to identify the PPS parameter set to insert in the bitstream.
+    This is retrieved from the slink:VkVideoSessionParametersKHR object
+    provided in slink:VkVideoBeginCodingInfoKHR.
+
+include::{generated}/validity/structs/VkVideoEncodeH265EmitPictureParametersEXT.txt[]
+--
diff --git a/registry/vulkan/chapters/video_extensions.txt b/registry/vulkan/chapters/video_extensions.txt
new file mode 100644
index 0000000..7d597a0
--- /dev/null
+++ b/registry/vulkan/chapters/video_extensions.txt
@@ -0,0 +1,1657 @@
+// Copyright 2018-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[[video-decode-and-encode-operations]]
+= Video Decode and Encode Operations
+
+Vulkan implementations can: expose video decode and encode engines, which
+are independent from the graphics and compute engines.
+Video decode and encode is performed by recording video operations and
+submitting them to video decode and encode queues.
+Vulkan provides core support for video decode and encode and can: support a
+variety of video codecs through individual extensions built on the core
+video support.
+
+The subsections below detail the fundamental components and operation of
+Vulkan video.
+
+
+== Technical Terminology and Semantics
+
+
+[[video-picture-resources]]
+=== Video Picture Resources
+
+*Video Picture Resources* contain format information, can: be
+multidimensional and may: have associated metadata.
+The metadata can: include implementation-private details required for the
+decode or encode operations and application managed color-space related
+information.
+
+In Vulkan, a <<video-picture-resources,Video Picture Resource>> is
+represented by a slink:VkImage.
+The slink:VkImageView, representing the slink:VkImage, is used with the
+decode operations as <<decoded-output-picture,Output>> and <<dpb,Decoded
+Picture Buffer (DPB)>>, and with the encode operation as
+<<input-encode-picture,Input>> and <<reconstructed-pictures, Reconstructed>>
+<<video-picture-resources,Video Picture Resource>>.
+
+
+[[reference-picture]]
+=== Reference Picture
+
+Video *Reference Picture* is a <<video-picture-resources,Video Picture
+Resource>> that can: be used in the video decode or encode process to
+provide predictions of the values of samples in the subsequently decoded or
+encoded pictures.
+
+
+[[decoded-output-picture]]
+=== Decoded Output Picture
+
+The pixels resulting from the video decoding process are stored in a
+*Decoded Output Picture*, represented by a slink:VkImageView.
+This can: be shared with the <<dpb, Encoder Reconstructed or Decoder DPB>>
+<<video-picture-resources,Video Picture Resources>>.
+It can: also be used as an input for Video Encode, Graphics, Compute
+processing, or WSI presentation.
+
+
+[[input-encode-picture]]
+=== Input Picture to Encode
+
+The primary source of input pixels for the video encoding process is the
+*Input Picture to Encode*, represented by a slink:VkImageView.
+This can: be shared with the <<dpb, Encoder Reconstructed or Decoder DPB>>
+<<video-picture-resources,Video Picture Resources>>.
+It can: be a direct target of Video Decode, Graphics, Compute processing, or
+WSI presentation.
+
+
+[[dpb]]
+=== Decoded Picture Buffer (DPB)
+
+Previously decoded pictures are used by video codecs to provide predictions
+of the values of samples in the subsequently decoded pictures.
+At the decoder, such <<video-picture-resources,Video Picture Resources>> are
+stored in a *Decoded Picture Buffer (DPB)* as an indexed set of
+<<reference-picture,Reference Pictures>>.
+
+
+[[reconstructed-pictures]]
+=== Reconstructed Pictures
+
+An integral part of the video decoding pipeline is the reconstruction of
+pictures from the compressed stream.
+A similar stage exists in the video encoding pipeline as well.
+Such reconstructed pictures may: be used as <<reference-picture,Reference
+Pictures>> for subsequently decoded or encoded pictures.
+The correct use of such <<reference-picture,Reference Pictures>> is driven
+by the video compression standard, the implementation, and the
+application-specific use cases.
+
+This specification refers to the collection of the *Decoded Picture Buffer*
+and *Reconstructed Pictures* as <<dpb, Decoded Picture Buffer (DPB) Set>>,
+or only, *DPB*.
+
+
+[[dpb-slot]]
+=== Decoded Picture Buffer (DPB) Slot
+
+*Decoded Picture Buffer (DPB) Slot* represents a single or multi-layer
+indexed <<reference-picture,Reference Picture's>> entry within the
+<<video-session, Video Session's>> <<dpb,DPB Set>>.
+A valid <<dpb-slot,DPB Slot>> index starts from zero and goes up to the
+maximum of *N* - 1, where *N* is the number of <<reference-picture,Reference
+Picture>> entries requested for a <<video-session, Video Session>>.
+
+
+[[reference-metadata]]
+=== Reference Picture Metadata
+
+The opaque <<dpb-slot,DPB Slot>> state managed by the implementation may:
+contain *Reference Picture Metadata*, present when the
+<<video-picture-resources,picture resource>> associated with the
+<<dpb-slot,DPB Slot>> is used as a <<reference-picture,reference picture>>
+in one or more video decode or encode operations.
+
+An implementation or application may: have other Picture Metadata related to
+the Video Picture Resource or the DPB Slot, but such data is outside the
+scope of this specification.
+
+[NOTE]
+.Note:
+====
+The video decode or encode implementation does not maintain internal
+references to the <<reference-picture,Reference Pictures>>, beyond the
+<<reference-metadata,Reference Picture Metadata>>.
+It is the responsibility of the Vulkan Application to create, manage, and
+destroy, as well as to provide those Video Picture Resources, when required,
+during the decoding or encoding process.
+====
+
+
+[[color-space-metadata]]
+=== Color Space Metadata
+
+*Color Space Metadata* is the additional static or dynamic state associated
+with a <<video-picture-resources,Video Picture Resource>> specifying the
+color volume (the color primaries, white point, and luminance range) of the
+display that was used in mastering the video content.
+The use of *Color Space Metadata* is outside the scope of the current
+version of the video core specification.
+
+
+== Introduction
+
+This chapter discusses extensions supporting Video Decode or Encode
+operations.
+Video Decode and Encode operations are supported by queues with an
+advertised queue capability of ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR and
+ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR, respectively.
+Video Decode or Encode queue operation support allows for Vulkan
+applications to cooperate closely with other graphics or compute operations
+seamlessly and efficiently, therefore improving the overall application
+performance.
+
+
+[[video-decode-queue]]
+=== Video Decode Queue
+
+`apiext:VK_KHR_video_decode_queue` adds a video decode queue type bit
+ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR to elink:VkQueueFlagBits.
+As in the case of other queue types, an application must: use
+flink:vkGetPhysicalDeviceQueueFamilyProperties to query whether the physical
+device has support for the Video Decode Queue.
+When the implementation reports the ename:VK_QUEUE_VIDEO_DECODE_BIT_KHR bit
+for a queue family, it advertises general support for Vulkan queue
+operations described in <<devsandqueues, Devices and Queues>>.
+
+
+[[video-encode-queue]]
+=== Video Encode Queue
+
+`apiext:VK_KHR_video_encode_queue` adds a video encode queue type bit
+ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR to elink:VkQueueFlagBits.
+As in the case of other queue types, an application must: use
+flink:vkGetPhysicalDeviceQueueFamilyProperties to query whether the physical
+device has support for the Video Encode Queue.
+When the implementation reports the ename:VK_QUEUE_VIDEO_ENCODE_BIT_KHR bit
+for a queue family, it advertises general support for Vulkan queue
+operations described in <<devsandqueues, Devices and Queues>>.
+
+The rest of the chapter focuses, specifically, on Video Decode and Encode
+queue operations.
+
+
+[[video-session-introduction]]
+=== Video Session
+
+Before performing any video decoding or encoding operations, the application
+must: create a <<video-session,Video Session>> instance, of type
+slink:VkVideoSessionKHR.
+A <<video-session,Video Session>> instance is an immutable object and
+supports a single compression standard (for example, H.264, H.265, VP9, AV1,
+etc.).
+The implementation uses the slink:VkVideoSessionKHR object to maintain the
+video state for the video decode or video encode operation.
+A <<video-session,Video Session>> instance is created specifically:
+
+  * For a particular video compression standard;
+  * For video decoding or video encoding;
+  * With maximum supported decoded or encoded picture width/height;
+  * With the maximum number of supported <<dpb,DPB>> or
+    <<reconstructed-pictures,Reconstructed Pictures>> slots that can be
+    allocated;
+  * With the maximum number of <<reference-picture,Reference Pictures>> that
+    can: be used simultaneously for video decode or encode operations;
+  * Codec color and features profile;
+  * Color Space format description (not supported with this version of the
+    specification);
+
+slink:VkVideoSessionKHR represents a single video decode or encode stream.
+For each concurrently used stream, a separate instance of
+slink:VkVideoSessionKHR is required.
+After the application has finished with the processing of a stream, it can
+reuse the <<video-session,Video Session>> instance for another, provided
+that the configuration parameters between the two usages are compatible (as
+determined by the video compression standard in use).
+Once the slink:VkVideoSessionKHR instance has been created, the video
+compression standard and profiles, <<input-encode-picture,Input>> /
+<<decoded-output-picture,Output>> / <<dpb,DPB>> formats, and the settings
+like the maximum extent cannot: be changed.
+
+The values of the following slink:VkVideoSessionKHR parameters can: be
+updated each frame, subject to the restrictions imposed on parameter updates
+by the video compression standard in use:
+
+  * decoded or encoded picture size
+  * number of active <<dpb,DPB>> or <<reconstructed-pictures,Reconstructed
+    Picture>> slots
+  * number of <<reference-picture,Reference Pictures>> in use,
+  * color space and color space metadata
+  * color space metadata.
+
+The updated parameters must: not exceed the maximum limits specified when
+creating the slink:VkVideoSessionKHR instance.
+
+
+[[video-session-device-memory-heaps]]
+=== Video Session Device Memory Heaps
+
+After creating a <<video-session,Video Session>> instance, and before the
+object can be used for any of the decode or encode operations, the
+application must: allocate and bind device memory resources to the Video
+Session object.
+An implementation may: require one or more device memory heaps of different
+memory types, as reported by the
+flink:vkGetVideoSessionMemoryRequirementsKHR function, to be bound with the
+flink:vkBindVideoSessionMemoryKHR function to the <<video-session,Video
+Session>>, For more information about the *Video Session Device Memory*,
+please refer to the <<binding-session-memory, Binding the Session Object
+Device Memory>> section, below.
+
+
+[[video-session-parameters-introduction]]
+=== Video Session Parameters
+
+A lot of codec standards require parameters that are in use for the entire
+video stream.
+For example, H.264/AVC and HEVC standards require sequence and picture
+parameter sets (SPS and PPS) that apply to multiple Video Decode and Encode
+frames, layers, and sub-layers.
+Vulkan Video uses <<video-session-parameters,Video Session Parameters>>
+objects to store such standard parameters.
+The application creates one or more <<video-session-parameters,Video Session
+Parameters>> Objects against a <<video-session,Video Session>>, with a set
+of common Video Parameters that are required for the processing of the video
+content.
+During the object creation, the implementation stores the parameters to the
+created instance.
+During command buffer recording, it is the responsibility of the application
+to provide the <<video-session-parameters,Video Session Parameters>> object
+containing the parameters that are necessary for the processing the portion
+of the stream under consideration.
+
+
+[[video-picture-subresources]]
+=== Video Picture Subresources
+
+For <<video-picture-resources,Video Picture Resources>>, an application has
+the option to use single or multi-layer <<VkImage,images>> for
+<<resources-image-views,image views>>.
+The layer to be used during decode or encode operations can: be specified
+when the <<VkImageView,image view>> is being created with the
+slink:VkImageSubresourceRange::pname:baseArrayLayer parameter, and/or within
+the resource binding operations in command buffer by using the
+slink:VkVideoPictureResourceKHR::pname:baseArrayLayer parameter.
+
+[NOTE]
+.Note:
+====
+Both Video Decode and Encode operations only work with a single layer at the
+time.
+====
+
+The <<resources-image-views, Image views>> representing the
+<<input-encode-picture,Input>> / <<decoded-output-picture,Output>> /
+<<dpb,DPB>> <<video-picture-resources,Video Picture Resources>> could have
+been created with sizes bigger than the coded size that is used with Video
+Decode and Encode operations.
+This allows for the same Video Picture Resources to be reused when there is
+a change in the input video content resolution.
+The effective coded size of the <<video-picture-resources,Video Picture
+Resources>> used for Video Decode and Encode operations is provided with
+slink:VkVideoPictureResourceKHR::pname:extent parameter of each resource in
+use.
+
+[NOTE]
+.Note:
+====
+Many codec standards require the coded and <<video-picture-resources,Video
+Picture Resources'>> sizes to match.
+====
+
+
+[[dpb-picture-resources]]
+==== Video Session <<dpb,DPB and Reconstructed>> Video Picture Resources
+
+The video compression standard chosen may: require the use of
+<<reference-picture,Reference Pictures>>.
+In Vulkan Video, like any other <<video-picture-resources,Video Picture
+Resources>>, the <<reference-picture,Reference Pictures>> are represented
+with <<resources-image-views, Image Views>>.
+
+When an application requires <<reference-picture,Reference Picture
+Resources>>, it creates and then associates <<VkImageView,image views>>,
+representing these resources, with Video Session <<dpb-slot,DPB or
+Reconstructed slots>> while recording the command buffer.
+
+<<decoded-output-picture, Decoded output pictures>> may: be used as
+<<reference-picture,reference pictures>> in future video decode operations.
+The same pictures may: be used in texture sampling operations or in the
+(WSI) presentation pipeline.
+Representing the <<dpb-slot,DPB's Video Picture Resources>> by
+<<VkImageView,image views>> makes it possible to accommodate all these use
+cases in a "`zero-copy`" fashion.
+Also, it provides more fine-grained control of the application over the
+efficient usage of the DPB and Reconstructed <<VkDeviceMemory,Device Memory
+Resources>>.
+
+
+[[video-session-dpb-slot-resource-management]]
+==== Video Session <<dpb-slot,DPB and Reconstructed Slot>> Resource Management
+
+Before <<dpb-picture-resources, Video Picture Resources>> can be used as
+<<reference-picture,Reference Picture Resources>>, Video Session
+<<dpb-slot,DPB or Reconstructed Slots>> must: be associated with those
+resources.
+
+The application allocates a <<dpb-slot,DPB or Reconstructed Slot>> and
+associates it with a <<video-picture-resources,Video Picture Resource>> and
+then sets up the resource as a target of decode or encode operation.
+After successfully decoding or encoding a picture with the targeted
+<<dpb-slot,DPB or Reconstructed Slot>> , in addition to the
+<<reference-picture,Reference Picture>> pixel data, the implementation may:
+generate an opaque <<reference-metadata,Reference Picture Metadata>> for
+that video session Slot and its associated <<video-picture-resources,Video
+Picture Resource>>.
+
+Subsequently, one or more <<dpb-slot,DPB or Reconstructed video session
+Slots>>, along with their associated <<video-picture-resources,Video Picture
+Resources>>, can: be used as <<reference-picture,Reference Picture's>>
+source for the video decode or encode operations.
+
+If <<reference-picture,Reference Pictures>> were to be required for decoding
+or encoding of the video bitstream, the
+slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
+must: be set to a value bigger than `0` when the instance of the
+<<video-session,Video Session>> object is created.
+
+Up to
+slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
+slots can: be activated with <<video-picture-resources,Video Picture
+Resources>> for a video session and up to
+slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesActiveCount
+active slots can: be used as DPB or Reconstructed
+<<reference-picture,Reference Pictures>> within a single decode or encode
+operation.
+
+When the implementation is associating <<reference-metadata,Reference
+Picture Metadata>> with the <<video-picture-resources,Video Picture
+Resources>> themselves, such data must: be independent of the
+<<video-session,Video Session>> to allow for those
+<<video-picture-resources,Video Picture Resources>> to be shared with other
+Video Session instances.
+All of the <<video-session,Video Session>>-dependent
+<<reference-metadata,Reference Picture Metadata>> must: only be associated
+with the <<video-session,Video Session>> <<dpb-slot,DPB or Reconstructed
+Slots>>.
+
+The application with the help of the implementation is responsible for
+managing the individual <<dpb-slot,DPB, or Reconstructed Slots>> that belong
+to a single <<video-session,Video Session>> <<dpb,DPB set>>:
+
+  * The application maintains the Slot allocation and per-slot
+    <<reference-picture,Reference Picture>>
+    <<video-picture-resources,Resources>>;
+  * Implementation maintains global and per-slot opaque
+    <<reference-metadata,Reference Picture Metadata>>;
+
+The application also manages the mapping between the codec-specific picture
+IDs and <<dpb-slot,DPB Slots>>.
+
+When a Video Picture is decoded and is set as a
+<<reference-picture,Reference Picture>> against a Video Session
+<<dpb-slot,DPB Slot>>, or is encoded and a Reconstructed Video Picture
+Resource is associated with a Video Session <<dpb-slot,DPB Slot>> then:
+
+  * The <<video-picture-resources,Video Picture Resource>> associated with
+    the Slot is filled with the decoded or reconstructed pixel data;
+  * The implementation generates the <<dpb-slot,DPB Slot's>>
+    <<reference-metadata,Reference Picture Metadata>>;
+
+When a <<dpb-slot,DPB's Slot>> is deactivated, or a different
+<<video-picture-resources,Video Picture Resource>> is used with the Slot, or
+the content of the <<video-picture-resources,Video Picture Resource>> is
+modified, the <<reference-metadata,Reference Picture Metadata>> associated
+with the <<dpb-slot,DPB Slot>> gets invalidated by the implementation.
+Subsequent attempts to use such, invalidated, <<dpb,DPB>> Slot as a
+<<reference-picture,Reference>> source would produce undefined: results.
+
+
+[[video-session-dpb-picture-size-changes]]
+==== Video Session <<dpb-slot,DPB Slot>> subresources
+
+DPB <<reference-picture,Reference Picture's>> coded width and height can:
+change, dynamically, via slink:VkVideoPictureResourceKHR::pname:extent, and
+the picture parameters from the codec-specific extensions.
+When a <<dpb-slot,DPB Slot>> is activated as a <<reference-picture,Reference
+Picture>> and a decode or encode operation is performed against that slot,
+the coded extent can: be recorded by the implementation to the corresponding
+<<dpb-slot,DPB Slot's>> metadata state.
+Subsequently, when the <<reference-picture,Reference Pictures>> are used
+with the decoded <<decoded-output-picture, Output>> or encoded
+<<input-encode-picture, Input Picture>>, their coded extent can differ.
+Decoding or encoding pictures, using picture sizes, different from the
+previously produced <<reference-picture,Reference Pictures>> should: be used
+with care, not to conflict with the codec standard and the implementation's
+support for that.
+It is the responsibility of the application to ensure that valid <<dpb,DPB
+Set>> of <<reference-picture,Reference Pictures>> are in use, according to
+the codec standard.
+
+In addition, the <<video-picture-resources,Video Picture Resources>> extent
+cannot: exceed the slink:VkVideoSessionCreateInfoKHR::pname:maxCodedExtent.
+
+[NOTE]
+.Note:
+====
+Coding Standards such as VP9 and AV1 allow for images with different sizes
+to be used as <<reference-picture,Reference Pictures>>.
+Others, like H.264 and H.265, do not support <<reference-picture,Reference
+Pictures>> with different sizes.
+Using <<reference-picture,Reference Pictures>> with incompatible sizes with
+such standards would render undefined: results.
+====
+
+
+[[video-resource-management-by-application]]
+==== The application is in control of the allocation and use of the system resource
+
+In Vulkan Video, the application has complete control over how and when
+system resources are used.
+The Vulkan Video framework provides the following tools to ensure that
+device and host memory resources are used in an optimal way:
+
+  * The video application can: allocate or destroy the number of allocated
+    <<decoded-output-picture, Output>> or <<input-encode-picture, Input>>
+    Pictures, and can: grow, or shrink the DPB set of
+    <<reference-picture,Reference Pictures>>, dynamically, based on the
+    changing video content requirement.
+  * <<reference-picture,Reference Pictures>> can: be shared with the decoded
+    <<decoded-output-picture, Output>> or encoded <<input-encode-picture,
+    Input>> pictures.
+  * The application can: use <<sparsememory, sparse memory>> for the
+    <<VkImage,images>>, representing <<video-picture-resources,Video Picture
+    Resources>>.
+    The use of sparse memory would allow the application to remove the
+    <<VkDeviceMemory,Device Memory>> backing of the <<resources-images,
+    image resources>> when the <<dpb-slot,DPB Slot>> is not in active use.
+    Furthermore, if the <<features-sparseResidency,sparse residency
+    feature>> is supported by the implementation (see <<sparsememory,Sparse
+    Resources>>), then <<VkImage,images>> can be, partially, bound with the
+    resource memory.
+    This feature is particularly important when using video content with a
+    significant change of decoded or encoded resolution.
+  * If the implementation supports <<VkImage,image arrays>>, and
+    <<sparsememory, sparse memory resources>>, then the application can:
+    remove the <<VkDeviceMemory,Device Memory>> backing of <<VkImage,image
+    array>> layers that are not used by any <<dpb-slot,DPB Slots>>.
+
+
+[[video-session-dpb-binding-reconstructed-slot]]
+==== Using DPB and Reconstructed Slot's Associated Resources
+
+Before a <<dpb-slot,DPB Slot>> is to become *Valid* for use with a
+<<reference-picture,Reference Picture>>, it requires memory resources to be
+bound to it.
+
+Some of the memory resources required for the <<dpb-slot,DPB Slot>>, are
+opaquely managed by the implementation and, internally, allocated from the
+<<video-session-device-memory-heaps,Session's Device Memory Heaps>>.
+The application provides the <<resources-images, image resources>> of one or
+more <<reference-picture,Reference Pictures>>, in the
+slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots as part of the
+flink:vkCmdBeginVideoCodingKHR command.
+
+If a <<dpb-slot,DPB Slot>> was already used with an <<resources-image-views,
+image view>>, and a new image view or a dlink:VK_NULL_HANDLE handle is used
+with that Slot, then the <<dpb-slot,DPB Slot's>> state will be invalidated
+by the implementation.
+If a <<dpb-slot,DPB Slot>> were to be reused with the same
+<<resources-image-views, image view>>, the state of the Slot would not
+change.
+
+
+[[video-session-activating-dpb-slot]]
+==== Video Session Activating DPB Slot as a Reference
+
+Before a <<dpb-slot,DPB Slot>> is to be used for a
+<<reference-picture,Reference Pictures>> index, it must: be activated.
+The activation of a <<dpb-slot,DPB Slot>> is done within the
+flink:vkCmdDecodeVideoKHR command's
+slink:VkVideoDecodeInfoKHR::pname:slotIndex field for the decode operations,
+and within the flink:vkCmdEncodeVideoKHR command's
+slink:VkVideoEncodeInfoKHR::pname:slotIndex field for the encode operations.
+
+While activating a Slot for DPB, it must: already have an associated
+<<resources-image-views, image view>>, within the
+slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots in the
+flink:vkCmdBeginVideoCodingKHR command and <<VkDeviceMemory,Device Memory>>
+backing of the the <<resources-images, image resources>> must: be resident.
+
+When a <<dpb-slot,DPB Slot>> were to be activated, the
+slink:VkVideoDecodeInfoKHR::pname:slotIndex for decode, or
+slink:VkVideoDecodeInfoKHR::pname:slotIndex for encode, must: be set to the
+application's allocated <<dpb-slot,DPB Slot's index>>.
+When activating a <<dpb-slot,DPB Slot>>, the application will perform a
+decode or encode operation against its Slot's index in order to enable its
+state as a *Valid Picture Reference*.
+If a <<dpb-slot,DPB Slot>> is activated, but a decode or encode operation is
+not performed against that Slot's index, or the decode or encode operation
+was unsuccessful, then the <<dpb-slot,DPB Slot>> would remain in the
+*Invalid Picture Reference* state (see below the
+<<video-session-dpb-slot-states,DPB Slot States>>).
+
+By just providing a <<video-picture-resources,Video Picture Resources>> for
+a <<dpb-slot,DPB Slot>> within the
+slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots, and without
+successfully performing a decode or encode operation against that Slot, the
+<<dpb-slot,DPB Slot's>> state cannot: be changed to *Valid Picture
+Reference*.
+If the <<dpb-slot,DPB Slots>> were already in *Valid Picture Reference*, and
+there is no <<video-picture-resources,Video Picture Resources>> associated
+with the <<dpb-slot,DPB Slot>> for a decode or encode operation, the state
+<<dpb-slot,DPB Slot>> would not change.
+However, if an application is referring to a valid <<dpb-slot,DPB Slot>> in
+its current decode or encode operations, then a valid
+<<resources-image-views, image view>> must: be provided for that Slot within
+slink:VkVideoPictureResourceKHR::pname:imageViewBinding for that decode or
+encode operation.
+
+
+[[video-session-invalidating-dpb-slot]]
+==== Video Session Invalidating DPB Slot's Reference State
+
+When a <<dpb-slot,DPB Slot>> is invalidated, its state is set to *Invalid
+Picture Reference*.
+Using a <<dpb-slot,DPB Slot>> as a <<reference-picture,Reference Picture>>
+index for video decode or encode operations while the Slot is in *Invalid
+Picture Reference* state would render undefined: results.
+
+
+[[video-session-dpb-slot-states]]
+==== Video Session <<dpb,DPB>> Slot States
+
+To help understand the valid use of the <<video-session,Video Session>>
+<<dpb,DPB>> and its resource management, this section aims to explain the
+different states and correct usage of <<dpb-slot,DPB Slots>>.
+
+There are four (4) states that a <<dpb-slot,DPB Slot>> could be in:
+
+  * Picture Reference Unused;
+  * Invalid Picture Reference;
+  * Updating Picture Reference;
+  * Valid Picture Reference;
+
+The different states are outlined within the
+<<video-session-dpb-slot-states-table,DPB Slot States>> and
+<<video-session-dpb-slot-states-flow-diagram, DPB Slot States Flow Diagram>>
+below.
+
+All DPB Slot management operations are performed via the
+slink:VkVideoDecodeInfoKHR::pname:slotIndex or
+slink:VkVideoEncodeInfoKHR::pname:slotIndex field.
+
+All DPB resource binding, invalidating, and activating Slot management
+operations are performed, by the implementation, *before* the decoding or
+encoding commands, based on the slink:VkVideoDecodeInfoKHR::pname:slotIndex
+or slink:VkVideoEncodeInfoKHR::pname:slotIndex field and the entries from
+the slink:VkVideoBeginCodingInfoKHR::pname:pReferenceSlots.
+The application cannot: move a DPB Slot from a *Picture Reference Unused* to
+*Updating Picture Reference* state, implicitly, within a decode or encode
+command operation.
+Such a DPB Slot must: first be transitioned to an *Invalid Picture
+Reference* state using slink:VkVideoDecodeInfoKHR::pname:slotIndex or
+slink:VkVideoEncodeInfoKHR::pname:slotIndex, as part of a decode command.
+For more details, see <<video-picture-decode-modes, Video Picture Decode
+Modes>>.
+
+When using <<sparsememory, sparse memory resources>>, it would be acceptable
+and valid behavior for the application to unbind the memory while the DPB
+Slot is any of the DPB Slot states, provided the command buffers, in a
+<<commandbuffers-lifecycle, pending state>>, do not reference any such
+<<video-picture-resources,Video Picture Resources>>.
+
+Accessing <<sparsememory-accessing-unbound, unbound regions>> of the
+<<sparsememory, sparse memory resources>> by the decoder or encoder,
+regardless if those are used as <<decoded-output-picture,Output>>,
+<<input-encode-picture,Input>>, <<dpb,DPB>> or
+<<reconstructed-pictures,Reconstructed>> <<video-picture-resources,Video
+Picture Resources>>, would render undefined: results.
+The slink:VkPhysicalDeviceSparseProperties::pname:residencyNonResidentStrict
+property reported by the implementation does not offer guarantees on the
+behavior of decode or encode operations when it comes to accessing
+<<sparsememory-accessing-unbound, unbound regions>>.
+However, both reads and writes are still considered safe and will not affect
+other resources or populated regions of the image.
+
+[[video-session-dpb-slot-states-table]]
+.Video Session <<dpb-slot,DPB Slot>> States
+[cols="10%h,30%,50%,10%",options="header"]
+|====
+| <<dpb-slot,DPB Slot>> State | Moving to <<dpb-slot,DPB Slot>> State | Exiting <<dpb-slot,DPB Slot>> State | Retain Video Picture Resource Memory
+
+| *Picture Reference Unused* |
+* Bind Device Memory; +
+* Reset decode or encode state; +
+* Invalidate, delete or unbind memory of a Picture Reference associated with Reference DPB Slot |
+* Activate Reference DPB Slot -> *Invalid Picture Reference* |
+Application Controlled
+
+| *Invalid Picture Reference* |
+* Activate Reference DPB Slot; +
+* Unsuccessful video decode or encode operation; |
+* Start decode or encode operation with an active Reference DPB Slot target -> *Updating Picture Reference*; +
+* Updating a Picture Resource outside the decoder or encoder or deleting or removing the memory binding(sparse) -> *Picture Reference Unused*; |
+Application Controlled
+
+| *Updating Picture Reference* |
+Start decode or encode operation with an active Reference DPB Slot target; |
+Decode or encode operation with an active Reference DPB Slot target Completed Successfully -> *Valid Picture Reference*; +
+Unsuccessful video decode or encode operation -> *Invalid Picture Reference* |
+Yes
+
+| *Valid Picture Reference* |
+Video decode or encode operation with an active Reference DPB Slot target Completed Successfully; |
+* Replace Reference DPB Slot -> *Invalid Picture Reference*; +
+* Invalidate, delete or unbind memory of a Picture Reference of the Reference DPB Slot -> *Picture Reference Unused*; |
+Yes
+|====
+
+[[video-session-dpb-slot-states-flow-diagram]]
+image::images/VideoDecodeSessionDpbStates.svg[align="center",title="DPB Slot States Flow Diagram",opts="{imageopts}"]
+
+
+[[video-physical-device-capabilities]]
+== Video Physical Device Capabilities
+
+
+[[supported-video-codec-operations-enumeration]]
+=== Supported Video Codec Operations Enumeration
+
+The structure slink:VkVideoQueueFamilyProperties2KHR may: be chained to
+slink:VkQueueFamilyProperties2 when calling
+flink:vkGetPhysicalDeviceQueueFamilyProperties2 to retrieve the video codec
+operations supported for the physical device queue family index.
+
+[open,refpage='VkVideoQueueFamilyProperties2KHR',desc='Structure specifying the codec video operations',type='structs']
+--
+The slink:VkVideoQueueFamilyProperties2KHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoQueueFamilyProperties2KHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:videoCodecOperations is a bitmask of
+    elink:VkVideoCodecOperationFlagBitsKHR specifying supported video codec
+    operation(s).
+
+include::{generated}/validity/structs/VkVideoQueueFamilyProperties2KHR.txt[]
+--
+
+[open,refpage='VkVideoCodecOperationFlagBitsKHR',desc='Video codec operation types',type='enums']
+--
+The codec operations are defined with the
+elink:VkVideoCodecOperationFlagBitsKHR enum:
+
+include::{generated}/api/enums/VkVideoCodecOperationFlagBitsKHR.txt[]
+
+Each decode or encode codec-specific extension extends this enumeration with
+the appropriate bit corresponding to the extension's codec operation:
+
+  * ename:VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR - No video operations are
+    supported for this queue family.
+ifdef::VK_EXT_video_encode_h264[]
+  * ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT - H.264 video encode
+    operations are supported by this queue family.
+endif::VK_EXT_video_encode_h264[]
+ifdef::VK_EXT_video_decode_h264[]
+  * ename:VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT - H.264 video decode
+    operations are supported by this queue family.
+endif::VK_EXT_video_decode_h264[]
+ifdef::VK_EXT_video_decode_h265[]
+  * ename:VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT - H.265 video decode
+    operations are supported by this queue family.
+endif::VK_EXT_video_decode_h265[]
+--
+
+[open,refpage='VkVideoCodecOperationFlagsKHR',desc='Bitmask specifying the Video codec operations supported',type='flags']
+--
+include::{generated}/api/flags/VkVideoCodecOperationFlagsKHR.txt[]
+
+tlink:VkVideoCodecOperationFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoCodecOperationFlagBitsKHR.
+--
+
+
+[[video-profiles]]
+=== Video Profiles
+
+[open,refpage='VkVideoProfileKHR',desc='Structure specifying the codec video profile',type='structs']
+--
+A video profile is defined by slink:VkVideoProfileKHR structure as:
+
+include::{generated}/api/structs/VkVideoProfileKHR.txt[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkVideoProfileKHR.txt[]
+--
+
+[open,refpage='VkVideoChromaSubsamplingFlagBitsKHR',desc='Video chroma subsampling',type='enums']
+--
+The video format chroma subsampling is defined with the following enums:
+
+include::{generated}/api/enums/VkVideoChromaSubsamplingFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR - the format is
+    monochrome.
+  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR - the format is 4:2:0
+    chroma subsampled.
+    The two chroma components are each subsampled at a factor of 2 both
+    horizontally and vertically.
+  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR - the format is 4:2:2
+    chroma subsampled.
+    The two chroma components are sampled at half the sample rate of luma.
+    The horizontal chroma resolution is halved.
+  * ename:VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR - the format is 4:4:4
+    chroma sampled.
+    Each of the three YCbCr components have the same sample rate, thus there
+    is no chroma subsampling.
+--
+
+[open,refpage='VkVideoChromaSubsamplingFlagsKHR',desc='Bitmask specifying the Video format chroma subsampling',type='flags']
+--
+include::{generated}/api/flags/VkVideoChromaSubsamplingFlagsKHR.txt[]
+
+tlink:VkVideoChromaSubsamplingFlagsKHR is a bitmask type for setting a mask
+of zero or more elink:VkVideoChromaSubsamplingFlagBitsKHR.
+--
+
+[open,refpage='VkVideoComponentBitDepthFlagBitsKHR',desc='Video component bit depth',type='enums']
+--
+The video format component bit depth is defined with the following enums:
+
+include::{generated}/api/enums/VkVideoComponentBitDepthFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR - the format component bit
+    depth is 8 bits.
+  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR - the format component bit
+    depth is 10 bits.
+  * ename:VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR - the format component bit
+    depth is 12 bits.
+--
+
+[open,refpage='VkVideoComponentBitDepthFlagsKHR',desc='Bitmask specifying the Video format component bit depth',type='flags']
+--
+include::{generated}/api/flags/VkVideoComponentBitDepthFlagsKHR.txt[]
+
+tlink:VkVideoComponentBitDepthFlagsKHR is a bitmask type for setting a mask
+of zero or more elink:VkVideoComponentBitDepthFlagBitsKHR.
+--
+
+A video profile is provided when querying capabilities or image formats for
+video using flink:vkGetPhysicalDeviceVideoCapabilitiesKHR or
+flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR, respectively.
+A video profile is also provided when creating resources (images, video
+sessions, etc.) used by video queues.
+Each instance of slink:VkVideoProfileKHR must: chain a codec-operation
+specific video profile extension structure, corresponding to the
+codec-operation specified in
+slink:VkVideoProfileKHR::pname:videoCodecOperation.
+Additional information is provided in each codec-operation-specific video
+extension.
+
+
+[[supported-video-decode-or-encode-capabilities]]
+=== Supported Video Decode or Encode Capabilities
+
+[open,refpage='vkGetPhysicalDeviceVideoCapabilitiesKHR',desc='Query video decode or encode capabilities',type='protos']
+--
+To query video decode or encode capabilities for a specific codec, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceVideoCapabilitiesKHR.txt[]
+
+  * pname:physicalDevice is the physical device whose video decode or encode
+    capabilities will be queried.
+  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileKHR structure
+    with a chained codec-operation specific video profile structure.
+  * pname:pCapabilities is a pointer to a slink:VkVideoCapabilitiesKHR
+    structure in which the capabilities are returned.
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceVideoCapabilitiesKHR.txt[]
+--
+
+If pname:pVideoProfile and chained codec-operation specific profile is not
+supported, ename:VK_ERROR_FORMAT_NOT_SUPPORTED is returned.
+
+Otherwise, the implementation will fill pname:pCapabilities with
+capabilities associated with this video profile.
+
+
+[open,refpage='VkVideoCapabilitiesKHR',desc='Structure specifying parameters of video capabilities',type='structs']
+--
+The slink:VkVideoCapabilitiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoCapabilitiesKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:capabilityFlags is a bitmask of elink:VkVideoCapabilityFlagBitsKHR
+    specifying capability flags.
+  * pname:minBitstreamBufferOffsetAlignment is the minimum alignment for the
+    input or output bitstream buffer offset.
+  * pname:minBitstreamBufferSizeAlignment is the minimum alignment for the
+    input or output bitstream buffer size
+  * pname:videoPictureExtentGranularity is the minimum size alignment of the
+    extent with the required padding for the decoded or encoded video
+    images.
+  * pname:minExtent is the minimum width and height of the decoded or
+    encoded video.
+  * pname:maxExtent is the maximum width and height of the decoded or
+    encoded video.
+  * pname:maxReferencePicturesSlotsCount is the maximum number of DPB Slots
+    supported by the implementation for a single video session instance.
+  * pname:maxReferencePicturesActiveCount is the maximum slots that can be
+    used as <<reference-picture,Reference Pictures>> with a single decode or
+    encode operation.
+
+include::{generated}/validity/structs/VkVideoCapabilitiesKHR.txt[]
+--
+
+[open,refpage='VkVideoCapabilityFlagBitsKHR',desc='Video Decode and Encode Capability Flags',type='enums']
+--
+The slink:VkVideoCapabilitiesKHR flags are defined with the following
+enumeration:
+
+include::{generated}/api/enums/VkVideoCapabilityFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR - the decode or
+    encode session supports protected content.
+  * ename:VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR - the DPB or
+    Reconstructed Video Picture Resources for the video session may: be
+    created as a separate slink:VkImage for each DPB picture.
+    If not supported, the DPB must: be created as single multi-layered image
+    where each layer represents one of the DPB Video Picture Resources.
+--
+
+[open,refpage='VkVideoCapabilityFlagsKHR',desc='Bitmask specifying the Video Decode and Encode Capability Flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoCapabilityFlagsKHR.txt[]
+
+tlink:VkVideoCapabilityFlagsKHR is a bitmask type for setting a mask of zero
+or more elink:VkVideoCapabilityFlagBitsKHR.
+--
+
+
+[[supported-video-input-output-dpb-formats-enumeration]]
+=== Enumeration of Supported Video Output, Input and DPB Formats
+
+[open,refpage='vkGetPhysicalDeviceVideoFormatPropertiesKHR',desc='Query supported Video Decode and Encode image formats',type='protos']
+--
+To enumerate the supported output, input and DPB image formats for a
+specific codec operation and video profile, call:
+
+include::{generated}/api/protos/vkGetPhysicalDeviceVideoFormatPropertiesKHR.txt[]
+
+  * pname:physicalDevice is the physical device being queried.
+  * pname:pVideoFormatInfo is a pointer to a
+    slink:VkPhysicalDeviceVideoFormatInfoKHR structure specifying the codec
+    and video profile for which information is 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 formats
+    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.
+
+.Valid Usage
+****
+  * [[VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-imageUsage-04844]]
+    The pname:imageUsage enum of slink:VkPhysicalDeviceVideoFormatInfoKHR
+    must: contain at least one of the following video image usage bit(s):
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR,
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, or
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR
+****
+
+[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.
+====
+
+include::{generated}/validity/protos/vkGetPhysicalDeviceVideoFormatPropertiesKHR.txt[]
+--
+
+[open,refpage='VkPhysicalDeviceVideoFormatInfoKHR',desc='Structure specifying the codec video format',type='structs']
+--
+The slink:VkPhysicalDeviceVideoFormatInfoKHR input structure is defined as:
+
+include::{generated}/api/structs/VkPhysicalDeviceVideoFormatInfoKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:imageUsage is a bitmask of elink:VkImageUsageFlagBits specifying
+    intended video image usages.
+  * pname:pVideoProfiles is a pointer to a slink:VkVideoProfilesKHR
+    structure providing the video profile(s) of video session(s) that will
+    use the image.
+    For most use cases, the image is used by a single video session and a
+    single video profile is provided.
+    For a use case such as transcode, where a decode session output image
+    may: be used as encode input for one or more encode sessions, multiple
+    video profiles representing the video sessions that will share the image
+    may: be provided.
+
+include::{generated}/validity/structs/VkPhysicalDeviceVideoFormatInfoKHR.txt[]
+--
+
+[open,refpage='VkVideoProfilesKHR',desc='Structure enumerating the video profiles',type='structs']
+--
+The slink:VkVideoProfilesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoProfilesKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:profileCount is an integer which holds the number of video
+    profiles included in pname:pProfiles.
+  * pname:pProfiles is a pointer to an array of slink:VkVideoProfileKHR
+    structures.
+    Each slink:VkVideoProfileKHR structure must: chain the corresponding
+    codec-operation specific extension video profile structure.
+
+include::{generated}/validity/structs/VkVideoProfilesKHR.txt[]
+--
+
+[open,refpage='VkVideoFormatPropertiesKHR',desc='Structure enumerating the video image formats',type='structs']
+--
+The slink:VkVideoFormatPropertiesKHR output structure for
+flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR is defined as:
+
+include::{generated}/api/structs/VkVideoFormatPropertiesKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:format is one of the supported formats reported by the
+    implementation.
+
+If the pname:pVideoProfiles provided in input structure
+pname:pVideoFormatInfo are not supported,
+ename:VK_ERROR_FORMAT_NOT_SUPPORTED is returned.
+If the implementation requires an opaque video decode or encode DPB, then
+when querying with the corresponding video decode or encode DPB image usage
+in pname:imageUsage, only one image format is returned:
+ename:VK_FORMAT_UNDEFINED.
+
+include::{generated}/validity/structs/VkVideoFormatPropertiesKHR.txt[]
+--
+
+Before creating an image, the application should obtain the supported image
+creation parameters by querying with
+flink:vkGetPhysicalDeviceFormatProperties2 or
+flink:vkGetPhysicalDeviceImageFormatProperties2 using one of the reported
+pname:pImageFormats and adding slink:VkVideoProfilesKHR to the pname:pNext
+chain of slink:VkFormatProperties2.
+
+
+[[video-session-objects]]
+== Video Session Objects
+
+
+[[video-session]]
+=== Video Session
+
+[open,refpage='VkVideoSessionKHR',desc='Opaque handle to a video session object',type='handles']
+--
+Video session objects are abstracted and represented by
+slink:VkVideoSessionKHR handles:
+
+include::{generated}/api/handles/VkVideoSessionKHR.txt[]
+--
+
+
+[[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.txt[]
+
+  * pname:device is the logical device that creates the decode or encode
+    session object.
+  * pname:pCreateInfo is a pointer to a slink:VkVideoSessionCreateInfoKHR
+    structure containing parameters specifying the creation of the decode or
+    encode 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 structure
+    specifying the decode or encode video session object which will be
+    created by this function when it returns ename:VK_SUCCESS
+
+include::{generated}/validity/protos/vkCreateVideoSessionKHR.txt[]
+--
+
+[open,refpage='VkVideoSessionCreateInfoKHR',desc='Structure specifying parameters of a newly created video decode session',type='structs']
+--
+The slink:VkVideoSessionCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoSessionCreateInfoKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:queueFamilyIndex is the queue family of the created video session.
+  * pname:flags is a bitmask of elink:VkVideoSessionCreateFlagBitsKHR
+    specifying creation flags.
+  * pname:pVideoProfile is a pointer to a slink:VkVideoProfileKHR structure.
+  * pname:pictureFormat is the format of the <<resources-image-views, image
+    views>> representing decoded <<decoded-output-picture, Output>> or
+    encoded <<input-encode-picture, Input>> pictures.
+  * pname:maxCodedExtent is the maximum width and height of the coded
+    pictures that this instance will be able to support.
+  * pname:referencePicturesFormat is the format of the <<dpb, DPB>> image
+    views representing the <<reference-picture,Reference Pictures>>.
+  * pname:maxReferencePicturesSlotsCount is the maximum number of
+    <<dpb-slot,DPB Slots>> that can be activated with associated
+    <<video-picture-resources,Video Picture Resources>> for the created
+    video session.
+  * pname:maxReferencePicturesActiveCount is the maximum number of active
+    <<dpb-slot,DPB Slots>> that can be used as Dpb or Reconstructed
+    <<reference-picture,Reference Pictures>> within a single decode or
+    encode operation for the created video session.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-04845]]
+    pname:pVideoProfile must: be a pointer to a valid
+    slink:VkVideoProfileKHR structure whose pname:pNext chain must: include
+    a valid codec-specific profile structure
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesSlotsCount-04846]]
+    If <<reference-picture,Reference Pictures>> are required for use with
+    the created video session, the pname:maxReferencePicturesSlotsCount
+    must: be set to a value bigger than `0`
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesSlotsCount-04847]]
+    pname:maxReferencePicturesSlotsCount cannot: exceed the implementation
+    reported
+    slink:VkVideoCapabilitiesKHR::pname:maxReferencePicturesSlotsCount
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04848]]
+    If <<reference-picture,Reference Pictures>> are required for use with
+    the created video session, the pname:maxReferencePicturesActiveCount
+    must: be set to a value bigger than `0`
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04849]]
+    pname:maxReferencePicturesActiveCount cannot: exceed the implementation
+    reported
+    slink:VkVideoCapabilitiesKHR::pname:maxReferencePicturesActiveCount
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxReferencePicturesActiveCount-04850]]
+    pname:maxReferencePicturesActiveCount cannot: exceed the
+    pname:maxReferencePicturesSlotsCount
+  * [[VUID-VkVideoSessionCreateInfoKHR-maxCodedExtent-04851]]
+    pname:maxCodedExtent cannot: be smaller than
+    slink:VkVideoCapabilitiesKHR::pname:minExtent and bigger than
+    slink:VkVideoCapabilitiesKHR::pname:maxExtent
+  * [[VUID-VkVideoSessionCreateInfoKHR-referencePicturesFormat-04852]]
+    pname:referencePicturesFormat must: be one of the supported formats in
+    slink:VkVideoFormatPropertiesKHR pname:format returned by the
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when the
+    slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR or
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR depending on the session
+    codec operation
+  * [[VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04853]]
+    pname:pictureFormat for decode output must: be one of the supported
+    formats in slink:VkVideoFormatPropertiesKHR pname:format returned by the
+    flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when the
+    slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
+    ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR
+  * [[VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04854]]
+    pname:pictureFormat targeting encode operations must: be one of the
+    supported formats in slink:VkVideoFormatPropertiesKHR pname:format
+    returned by the flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR when
+    the slink:VkPhysicalDeviceVideoFormatInfoKHR pname:imageUsage contains
+    ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR
+****
+
+include::{generated}/validity/structs/VkVideoSessionCreateInfoKHR.txt[]
+--
+
+[open,refpage='VkVideoSessionCreateFlagBitsKHR',desc='Video decode or encode video session creation flags',type='enums']
+--
+The decode or encode session creation flags defined with the following
+enums:
+
+include::{generated}/api/enums/VkVideoSessionCreateFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR - create the
+    video session for use with protected video content
+--
+
+[open,refpage='VkVideoSessionCreateFlagsKHR',desc='Bitmask specifying the video decode or encode video session creation flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoSessionCreateFlagsKHR.txt[]
+
+tlink: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 decode session object',type='protos']
+--
+To destroy a decode session object, call:
+
+include::{generated}/api/protos/vkDestroyVideoSessionKHR.txt[]
+
+  * pname:device is the device that was used for the creation of the video
+    session.
+  * pname:videoSession is the decode or encode video session to be
+    destroyed.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+include::{generated}/validity/protos/vkDestroyVideoSessionKHR.txt[]
+--
+
+
+[[video-session-memory-resource-management]]
+=== Video Session Memory Resource Management
+
+
+[[obtaining-video-session-memory-requirements]]
+==== Obtaining the Video Session Object Device Memory Requirements
+
+[open,refpage='vkGetVideoSessionMemoryRequirementsKHR',desc='Get Memory Requirements',type='protos']
+--
+To get memory requirements for a video session, call:
+
+include::{generated}/api/protos/vkGetVideoSessionMemoryRequirementsKHR.txt[]
+
+  * pname:device is the logical device that owns the video session.
+  * pname:videoSession is the video session to query.
+  * pname:pVideoSessionMemoryRequirementsCount is a pointer to an integer
+    related to the number of memory heap requirements available or queried,
+    as described below.
+  * pname:pVideoSessionMemoryRequirements is `NULL` or a pointer to an array
+    of slink:VkVideoGetMemoryPropertiesKHR structures in which the memory
+    heap requirements of the video session are returned.
+
+If pname:pVideoSessionMemoryRequirements is `NULL`, then the number of
+memory heap types required for the video session is returned in
+pname:pVideoSessionMemoryRequirementsCount.
+Otherwise, pname:pVideoSessionMemoryRequirementsCount must: point to a
+variable set by the user with the number of elements in the
+pname:pVideoSessionMemoryRequirements array, and on return the variable is
+overwritten with the number of formats actually written to
+pname:pVideoSessionMemoryRequirements.
+If pname:pVideoSessionMemoryRequirementsCount is less than the number of
+memory heap types required for the video session, then at most
+pname:pVideoSessionMemoryRequirementsCount elements will be written to
+pname:pVideoSessionMemoryRequirements, and ename:VK_INCOMPLETE will be
+returned, instead of ename:VK_SUCCESS, to indicate that not all required
+memory heap types were returned.
+
+include::{generated}/validity/protos/vkGetVideoSessionMemoryRequirementsKHR.txt[]
+--
+
+[open,refpage='VkVideoGetMemoryPropertiesKHR',desc='Structure specifying video session required memory heap type',type='structs']
+--
+The slink:VkVideoGetMemoryPropertiesKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoGetMemoryPropertiesKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryBindIndex is the memory bind index of the memory heap type
+    described by the information returned in pname:pMemoryRequirements.
+  * pname:pMemoryRequirements is a pointer to a slink:VkMemoryRequirements2
+    structure in which the requested memory heap requirements for the heap
+    with index pname:memoryBindIndex are returned.
+
+include::{generated}/validity/structs/VkVideoGetMemoryPropertiesKHR.txt[]
+--
+
+
+[[binding-session-memory]]
+==== Binding the Session Object Device Memory
+
+[open,refpage='vkBindVideoSessionMemoryKHR',desc='Bind Video Memory',type='protos']
+--
+To attach memory to a video session object, call:
+
+include::{generated}/api/protos/vkBindVideoSessionMemoryKHR.txt[]
+
+  * pname:device is the logical device that owns the video session's memory.
+  * pname:videoSession is the video session to be bound with device memory.
+  * pname:videoSessionBindMemoryCount is the number of
+    pname:pVideoSessionBindMemories to be bound.
+  * pname:pVideoSessionBindMemories is a pointer to an array of
+    slink:VkVideoBindMemoryKHR structures specifying memory regions to be
+    bound to a device memory heap.
+
+include::{generated}/validity/protos/vkBindVideoSessionMemoryKHR.txt[]
+--
+
+[open,refpage='VkVideoBindMemoryKHR',desc='Structure specifying device memory heap entry for video session object',type='structs']
+--
+The slink:VkVideoBindMemoryKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoBindMemoryKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:memoryBindIndex is the index of the device memory heap returned in
+    slink:VkVideoGetMemoryPropertiesKHR::pname:memoryBindIndex from
+    flink:vkGetVideoSessionMemoryRequirementsKHR.
+  * pname:memory is the allocated device memory to be bound to the video
+    session's heap 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.
+
+
+include::{generated}/validity/structs/VkVideoBindMemoryKHR.txt[]
+--
+
+
+[[video-session-parameters]]
+=== Video Session Parameters
+
+This specification supports several classes of preprocessed parameters
+stored in Video Session Parameters objects.
+The Video Session Parameters objects reduces the number of parameters being
+dispatched and then processed by the implementation while recording video
+command buffers.
+
+
+[[creating-video-session-parameters]]
+=== Creating Video Session Parameters
+
+[open,refpage='VkVideoSessionParametersKHR',desc='Opaque handle to a video video session parameters object',type='handles']
+--
+Video session parameter objects are represented by
+slink:VkVideoSessionParametersKHR handles:
+
+include::{generated}/api/handles/VkVideoSessionParametersKHR.txt[]
+--
+
+[open,refpage='vkCreateVideoSessionParametersKHR',desc='Creates video session video session parameter object',type='protos']
+--
+To create a video session parameters object, call:
+
+include::{generated}/api/protos/vkCreateVideoSessionParametersKHR.txt[]
+
+  * pname:device is the logical device that was used for the creation of the
+    video session object.
+  * pname:pCreateInfo is a pointer to
+    slink:VkVideoSessionParametersCreateInfoKHR structure specifying the
+    video session parameters.
+  * 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 video session
+    parameters object is returned.
+
+include::{generated}/validity/protos/vkCreateVideoSessionParametersKHR.txt[]
+--
+
+[open,refpage='VkVideoSessionParametersCreateInfoKHR',desc='Structure to set video session parameters',type='structs']
+--
+The slink:VkVideoSessionParametersCreateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoSessionParametersCreateInfoKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:videoSessionParametersTemplate is dlink:VK_NULL_HANDLE or a valid
+    handle to a slink:VkVideoSessionParametersKHR object.
+    If this parameter represents a valid handle, then the underlying Video
+    Session Parameters object will be used as a template for constructing
+    the new video session parameters object.
+    All of the template object's current parameters will be inherited by the
+    new object in such a case.
+    Optionally, some of the template's parameters can be updated or new
+    parameters added to the newly constructed object via the
+    extension-specific parameters.
+  * pname:videoSession is the video session object against which the video
+    session parameters object is going to be created.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-04855]]
+    If pname:videoSessionParametersTemplate represents a valid handle, it
+    must: have been created against pname:videoSession
+****
+
+include::{generated}/validity/structs/VkVideoSessionParametersCreateInfoKHR.txt[]
+--
+
+
+[[UpdatingVideoSessionParameters]]
+=== Updating the parameters of the Video Session Parameters object
+
+[open,refpage='vkUpdateVideoSessionParametersKHR',desc='Update video session video session parameter object',type='protos']
+--
+To update, add, or remove video session parameters state, call:
+
+include::{generated}/api/protos/vkUpdateVideoSessionParametersKHR.txt[]
+
+  * pname:device is the logical device that was used for the creation of the
+    video session object.
+  * pname:videoSessionParameters is the video session object that is going
+    to be updated.
+  * pname:pUpdateInfo is a pointer to a
+    sname:VkVideoSessionParametersUpdateInfoKHR structure containing the
+    session parameters update information.
+
+include::{generated}/validity/protos/vkUpdateVideoSessionParametersKHR.txt[]
+--
+
+[open,refpage='VkVideoSessionParametersUpdateInfoKHR',desc='Structure to update video session parameters',type='structs']
+--
+The sname:VkVideoSessionParametersUpdateInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoSessionParametersUpdateInfoKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:updateSequenceCount is the sequence number of the object update
+    with parameters, starting from `1` and incrementing the value by one
+    with each subsequent update.
+
+include::{generated}/validity/structs/VkVideoSessionParametersUpdateInfoKHR.txt[]
+--
+
+
+[[destroying-video-session-parameters]]
+=== Destroying Video Session Parameters
+
+[open,refpage='vkDestroyVideoSessionParametersKHR',desc='Destroy video session parameters object',type='protos']
+--
+To destroy a video session object, call:
+
+include::{generated}/api/protos/vkDestroyVideoSessionParametersKHR.txt[]
+
+  * pname:device is the device the video session was created with.
+  * pname:videoSessionParameters is the video session parameters object to
+    be destroyed.
+  * pname:pAllocator controls host memory allocation as described in the
+    <<memory-allocation, Memory Allocation>> chapter.
+
+include::{generated}/validity/protos/vkDestroyVideoSessionParametersKHR.txt[]
+--
+
+
+=== Video Encode and Decode commands
+
+[open,refpage='vkCmdBeginVideoCodingKHR',desc='Start decode jobs',type='protos']
+--
+To start video decode or encode operations, call:
+
+include::{generated}/api/protos/vkCmdBeginVideoCodingKHR.txt[]
+
+  * pname:commandBuffer is the command buffer to be used when recording
+    commands for the video decode or encode operations.
+  * pname:pBeginInfo is a pointer to a slink:VkVideoBeginCodingInfoKHR
+    structure.
+
+include::{generated}/validity/protos/vkCmdBeginVideoCodingKHR.txt[]
+--
+
+[open,refpage='VkVideoBeginCodingInfoKHR',desc='Structure specifying parameters of decode starts',type='structs']
+--
+The slink:VkVideoBeginCodingInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoBeginCodingInfoKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:flags is reserved for future use.
+  * pname:codecQualityPreset is a bitmask of
+    elink:VkVideoCodingQualityPresetFlagBitsKHR specifying the Video Decode
+    or Encode quality preset.
+  * pname:videoSession is the video session object to be bound for the
+    processing of the video commands.
+  * pname:videoSessionParameters is dlink:VK_NULL_HANDLE or a handle of a
+    slink:VkVideoSessionParametersKHR object to be used for the processing
+    of the video commands.
+    If dlink:VK_NULL_HANDLE, then no video session parameters apply to this
+    command buffer context.
+  * pname:referenceSlotCount is the number of reference slot entries
+    provided in pname:pReferenceSlots.
+  * pname:pReferenceSlots is a pointer to an array of
+    slink:VkVideoReferenceSlotKHR structures specifying reference slots,
+    used within the video command context between this
+    flink:vkCmdBeginVideoCodingKHR command and the
+    flink:vkCmdEndVideoCodingKHR commmand that follows.
+    Each reference slot provides a slot index and the
+    slink:VkVideoPictureResourceKHR specifying the reference picture
+    resource bound to this slot index.
+    A slot index must: not appear more than once in pname:pReferenceSlots in
+    a given command.
+
+.Valid Usage
+****
+  * [[VUID-VkVideoBeginCodingInfoKHR-referenceSlotCount-04856]]
+    slink:VkVideoBeginCodingInfoKHR::pname:referenceSlotCount must: not
+    exceed the value specified in
+    slink:VkVideoSessionCreateInfoKHR::pname:maxReferencePicturesSlotsCount
+    when creating the video session object that is being provided in
+    pname:videoSession
+  * [[VUID-VkVideoBeginCodingInfoKHR-videoSessionParameters-04857]]
+    If pname:videoSessionParameters is not dlink:VK_NULL_HANDLE, it must:
+    have been created using pname:videoSession as a parent object
+****
+
+include::{generated}/validity/structs/VkVideoBeginCodingInfoKHR.txt[]
+--
+
+[open,refpage='VkVideoBeginCodingFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoBeginCodingFlagsKHR.txt[]
+
+tname:VkVideoBeginCodingFlagsKHR is a bitmask type for setting a mask, but
+is currently reserved for future use.
+--
+
+[open,refpage='VkVideoCodingQualityPresetFlagBitsKHR',desc='Video codec profile types',type='enums']
+--
+The decode preset types are defined with the following:
+
+include::{generated}/api/enums/VkVideoCodingQualityPresetFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR defines normal
+    decode case.
+  * ename:VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR defines power
+    efficient case.
+  * ename:VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR defines quality
+    focus case.
+--
+
+[open,refpage='VkVideoCodingQualityPresetFlagsKHR',desc='Bitmask of elink:VkVideoCodingQualityPresetFlagBitsKHR flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoCodingQualityPresetFlagsKHR.txt[]
+
+tlink:VkVideoCodingQualityPresetFlagsKHR is a bitmask type for setting a
+mask of zero or more elink:VkVideoCodingQualityPresetFlagBitsKHR.
+--
+
+[open,refpage='VkVideoReferenceSlotKHR',desc='Structure specifying the reference picture slot',type='structs']
+--
+The slink:VkVideoReferenceSlotKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoReferenceSlotKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:slotIndex is the unique reference slot index used for the encode
+    or decode operation.
+  * pname:pPictureResource is a pointer to a slink:VkVideoPictureResourceKHR
+    structure describing the picture resource bound to this slot index.
+
+include::{generated}/validity/structs/VkVideoReferenceSlotKHR.txt[]
+--
+
+[open,refpage='VkVideoPictureResourceKHR',desc='Structure specifying the picture resources',type='structs']
+--
+The slink:VkVideoPictureResourceKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoPictureResourceKHR.txt[]
+
+  * pname:sType is the type of this structure.
+  * pname:pNext is `NULL` or a pointer to a structure extending this
+    structure.
+  * pname:codedOffset is the offset to be used for the picture resource.
+  * pname:codedExtent is the extent to be used for the picture resource.
+  * pname:baseArrayLayer is the first array layer to be accessed for the
+    Decode or Encode Operations.
+  * pname:imageViewBinding is a slink:VkImageView image view representing
+    this picture resource.
+
+include::{generated}/validity/structs/VkVideoPictureResourceKHR.txt[]
+--
+
+
+=== End of the Video Session
+
+[open,refpage='vkCmdEndVideoCodingKHR',desc='End decode jobs',type='protos']
+--
+To end video decode or encode operations, call:
+
+include::{generated}/api/protos/vkCmdEndVideoCodingKHR.txt[]
+
+  * pname:commandBuffer is the command buffer to be filled by this function.
+  * pname:pEndCodingInfo is a pointer to a slink:VkVideoEndCodingInfoKHR
+    structure.
+
+include::{generated}/validity/protos/vkCmdEndVideoCodingKHR.txt[]
+--
+
+[open,refpage='VkVideoEndCodingInfoKHR',desc='Structure specifying the end of decode encode commands sequence',type='structs']
+--
+The slink:VkVideoEndCodingInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoEndCodingInfoKHR.txt[]
+
+  * pname:sType is the type of 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.txt[]
+--
+
+[open,refpage='VkVideoEndCodingFlagsKHR',desc='Reserved for future use',type='flags']
+--
+include::{generated}/api/flags/VkVideoEndCodingFlagsKHR.txt[]
+
+tname:VkVideoEndCodingFlagsKHR is a bitmask type for setting a mask, but is
+currently reserved for future use.
+--
+
+
+=== Video Session Control Command
+
+[open,refpage='vkCmdControlVideoCodingKHR',desc='Set encode rate control parameters',type='protos']
+--
+To apply dynamic controls to video decode or video operations, call:
+
+include::{generated}/api/protos/vkCmdControlVideoCodingKHR.txt[]
+
+  * pname:commandBuffer is the command buffer to be filled by this function
+    for setting encode rate control parameters.
+  * pname:pCodingControlInfo is a pointer to a
+    slink:VkVideoCodingControlInfoKHR structure.
+
+include::{generated}/validity/protos/vkCmdControlVideoCodingKHR.txt[]
+--
+
+[open,refpage='VkVideoCodingControlInfoKHR',desc='Structure specifying parameters of decode starts',type='structs']
+--
+The slink:VkVideoCodingControlInfoKHR structure is defined as:
+
+include::{generated}/api/structs/VkVideoCodingControlInfoKHR.txt[]
+
+  * pname:sType is the type of 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.
+
+include::{generated}/validity/structs/VkVideoCodingControlInfoKHR.txt[]
+--
+
+[open,refpage='VkVideoCodingControlFlagBitsKHR',desc='Video Coding Control Command Flags',type='enums']
+--
+The flink:vkCmdControlVideoCodingKHR flags are defined with the following
+enumeration:
+
+include::{generated}/api/enums/VkVideoCodingControlFlagBitsKHR.txt[]
+
+  * ename:VK_VIDEO_CODING_CONTROL_DEFAULT_KHR indicates a request for the
+    coding control paramaters to be applied to the current state of the
+    bound video session.
+  * ename:VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR indicates a request for the
+    bound video session state to be reset before the coding control
+    parameters are applied.
+    The state after reset is identical to the state immediately after video
+    session creation.
+--
+
+[open,refpage='VkVideoCodingControlFlagsKHR',desc='Bitmask specifying the Video Coding Control Command flink:vkCmdControlVideoCodingKHR flags',type='flags']
+--
+include::{generated}/api/flags/VkVideoCodingControlFlagsKHR.txt[]
+
+tlink:VkVideoCodingControlFlagsKHR is a bitmask type for setting a mask of
+zero or more elink:VkVideoCodingControlFlagBitsKHR.
+--
diff --git a/registry/vulkan/config/README.adoc b/registry/vulkan/config/README.adoc
new file mode 100644
index 0000000..afe163e
--- /dev/null
+++ b/registry/vulkan/config/README.adoc
@@ -0,0 +1,45 @@
+// Copyright 2015-2021 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.txt[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.
+
+== 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
+* `tilde_open_block.rb` - allow '~~~~' as an open block delimiter
+* `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
diff --git a/registry/vulkan/config/asciidoctor-mathematical-ext.rb b/registry/vulkan/config/asciidoctor-mathematical-ext.rb
new file mode 100644
index 0000000..62daf16
--- /dev/null
+++ b/registry/vulkan/config/asciidoctor-mathematical-ext.rb
@@ -0,0 +1,23 @@
+# Copyright 2018-2021 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/registry/vulkan/config/attribs.txt b/registry/vulkan/config/attribs.txt
new file mode 100644
index 0000000..f3594ff
--- /dev/null
+++ b/registry/vulkan/config/attribs.txt
@@ -0,0 +1,107 @@
+// Copyright 2015-2021 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.
+// \' doesn't 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:[+ ]
+: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
+:core_header: vulkan_core.h
+:full_header: vulkan.h
+
+// 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.txt 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
diff --git a/registry/vulkan/config/chunkindex/README.adoc b/registry/vulkan/config/chunkindex/README.adoc
new file mode 100644
index 0000000..b3eb47b
--- /dev/null
+++ b/registry/vulkan/config/chunkindex/README.adoc
@@ -0,0 +1,36 @@
+// Copyright 2018-2021 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/registry/vulkan/config/chunkindex/addscript.jsmarker b/registry/vulkan/config/chunkindex/addscript.jsmarker
new file mode 100644
index 0000000..387d7a8
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/chunkindex/addscript.searchboxmarker b/registry/vulkan/config/chunkindex/addscript.searchboxmarker
new file mode 100644
index 0000000..7d8bfb0
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/chunkindex/addscripts.sh b/registry/vulkan/config/chunkindex/addscripts.sh
new file mode 100755
index 0000000..dadde98
--- /dev/null
+++ b/registry/vulkan/config/chunkindex/addscripts.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Copyright 2020-2021 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/registry/vulkan/config/chunkindex/build-index.js b/registry/vulkan/config/chunkindex/build-index.js
new file mode 100644
index 0000000..99d7550
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/chunkindex/chunked.css b/registry/vulkan/config/chunkindex/chunked.css
new file mode 100644
index 0000000..6bedffa
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/chunkindex/chunked.js b/registry/vulkan/config/chunkindex/chunked.js
new file mode 100644
index 0000000..e7111e2
--- /dev/null
+++ b/registry/vulkan/config/chunkindex/chunked.js
@@ -0,0 +1,170 @@
+/*! loadJS: load a JS file asynchronously. [c]2014 @scottjehl, Filament Group, Inc. (Based on http://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/registry/vulkan/config/chunkindex/custom.patch b/registry/vulkan/config/chunkindex/custom.patch
new file mode 100644
index 0000000..bc2b7ce
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/chunkindex/generate-index.rb b/registry/vulkan/config/chunkindex/generate-index.rb
new file mode 100644
index 0000000..bc59bc9
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/chunkindex/lunr.js b/registry/vulkan/config/chunkindex/lunr.js
new file mode 100644
index 0000000..c353765
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/copyright-ccby.txt b/registry/vulkan/config/copyright-ccby.txt
new file mode 100644
index 0000000..1ffed4b
--- /dev/null
+++ b/registry/vulkan/config/copyright-ccby.txt
@@ -0,0 +1,3 @@
+Copyright 2014-2021 The Khronos Group Inc.
+
+SPDX-License-Identifier: CC-BY-4.0
diff --git a/registry/vulkan/config/extension-highlighter.rb b/registry/vulkan/config/extension-highlighter.rb
new file mode 100644
index 0000000..b557a01
--- /dev/null
+++ b/registry/vulkan/config/extension-highlighter.rb
@@ -0,0 +1,10 @@
+# Copyright 2016-2021 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/registry/vulkan/config/extension-highlighter/extension.rb b/registry/vulkan/config/extension-highlighter/extension.rb
new file mode 100644
index 0000000..62e9a6c
--- /dev/null
+++ b/registry/vulkan/config/extension-highlighter/extension.rb
@@ -0,0 +1,303 @@
+# Copyright 2016-2021 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're tracking a target for highlighting already, don't 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's an ifdef or ifndef, push the directive onto a stack
+    # If it's 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
+    # isn't 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're tracking a target for highlighting already, don't 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's an ifdef or ifndef, push the directive onto a stack
+    # If it's 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
+    # isn't 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 don't 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'll 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's 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's a list item and use the
+        # wrong delimiter.
+        # That shouldn't 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
+    # isn't, 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/registry/vulkan/config/fonts/mplus1p-regular-fallback.ttf b/registry/vulkan/config/fonts/mplus1p-regular-fallback.ttf
new file mode 100644
index 0000000..d9d2e3d
--- /dev/null
+++ b/registry/vulkan/config/fonts/mplus1p-regular-fallback.ttf
Binary files differ
diff --git a/registry/vulkan/config/katex_replace.rb b/registry/vulkan/config/katex_replace.rb
new file mode 100644
index 0000000..f134b39
--- /dev/null
+++ b/registry/vulkan/config/katex_replace.rb
@@ -0,0 +1,11 @@
+# Copyright 2016-2021 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/registry/vulkan/config/katex_replace/extension.rb b/registry/vulkan/config/katex_replace/extension.rb
new file mode 100644
index 0000000..ad4948f
--- /dev/null
+++ b/registry/vulkan/config/katex_replace/extension.rb
@@ -0,0 +1,44 @@
+# Copyright 2016-2021 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's 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/registry/vulkan/config/khronos.css b/registry/vulkan/config/khronos.css
new file mode 100644
index 0000000..2530f3d
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/loadable_html.rb b/registry/vulkan/config/loadable_html.rb
new file mode 100644
index 0000000..4fcb945
--- /dev/null
+++ b/registry/vulkan/config/loadable_html.rb
@@ -0,0 +1,11 @@
+# Copyright 2016-2018 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/registry/vulkan/config/loadable_html/extension.rb b/registry/vulkan/config/loadable_html/extension.rb
new file mode 100644
index 0000000..84cbe62
--- /dev/null
+++ b/registry/vulkan/config/loadable_html/extension.rb
@@ -0,0 +1,72 @@
+# Copyright 2016-2018 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/registry/vulkan/config/makeSubmit.py b/registry/vulkan/config/makeSubmit.py
new file mode 100755
index 0000000..a79c2ef
--- /dev/null
+++ b/registry/vulkan/config/makeSubmit.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python3
+#
+# Copyright 2016-2021 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
+
+def enQuote(str):
+    return '"' + str + '"'
+
+# Make a single submission target. Several are needed per document.
+#
+# outDir - where to generate intermediate and final documents
+# extensionList - list of extensions to include
+# submitName - base name of final HTML file
+# title - document title
+# target - default 'html'
+def makeTarget(outDir, extensionList, submitName, title, target):
+    print('make clean_generated')
+    print('make OUTDIR=' + outDir,
+          'IMAGEOPTS=',
+          'EXTENSIONS="' + ' '.join(extensionList) + '"',
+          'APITITLE="' + title + '"', target)
+    # Rename into submission directory
+    outFile = outDir + '/html/' + submitName + '.html'
+    print('mv', outDir + '/html/vkspec.html', enQuote(outFile))
+    # No longer needed
+    # print('mv -n', outDir + '/katex', 'out/submit/')
+
+    return outFile
+
+# Make submission for a list of required extension names
+def makeSubmit(submitName, required, target='html'):
+    global extensions
+
+    deps = []
+    for name in required:
+        if name in extensions.keys():
+            for depname in extensions[name]:
+                if (depname not in required and depname not in deps):
+                    deps.append(depname)
+
+    print('echo Required extensions:', ' '.join(required))
+    print('echo Dependent extensions:', ' '.join(deps))
+    print('')
+
+    # Generate shell commands to build the specs
+    outDir = 'submit'
+    print('mkdir -p', outDir)
+
+    # Generate spec with required extensions + dependencies
+    newSpec = makeTarget(outDir, required + deps, submitName,
+                         submitName, target)
+
+    # Generate base spec with just dependencies
+    baseSpec = makeTarget(outDir, deps, 'deps-' + submitName,
+                          '(with only dependencies of ' + submitName + ')',
+                          target)
+
+    # # Reorganize and rename them, and generate the diff spec
+    print('')
+    print('cd scripts/htmldiff')
+    print('./htmldiff',
+          enQuote('../../' + baseSpec),
+          enQuote('../../' + newSpec),
+          '>',
+           enQuote('../../submit/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('-genpath', action='store',
+                        default='gen',
+                        help='Path to directory containing generated extDependency.py module')
+    parser.add_argument('-title', action='store',
+                        default='vkspec',
+                        help='Set the document title')
+
+    results = parser.parse_args()
+
+    # Look for extDependency.py in the specified directory
+    sys.path.insert(0, results.genpath)
+
+    # Ensure gen/extDependency.py is up-to-date before we import it.
+    subprocess.check_call(['make', 'GENERATED=' + results.genpath, 'extDependency'])
+
+    from extDependency import *
+
+    makeSubmit(results.title, results.extension)
diff --git a/registry/vulkan/config/mathtest.txt b/registry/vulkan/config/mathtest.txt
new file mode 100644
index 0000000..02ff24d
--- /dev/null
+++ b/registry/vulkan/config/mathtest.txt
@@ -0,0 +1,953 @@
+// Copyright 2015-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+= Math Test
+
+This file (vkmath.txt) contains all the latexmath blocks and inlines in the
+Vulkan spec and style guide, so we can see how they're rendered with
+different methods and output formats.
+
+== File chapters/fundamentals.txt
+
+=== 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.txt
+
+=== latexmath inline 1
+
+latexmath:[(x,y,z,\frac{1}{w})]
+
+=== latexmath inline 2
+
+latexmath:[\frac{1}{w}]
+
+== File chapters/primsrast.txt
+
+=== 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.txt
+
+=== 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.txt
+
+=== latexmath inline 4
+
+latexmath:[(x,y,z,\frac{1}{w})]
+
+=== latexmath inline 5
+
+latexmath:[\frac{1}{w}].
+
+== File chapters/primsrast.txt
+
+=== 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.txt
+
+=== latexmath inline 8
+
+latexmath:[\frac{1}{n}, \frac{2}{n}, \ldots, \frac{n-1}{n}]
+
+== File chapters/textures.txt
+
+=== 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.txt
+
+=== 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.txt
+
+=== 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.txt
+
+=== 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.txt
+
+=== 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/registry/vulkan/config/optimize-pdf b/registry/vulkan/config/optimize-pdf
new file mode 100755
index 0000000..2eb2c02
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/config/rouge-extend-css.rb b/registry/vulkan/config/rouge-extend-css.rb
new file mode 100644
index 0000000..c396216
--- /dev/null
+++ b/registry/vulkan/config/rouge-extend-css.rb
@@ -0,0 +1,60 @@
+# Copyright 2021 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's 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/registry/vulkan/config/spec-macros.rb b/registry/vulkan/config/spec-macros.rb
new file mode 100644
index 0000000..13aa5a1
--- /dev/null
+++ b/registry/vulkan/config/spec-macros.rb
@@ -0,0 +1,40 @@
+# Copyright 2016-2021 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/registry/vulkan/config/spec-macros/extension.rb b/registry/vulkan/config/spec-macros/extension.rb
new file mode 100644
index 0000000..adfe2e2
--- /dev/null
+++ b/registry/vulkan/config/spec-macros/extension.rb
@@ -0,0 +1,307 @@
+# Copyright 2016-2021 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 'api.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 isn't 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
+        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 < CodeInlineMacroBase
+    named :basetype
+    match /basetype:(\w+)/
+end
+
+# This doesn't 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.txt
+
+class TagInlineMacro < StrongInlineMacroBase
+    named :tag
+    match /tag:(\w+)/
+end
+
+class AttrInlineMacro < StrongInlineMacroBase
+    named :attr
+    match /attr:(\w+)/
+end
+
+# Does nothing - just markup that we've 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/registry/vulkan/config/themes/pdf-theme.yml b/registry/vulkan/config/themes/pdf-theme.yml
new file mode 100644
index 0000000..445573f
--- /dev/null
+++ b/registry/vulkan/config/themes/pdf-theme.yml
@@ -0,0 +1,35 @@
+# Copyright 2020-2021 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/registry/vulkan/config/tilde_open_block.rb b/registry/vulkan/config/tilde_open_block.rb
new file mode 100644
index 0000000..0372897
--- /dev/null
+++ b/registry/vulkan/config/tilde_open_block.rb
@@ -0,0 +1,70 @@
+# Copyright 2018-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+module Asciidoctor
+
+# This addition to the parser class overrides the "is_delimited_block?"
+# method of the core parser, adding a new block delimiter of "~~~~" for open
+# blocks, which can be extended to an arbitrary number of braces to allow
+# nesting them, which is a limitation of the existing "only two dashes"
+# delimiter: https://github.com/asciidoctor/asciidoctor/issues/1121
+# The choice of tildes is based on comments in that bug.
+
+class Parser
+  # Storing the original method so we can still call it from the overriding
+  # version
+  @OLD_is_delimited_block = method(:is_delimited_block?)
+
+  # Logic here matches the original Parser#is_delimited_block? method, see
+  # there for details of base implementation.
+  def self.is_delimited_block? line, return_match_data = false
+    # Quick check for a single brace character before forwarding to the
+    # original parser method.
+    if line[0] != '~'
+      return @OLD_is_delimited_block.(line, return_match_data)
+    else
+      line_len = line.length
+      if line_len <= 4
+        tip = line
+        tl = line_len
+      else
+        tip = line[0..3]
+        tl = 4
+      end
+
+      # Hardcoded tilde delimiter, since that's the only thing this
+      # function deals with.
+      if tip == '~~~~'
+        # tip is the full line when delimiter is minimum length
+        if tl < 4 || tl == line_len
+          if return_match_data
+            context = :open
+            masq = ['comment', 'example', 'literal', 'listing', 'pass', 'quote', 'sidebar', 'source', 'verse', 'admonition', 'abstract', 'partintro'].to_set
+            BlockMatchData.new(context, masq, tip, tip)
+          else
+            true
+          end
+        elsif %(#{tip}#{tip[-1..-1] * (line_len - tl)}) == line
+          if return_match_data
+            context = :open
+            masq = ['comment', 'example', 'literal', 'listing', 'pass', 'quote', 'sidebar', 'source', 'verse', 'admonition', 'abstract', 'partintro'].to_set
+            BlockMatchData.new(context, masq, tip, line)
+          else
+            true
+          end
+        else
+          nil
+        end
+      else
+        nil
+      end
+    end
+  end
+end
+
+end
diff --git a/registry/vulkan/config/vu-to-json.rb b/registry/vulkan/config/vu-to-json.rb
new file mode 100644
index 0000000..2940bbc
--- /dev/null
+++ b/registry/vulkan/config/vu-to-json.rb
@@ -0,0 +1,10 @@
+# Copyright 2016-2021 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
+  preprocessor ValidUsageToJsonPreprocessor
+  treeprocessor ValidUsageToJsonTreeprocessor
+end
diff --git a/registry/vulkan/config/vu-to-json/extension.rb b/registry/vulkan/config/vu-to-json/extension.rb
new file mode 100644
index 0000000..c78cae7
--- /dev/null
+++ b/registry/vulkan/config/vu-to-json/extension.rb
@@ -0,0 +1,274 @@
+# Copyright 2016-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
+
+include ::Asciidoctor
+
+module Asciidoctor
+
+class ValidUsageToJsonPreprocessorReader < PreprocessorReader
+  def process_line line
+    if line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_')
+      # Turn extension ifdefs into list items for when we're processing VU later.
+      return super('* ' + line)
+    else
+      return super(line)
+    end
+  end
+end
+
+# Preprocessor hook to iterate over ifdefs to prevent them from affecting asciidoctor's processing.
+class ValidUsageToJsonPreprocessor < Extensions::Preprocessor
+
+  def process document, reader
+    # Create a new reader to return, which handles turning the extension ifdefs into something else.
+    extension_preprocessor_reader = ValidUsageToJsonPreprocessorReader.new(document, reader.lines)
+
+    detected_vuid_list = []
+    extension_stack = []
+    in_validusage = :outside
+
+    # Despite replacing lines in the overridden preprocessor reader, a
+    # FIXME in Reader#peek_line suggests that this doesn't work, the new lines are simply discarded.
+    # So we just run over the new lines and do the replacement again.
+    new_lines = extension_preprocessor_reader.read_lines().flat_map do | line |
+
+      # Track whether we're in a VU block or not
+      if line.start_with?(".Valid Usage")
+        in_validusage = :about_to_enter  # About to enter VU
+      elsif in_validusage == :about_to_enter and line == '****'
+        in_validusage = :inside   # Entered VU block
+        extension_stack.each
+      elsif in_validusage == :inside and line == '****'
+        in_validusage = :outside   # Exited VU block
+      end
+
+      # Track extensions outside of the VU
+      if in_validusage == :outside and line.start_with?( 'ifdef::VK_', 'ifndef::VK_') and line.end_with?( '[]')
+        extension_stack.push line
+      elsif in_validusage == :outside and line.start_with?( 'endif::VK_')
+        extension_stack.pop
+      end
+
+      if in_validusage == :inside and line == '****'
+        # Write out the extension stack as bullets after this line
+        returned_lines = [line]
+        extension_stack.each do | extension |
+          returned_lines << ('* ' + extension)
+          # Add extra blank line to avoid this item absorbing any markup such as attributes on the next line
+          returned_lines << ''
+        end
+        returned_lines
+      elsif in_validusage == :inside and line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_') and line.end_with?('[]')
+        # Turn extension ifdefs into list items for when we're processing VU later.
+        ['* ' + line]
+      elsif in_validusage == :outside and line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_') and line.end_with?('[]')
+        # Remove the extension defines from the new lines, as we've dealt with them
+        []
+      elsif line.match(/\[\[(VUID-([^-]+)-[^\]]+)\]\]/)
+        # Add all the VUIDs into an array to guarantee they're all caught later.
+        detected_vuid_list << line.match(/(VUID-([^-]+)-[^\]]+)/)[0]
+        [line]
+      else
+        [line]
+      end
+    end
+
+    # Stash the detected vuids into a document attribute
+    document.set_attribute('detected_vuid_list', detected_vuid_list.join("\n"))
+
+    # Return a new reader after preprocessing
+    Reader.new(new_lines)
+  end
+end
+
+require 'json'
+class ValidUsageToJsonTreeprocessor < Extensions::Treeprocessor
+  def process document
+    map = {}
+
+    # Get the global vuid list
+    detected_vuid_list = document.attr('detected_vuid_list').split("\n")
+
+    map['version info'] = {
+      'schema version' => 2,
+      'api version' => document.attr('revnumber'),
+      'comment' => document.attr('revremark'),
+      'date' => document.attr('revdate')
+    }
+
+    map['validation'] = {}
+
+    error_found = false
+
+    # Need to find all valid usage blocks within a structure or function ref page section
+
+    # This is a list of all refpage types that may contain VUs
+    vu_refpage_types = [
+            'builtins',
+            'funcpointers',
+            'protos',
+            'spirv',
+            'structs',
+        ]
+
+    # Find all the open blocks
+    (document.find_by context: :open).each do |openblock|
+      # Filter out anything that's not a refpage
+      if openblock.attributes['refpage']
+        if vu_refpage_types.include? openblock.attributes['type']
+          parent = openblock.attributes['refpage']
+          # Find all the sidebars
+          (openblock.find_by context: :sidebar).each do |sidebar|
+            # Filter only the valid usage sidebars
+            if sidebar.title == "Valid Usage" || sidebar.title == "Valid Usage (Implicit)"
+              extensions = []
+              # There should be only one block - but just in case...
+              sidebar.blocks.each do |list|
+                # Iterate through all the items in the block, tracking which extensions are enabled/disabled.
+
+                attribute_replacements = list.attributes[:attribute_entries]
+
+                list.blocks.each do |item|
+                  if item.text.start_with?('ifdef::VK_')
+                    extensions << '(' + item.text[('ifdef::'.length)..-3] + ')'                # Look for "ifdef" directives and add them to the list of extensions
+                  elsif item.text.start_with?('ifndef::VK_')
+                    extensions << '!(' + item.text[('ifndef::'.length)..-3] + ')'              # Ditto for "ifndef" directives
+                  elsif item.text.start_with?('endif::VK_')
+                    extensions.slice!(-1)                                                      # Remove the last element when encountering an endif
+                  else
+                    item_text = item.text.clone
+
+                    # Replace the refpage if it's present
+                    item_text.gsub!(/\{refpage\}/i, parent)
+
+                    # Replace any attributes specified on the list (e.g. stageMask)
+                    if attribute_replacements
+                      attribute_replacements.each do |replacement|
+                        replacement_str = '\{' + replacement.name + '\}'
+                        replacement_regex = Regexp.new(replacement_str, Regexp::IGNORECASE)
+                        item_text.gsub!(replacement_regex, replacement.value)
+                      end
+                    end
+
+                    match = nil
+                    if item.text == item_text
+                      # The VUID will have been converted to a href in the general case, so find that
+                      match = /<a id=\"(VUID-[^"]+)\"[^>]*><\/a>(.*)/m.match(item_text)
+                    else
+                      # If we're doing manual attribute replacement, have to find the text of the anchor
+                      match = /\[\[(VUID-[^\]]+)\]\](.*)/m.match(item_text) # Otherwise, look for the VUID.
+                    end
+
+                    if (match != nil)
+                      vuid     = match[1]
+                      text     = match[2].gsub("\n", ' ')  # Have to forcibly remove newline characters; for some reason they're translated to the literally '\n' when converting to json.
+
+                      # Delete the vuid from the detected vuid list, so we know it's been extracted successfully
+                      if item.text == item_text
+                        # Simple if the item text hasn't been modified
+                        detected_vuid_list.delete(match[1])
+                      else
+                        # If the item text has been modified, get the vuid from the unmodified text
+                        detected_vuid_list.delete(/\[\[(VUID-([^-]+)-[^\]]+)\]\](.*)/m.match(item.text)[1])
+                      end
+
+                      # Generate the table entry
+                      entry = {'vuid' => vuid, 'text' => text}
+
+                      # Initialize the database if necessary
+                      if map['validation'][parent] == nil
+                        map['validation'][parent] = {}
+                      end
+
+                      # Figure out the name of the section the entry will be added in
+                      if extensions == []
+                        entry_section = 'core'
+                      else
+                        entry_section = extensions.join('+')
+                      end
+
+                      # 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
+              end
+            end
+          end
+
+        end
+      end
+    end
+
+    # Print out a list of VUIDs that were not extracted
+    if detected_vuid_list.length != 0
+      error_found = true
+      puts 'VU Extraction Treeprocessor: ERROR - Extraction failure'
+      puts
+      puts 'Some VUIDs were not successfully extracted from the specification.'
+      puts 'This is usually down to them appearing outside of a refpage (open)'
+      puts 'block; try checking where they are included.'
+      puts 'The following VUIDs were not extracted:'
+      detected_vuid_list.each do |vuid|
+        puts "\t * " + vuid
+      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/registry/vulkan/config/vu-to-json/vu_schema.json b/registry/vulkan/config/vu-to-json/vu_schema.json
new file mode 100644
index 0000000..23b248f
--- /dev/null
+++ b/registry/vulkan/config/vu-to-json/vu_schema.json
@@ -0,0 +1,63 @@
+{
+	"$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": 2},
+				"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"
+									}
+								},
+								"required": [
+									"vuid",
+									"text"
+								]
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/registry/vulkan/config/vuid-expander.rb b/registry/vulkan/config/vuid-expander.rb
new file mode 100644
index 0000000..e279b1b
--- /dev/null
+++ b/registry/vulkan/config/vuid-expander.rb
@@ -0,0 +1,29 @@
+# Copyright 2020-2021 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/registry/vulkan/copyright-spec.txt b/registry/vulkan/copyright-spec.txt
new file mode 100644
index 0000000..a39ec49
--- /dev/null
+++ b/registry/vulkan/copyright-spec.txt
@@ -0,0 +1,83 @@
+Copyright 2014-2021 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.
+
+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, and which
+defines the terms 'Scope', 'Compliant Portion', and 'Necessary Patent Claims'.
+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.
+
+This Specification contains substantially unmodified functionality from, and is a
+successor to, Khronos specifications including OpenGL, OpenGL ES and OpenCL.
+
+Some parts of this Specification are purely informative and so are EXCLUDED from
+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>> 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.
+
+Where this Specification includes <<introduction-normative-references,
+normative references to external documents>>, only the specifically
+identified sections of those external documents are INCLUDED in the Scope of
+this Specification. If not created by Khronos, those external documents may
+contain contributions from non-members of Khronos not covered by the Khronos
+Intellectual Property Rights Policy.
+
+ifndef::ratified_core_spec[]
+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
+https://www.khronos.org/registry/vulkan/specs/1.2/html/vkspec.html (core
+only) and
+https://www.khronos.org/registry/vulkan/specs/1.2-khr-extensions/html/vkspec.html
+(core with KHR extensions).
+endif::ratified_core_spec[]
+
+Vulkan and Khronos are registered trademarks of The Khronos Group Inc.
+ASTC is a trademark of ARM Holdings PLC; OpenCL is a trademark of Apple
+Inc.; and OpenGL and OpenGL ES are registered trademarks of Hewlett Packard
+Enterprise, all used under license by Khronos. All other product names,
+trademarks, and/or company names are used solely for identification and
+belong to their respective owners.
diff --git a/registry/vulkan/gen-script-docs.sh b/registry/vulkan/gen-script-docs.sh
new file mode 100755
index 0000000..ef65d53
--- /dev/null
+++ b/registry/vulkan/gen-script-docs.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+# Copyright 2019-2021 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 out/python-docs
+
+set -e
+
+# Pipe in some paths. We'll 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 - can't import genRef.py without it.
+    make gen/api.py
+
+    SPECDIR=$(pwd)
+    OUTDIR=$(pwd)/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/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg b/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToReferencePictureSlot.svg
new file mode 100644
index 0000000..f58a57d
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg b/registry/vulkan/images/DecodeSessionDpbDecodeWithOutputToVkImageViewNoReferencePictureSlotUpdate.svg
new file mode 100644
index 0000000..f2b7d22
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/README.adoc b/registry/vulkan/images/README.adoc
new file mode 100644
index 0000000..1783431
--- /dev/null
+++ b/registry/vulkan/images/README.adoc
@@ -0,0 +1,46 @@
+// Copyright 2014-2021 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 don't 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/registry/vulkan/images/VideoDecodeSessionDpbStates.svg b/registry/vulkan/images/VideoDecodeSessionDpbStates.svg
new file mode 100644
index 0000000..a9899c1
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/accelstruct.svg b/registry/vulkan/images/accelstruct.svg
new file mode 100644
index 0000000..175ff40
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/base_image_sample_grid.svg b/registry/vulkan/images/base_image_sample_grid.svg
new file mode 100644
index 0000000..17d0832
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/bresenham.svg b/registry/vulkan/images/bresenham.svg
new file mode 100644
index 0000000..ca05bcb
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/chromasamples_420_xcosited_ycosited.svg b/registry/vulkan/images/chromasamples_420_xcosited_ycosited.svg
new file mode 100644
index 0000000..586ca58
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/chromasamples_420_xcosited_ymidpoint.svg b/registry/vulkan/images/chromasamples_420_xcosited_ymidpoint.svg
new file mode 100644
index 0000000..1c6b316
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/chromasamples_420_xmidpoint_ycosited.svg b/registry/vulkan/images/chromasamples_420_xmidpoint_ycosited.svg
new file mode 100644
index 0000000..b73f668
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/chromasamples_420_xmidpoint_ymidpoint.svg b/registry/vulkan/images/chromasamples_420_xmidpoint_ymidpoint.svg
new file mode 100644
index 0000000..31e9b68
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/chromasamples_422_cosited.svg b/registry/vulkan/images/chromasamples_422_cosited.svg
new file mode 100644
index 0000000..ea34dc1
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/chromasamples_422_midpoint.svg b/registry/vulkan/images/chromasamples_422_midpoint.svg
new file mode 100644
index 0000000..c82a4e5
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/commandbuffer_lifecycle.svg b/registry/vulkan/images/commandbuffer_lifecycle.svg
new file mode 100644
index 0000000..be6623f
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/fragment_mask.svg b/registry/vulkan/images/fragment_mask.svg
new file mode 100644
index 0000000..3141035
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/innerquad.svg b/registry/vulkan/images/innerquad.svg
new file mode 100644
index 0000000..04a6a19
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/innertri.svg b/registry/vulkan/images/innertri.svg
new file mode 100644
index 0000000..0868a3f
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/non_strict_lines.svg b/registry/vulkan/images/non_strict_lines.svg
new file mode 100644
index 0000000..0474685
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pipeline.svg b/registry/vulkan/images/pipeline.svg
new file mode 100644
index 0000000..bf223ae
--- /dev/null
+++ b/registry/vulkan/images/pipeline.svg
@@ -0,0 +1,1492 @@
+<?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="775.12067"
+   height="418"
+   viewBox="0 0 775.12066 418"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="pipeline.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker18097"
+       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="path18095"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17835"
+       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="path17833"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17557"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path17555"
+         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="marker17291"
+       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="path17289"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031"
+         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="marker16647"
+       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="path16645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker16415"
+       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="path16413"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker16189"
+       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="path16187"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker15937"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path15935"
+         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="marker12928"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path12926"
+         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="marker11520"
+       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="path11518"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11322"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path11320"
+         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="marker11128"
+       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="path11126"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker10596"
+       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="path10594"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9866"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9864"
+         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"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510"
+         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="marker8090"
+       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="path8088"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7360"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path7358"
+         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="marker7066"
+       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="path7064"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5106"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path5104"
+         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="marker7066-0"
+       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="path7064-8" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker7208-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       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="path7206-1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-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:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-01"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-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="marker17033-3-37"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-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>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-37-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-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="marker17033-3-37-7-8"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-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:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-01-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-8-44"
+         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-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path1382-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="marker5200-6"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path5198-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="marker17033-3-01-3-1"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-8-44-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="marker17033-3-37-7-8-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-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="marker17033-3-37-7-8-7-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-8-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)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-37-7-8-7-7-5"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-8-5-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)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-37-7-8-7-7-0"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-8-5-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="marker17033-3-37-7-8-7-7-0-51"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-8-5-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)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-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"
+     inkscape:cx="802.95319"
+     inkscape:cy="160.46629"
+     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="1137"
+     inkscape:window-x="478"
+     inkscape:window-y="424"
+     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="153.62068"
+       originy="-783.5" />
+  </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(38.615418,2.1124474)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2-4"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="269.3876" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-9-8"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994741"
+       y="159.38759" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="129.38759" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-9"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="99.387589" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="59.387589" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="-0.6124118" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994738"
+       y="29.387552" />
+    <text
+       id="text823"
+       y="74.351746"
+       x="84.9011"
+       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
+         id="tspan825"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="74.351746"
+         x="84.9011"
+         sodipodi:role="line">Vertex Shader</tspan></text>
+    <text
+       id="text823-4"
+       y="14.133646"
+       x="84.634171"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="14.133646"
+         x="84.634171"
+         sodipodi:role="line">Draw</tspan></text>
+    <text
+       id="text823-4-2"
+       y="43.111511"
+       x="84.539764"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="43.111511"
+         x="84.539764"
+         sodipodi:role="line">Input Assembler</tspan></text>
+    <text
+       id="text823-7"
+       y="114.35175"
+       x="84.985733"
+       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
+         id="tspan825-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="114.35175"
+         x="84.985733"
+         sodipodi:role="line">Tessellation Control Shader</tspan></text>
+    <text
+       id="text823-4-2-6-3"
+       y="144.35175"
+       x="84.985733"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-1-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="144.35175"
+         x="84.985733"
+         sodipodi:role="line">Tessellation Primitive Generator</tspan></text>
+    <text
+       id="text823-7-0"
+       y="174.35175"
+       x="84.985733"
+       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
+         id="tspan825-4-7"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="174.35175"
+         x="84.985733"
+         sodipodi:role="line">Tessellation Evaluation Shader</tspan></text>
+    <text
+       id="text823-4-2-8"
+       y="284.1662"
+       x="84.930397"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-9"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="284.1662"
+         x="84.930397"
+         sodipodi:role="line">Rasterization</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(#marker5106)"
+       d="m 85.005262,89.387553 -119.999999,-10e-7 V 229.38755 h 120"
+       id="path4474"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <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"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="-0.61244744" />
+    <text
+       id="text823-4-2-9-4-7"
+       y="14.384297"
+       x="354.53976"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="14.384297"
+         x="354.53976"
+         sodipodi:role="line">Indirect Buffer</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(#marker7360)"
+       d="m 235.00526,309.38755 v 60 h -40"
+       id="path7350"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <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(#marker8090)"
+       d="m 245.00526,344.38755 h -5 v -5 h -10 v 5 h -35"
+       id="path8837"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect8983"
+       width="220"
+       height="165"
+       x="245.00526"
+       y="99.38755" />
+    <text
+       id="text823-4-2-9-4-7-9-85"
+       y="112.9813"
+       x="354.63092"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="112.9813"
+         x="354.63092"
+         sodipodi:role="line">Descriptor Sets</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-start:url(#marker7066-0);marker-end:url(#marker7208-7)"
+       d="m 245.00526,399.38755 h -50"
+       id="path7056-3"
+       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)"
+       d="m 245.00526,9.3875524 h -50"
+       id="path9502"
+       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(#marker9866)"
+       d="m 245.00526,44.387553 h -50"
+       id="path9856"
+       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-start:url(#marker7066);marker-end:url(#marker10596)"
+       d="m 245.00526,309.38755 h -20 v -5 h -10 v 5 h -20"
+       id="path10568"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       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 245.00526,64.387553 h -25 v -20"
+       id="path11116"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <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(#marker11128)"
+       d="m 220.00526,109.38755 h -25"
+       id="path11118"
+       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(#marker11322)"
+       d="m 220.00526,169.38755 h -25"
+       id="path11312"
+       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(#marker11520)"
+       d="m 220.00526,209.38755 h -25"
+       id="path11510"
+       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-start:url(#marker12928);marker-end:url(#marker15937)"
+       d="m 195.00526,334.38755 h 25 l 0,-264.999997 h -25"
+       id="path15909"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       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 250.00526,129.38755 h -30"
+       id="path16167"
+       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"
+       d="m 250.00526,149.38755 h -30"
+       id="path16169"
+       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"
+       d="m 250.00526,169.38755 h -30"
+       id="path16171"
+       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"
+       d="m 250.00526,189.38755 h -30"
+       id="path16173"
+       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(#marker16647)"
+       d="m 220.00526,209.38755 h 30"
+       id="path16175"
+       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(#marker16189)"
+       d="m 220.00526,229.38755 h 30"
+       id="path16177"
+       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(#marker16415)"
+       d="m 220.00526,249.38755 h 30"
+       id="path16179"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023"
+       d="M 625.00526,19.387552 V 169.38755"
+       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)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17281"
+       d="m 490.00526,179.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(#marker17291)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17547"
+       d="m 460.00526,129.38755 h 30 v 120 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(#marker17557)"
+       sodipodi:nodetypes="cccc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17817"
+       d="m 460.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"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17819"
+       d="m 460.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"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17821"
+       d="m 460.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"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17823"
+       d="m 460.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-start:url(#marker18097)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17825"
+       d="m 460.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-start:url(#marker17835)"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect8983-1"
+       width="220.00002"
+       height="115.00001"
+       x="515.00525"
+       y="299.38754" />
+    <text
+       id="text823-4-2-9-4-7-9-85-3"
+       y="318.07571"
+       x="624.95642"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-7-3"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="318.07571"
+         x="624.95642"
+         sodipodi:role="line">Legend</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1"
+       d="m 85.005263,19.387552 v 9.728741"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-3"
+       d="m 85.005263,79.387552 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;marker-end:url(#marker17033-3-01)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4"
+       d="m 85.005263,49.387552 v 9.728741"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0"
+       d="m 85.005263,119.38755 v 9.72874"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9"
+       d="m 85.005263,149.52318 v 9.72874"
+       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)" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-9-8-4"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="199.38759" />
+    <text
+       id="text823-7-9-09"
+       y="213.11151"
+       x="84.611382"
+       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
+         id="tspan825-4-0-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="213.11151"
+         x="84.611382"
+         sodipodi:role="line">Geometry Shader</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-3-2"
+       d="m 85.005265,179.38755 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;marker-end:url(#marker17033-3-01-3)"
+       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-start:url(#Arrow1Mstart-3);marker-end:url(#marker5200-6)"
+       d="m 85.005263,189.38755 h -120"
+       id="path4476-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994741"
+       y="239.38759" />
+    <text
+       id="text823-4-8-5"
+       y="252.89015"
+       x="85.522842"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-9-2"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="252.89015"
+         x="85.522842"
+         sodipodi:role="line">Vertex Post-Processing</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-3-2-4"
+       d="m 85.005263,219.38755 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;marker-end:url(#marker17033-3-01-3-1)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1"
+       d="m 85.005265,259.52318 v 9.72874"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1-8"
+       d="m 85.005265,289.52318 v 9.72874"
+       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)" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2-4-1"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="299.3876" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-9-8-4-1"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="329.3876" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1-8-6"
+       d="m 85.005265,319.52318 v 9.72874"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1-8-3"
+       d="m 85.005265,349.52318 v 9.72874"
+       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)" />
+    <text
+       id="text823-4-5-3"
+       y="313.07571"
+       x="84.63092"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-7-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="313.07571"
+         x="84.63092"
+         sodipodi:role="line">Early Per-Fragment Tests</tspan></text>
+    <text
+       id="text823-7-9-0-6"
+       y="343.07571"
+       x="84.334686"
+       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
+         id="tspan825-4-0-0-3"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="343.07571"
+         x="84.334686"
+         sodipodi:role="line">Fragment Shader</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2-4-1-2"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="359.3876" />
+    <text
+       id="text823-4-5-5-7"
+       y="372.8576"
+       x="84.63092"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-7-7-9"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="372.8576"
+         x="84.63092"
+         sodipodi:role="line">Late Per-Fragment Tests</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1-8-3-2"
+       d="m 85.005265,379.52318 v 9.72874"
+       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)" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2-4-1-2-2"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="389.3876" />
+    <text
+       id="text823-4-2-9-4-3"
+       y="403.07571"
+       x="84.956436"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="403.07571"
+         x="84.956436"
+         sodipodi:role="line">Blending</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-0"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="59.387554" />
+    <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"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="39.387554" />
+    <text
+       id="text823-4-2-9-4-7-1"
+       y="54.384296"
+       x="354.53976"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-2"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="54.384296"
+         x="354.53976"
+         sodipodi:role="line">Index Buffer</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-3"
+       y="74.3843"
+       x="355.19733"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-9"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="74.3843"
+         x="355.19733"
+         sodipodi:role="line">Vertex Buffers</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="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-2"
+       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-3"
+       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-1"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="179.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="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-7"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="219.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="239.38757" />
+    <text
+       id="text823-4-2-9-4-7-9-65"
+       y="134.35175"
+       x="354.63092"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="134.35175"
+         x="354.63092"
+         sodipodi:role="line">Push Constants</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-3-0"
+       y="154.38429"
+       x="354.70255"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="154.38429"
+         x="354.70255"
+         sodipodi:role="line">Uniform Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-2-2"
+       y="174.38429"
+       x="354.70255"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="174.38429"
+         x="354.70255"
+         sodipodi:role="line">Uniform Texel Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-2"
+       y="193.0757"
+       x="354.84579"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="193.0757"
+         x="354.84579"
+         sodipodi:role="line">Sampled Images</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-0-8"
+       y="213.10826"
+       x="354.84579"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="213.10826"
+         x="354.84579"
+         sodipodi:role="line">Storage Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-8-1"
+       y="233.10826"
+       x="354.84579"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="233.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="252.9455"
+       x="354.84579"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="252.9455"
+         x="354.84579"
+         sodipodi:role="line">Storage Images</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-0"
+       width="220.00002"
+       height="19.999928"
+       x="515.00525"
+       y="169.38756" />
+    <text
+       id="text823-0"
+       y="184.35172"
+       x="624.90112"
+       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
+         id="tspan825-8"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="184.35172"
+         x="624.90112"
+         sodipodi:role="line">Compute Shader</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-6"
+       width="220.00002"
+       height="19.999928"
+       x="515.00525"
+       y="-0.61240721" />
+    <text
+       id="text823-4-0"
+       y="13.11151"
+       x="624.93042"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-2"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="13.11151"
+         x="624.93042"
+         sodipodi:role="line">Dispatch</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-6"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="299.38754" />
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4-5"
+       y="312.9455"
+       x="354.84576"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="312.9455"
+         x="354.84576"
+         sodipodi:role="line">Depth/Stencil Attachments</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-6-4"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="329.38754" />
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4-5-3"
+       y="342.9455"
+       x="354.84576"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6-4-0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="342.9455"
+         x="354.84576"
+         sodipodi:role="line">Input Attachments</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-6-2"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="389.38754" />
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4-5-6"
+       y="402.9455"
+       x="354.84576"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6-4-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="402.9455"
+         x="354.84576"
+         sodipodi:role="line">Color Attachments</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-26"
+       width="210.00002"
+       height="20.00001"
+       x="520.00525"
+       y="329.38754" />
+    <text
+       id="text823-4-8"
+       y="344.13358"
+       x="624.63416"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-1"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="344.13358"
+         x="624.63416"
+         sodipodi:role="line">Fixed Function Stage</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-0-5"
+       width="210.00002"
+       height="20.00001"
+       x="520.00525"
+       y="359.38754" />
+    <text
+       id="text823-0-2"
+       y="373.11151"
+       x="624.61139"
+       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
+         id="tspan825-8-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="373.11151"
+         x="624.61139"
+         sodipodi:role="line">Shader Stage</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-5-0"
+       width="210.00002"
+       height="19.999994"
+       x="520.00525"
+       y="389.38757" />
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4-9"
+       y="402.9455"
+       x="624.84583"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6-42"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="402.9455"
+         x="624.84583"
+         sodipodi:role="line">Resource</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)"
+       d="m 465.00526,9.3875526 h 50"
+       id="path9502-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/registry/vulkan/images/pipelinemesh.svg b/registry/vulkan/images/pipelinemesh.svg
new file mode 100644
index 0000000..0647d2f
--- /dev/null
+++ b/registry/vulkan/images/pipelinemesh.svg
@@ -0,0 +1,1776 @@
+<?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="874.4707"
+   height="448"
+   viewBox="0 0 874.4707 448"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="pipelinemesh.svg"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker19523"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path19521"
+         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="marker15681"
+       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="path15679"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker15357"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path15355"
+         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="marker15027"
+       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="path15025"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11209"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path11207"
+         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="marker10921"
+       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="path10919"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker10639"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path10637"
+         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="marker10363"
+       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="path10361"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker9769"
+       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="path9767"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9511"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         id="path9509"
+         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="marker18097"
+       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="path18095"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker17835"
+       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="path17833"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17557"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path17555"
+         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="marker17291"
+       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="path17289"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker16647"
+       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="path16645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker16415"
+       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="path16413"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker16189"
+       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="path16187"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker15937"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path15935"
+         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="marker12928"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path12926"
+         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="marker11520"
+       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="path11518"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11322"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path11320"
+         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="marker11128"
+       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="path11126"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker10596"
+       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="path10594"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9866"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9864"
+         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"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510"
+         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="marker8090"
+       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="path8088"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker7360"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path7358"
+         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="marker7066"
+       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="path7064"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5106"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path5104"
+         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="marker7066-0"
+       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="path7064-8" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker7208-7"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       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="path7206-1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-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:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-01"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-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="marker17033-3-37"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-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>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-37-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-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="marker17033-3-37-7-8"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-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:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-01-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-8-44"
+         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-3"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path1382-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="marker5200-6"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path5198-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="marker17033-3-01-3-1"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-8-44-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="marker17033-3-37-7-8-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-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="marker17033-3-37-7-8-7-7"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-8-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)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-37-7-8-7-7-5"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-8-5-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)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker17033-3-37-7-8-7-7-0"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-8-5-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="marker17033-3-37-7-8-7-7-0-51"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path17031-7-0-9-7-8-5-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)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker9512-2"
+       style="overflow:visible"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         id="path9510-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="1"
+     inkscape:cx="555.30883"
+     inkscape:cy="54.623986"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:snap-center="true"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-text-baseline="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1137"
+     inkscape:window-x="1578"
+     inkscape:window-y="348"
+     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="152.97068"
+       originy="-753.5" />
+  </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(37.965418,2.1124474)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2-4"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="299.3876" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-9-8"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994741"
+       y="179.38759" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="149.38759" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-9"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="119.38759" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="79.387589" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="-0.6124118" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994738"
+       y="49.38755" />
+    <text
+       id="text823"
+       y="94.351753"
+       x="84.9011"
+       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
+         id="tspan825"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="94.351753"
+         x="84.9011"
+         sodipodi:role="line">Vertex Shader</tspan></text>
+    <text
+       id="text823-4"
+       y="14.133646"
+       x="84.634171"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="14.133646"
+         x="84.634171"
+         sodipodi:role="line">Draw</tspan></text>
+    <text
+       id="text823-4-2"
+       y="63.111511"
+       x="84.539764"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="63.111511"
+         x="84.539764"
+         sodipodi:role="line">Input Assembler</tspan></text>
+    <text
+       id="text823-7"
+       y="134.35175"
+       x="84.985733"
+       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
+         id="tspan825-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="134.35175"
+         x="84.985733"
+         sodipodi:role="line">Tessellation Control Shader</tspan></text>
+    <text
+       id="text823-4-2-6-3"
+       y="164.35175"
+       x="84.985733"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-1-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="164.35175"
+         x="84.985733"
+         sodipodi:role="line">Tessellation Primitive Generator</tspan></text>
+    <text
+       id="text823-7-0"
+       y="194.35175"
+       x="84.985733"
+       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
+         id="tspan825-4-7"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="194.35175"
+         x="84.985733"
+         sodipodi:role="line">Tessellation Evaluation Shader</tspan></text>
+    <text
+       id="text823-4-2-8"
+       y="314.1662"
+       x="84.930397"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-9"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="314.1662"
+         x="84.930397"
+         sodipodi:role="line">Rasterization</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(#marker5106)"
+       d="M 85.005262,109.38755 H -34.994737 v 140 h 120"
+       id="path4474"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <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"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="-0.61244744" />
+    <text
+       id="text823-4-2-9-4-7"
+       y="14.384297"
+       x="354.53976"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="14.384297"
+         x="354.53976"
+         sodipodi:role="line">Indirect Buffer</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(#marker7360)"
+       d="m 235.00526,339.38755 v 60 h -40"
+       id="path7350"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <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(#marker8090)"
+       d="m 245.00526,374.38755 h -5 v -5 h -10 v 5 h -35"
+       id="path8837"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect8983"
+       width="220"
+       height="165"
+       x="245.00526"
+       y="99.38755" />
+    <text
+       id="text823-4-2-9-4-7-9-85"
+       y="112.9813"
+       x="354.63092"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="112.9813"
+         x="354.63092"
+         sodipodi:role="line">Descriptor Sets</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-start:url(#marker7066-0);marker-end:url(#marker7208-7)"
+       d="m 245.00526,429.38755 h -50"
+       id="path7056-3"
+       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)"
+       d="m 245.00526,9.3875524 h -50"
+       id="path9502"
+       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(#marker9866)"
+       d="m 220.00526,59.387553 h -25"
+       id="path9856"
+       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-start:url(#marker7066);marker-end:url(#marker10596)"
+       d="m 245.00526,339.38755 h -20 v -5 h -10 v 5 h -20"
+       id="path10568"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       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 245.00526,49.387553 h -25 v 20 h 25"
+       id="path11116"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <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(#marker11128)"
+       d="m 220.00526,129.38755 h -25"
+       id="path11118"
+       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(#marker11322)"
+       d="m 220.00526,189.38755 h -25"
+       id="path11312"
+       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(#marker11520)"
+       d="m 220.00526,229.38755 h -25"
+       id="path11510"
+       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-start:url(#marker12928);marker-end:url(#marker15937)"
+       d="m 195.00526,364.38755 h 25 V 89.387553 h -25"
+       id="path15909"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       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 250.00526,129.38755 h -30"
+       id="path16167"
+       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"
+       d="m 250.00526,149.38755 h -30"
+       id="path16169"
+       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"
+       d="m 250.00526,169.38755 h -30"
+       id="path16171"
+       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"
+       d="m 250.00526,189.38755 h -30"
+       id="path16173"
+       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(#marker16647)"
+       d="m 220.00526,209.38755 h 30"
+       id="path16175"
+       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(#marker16189)"
+       d="m 220.00526,229.38755 h 30"
+       id="path16177"
+       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(#marker16415)"
+       d="m 220.00526,249.38755 h 30"
+       id="path16179"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17281"
+       d="M 490.00526,129.38755 V 59.387553 h 90 v -5 h 10 v 5 h 105"
+       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)"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17547"
+       d="m 460.00526,129.38755 h 30 v 120 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(#marker17557)"
+       sodipodi:nodetypes="cccc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17817"
+       d="m 460.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"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17819"
+       d="m 460.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"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17821"
+       d="m 460.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"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17823"
+       d="m 460.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-start:url(#marker18097)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17825"
+       d="m 460.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-start:url(#marker17835)"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect8983-1"
+       width="220.00002"
+       height="115.00001"
+       x="615.00525"
+       y="329.38754" />
+    <text
+       id="text823-4-2-9-4-7-9-85-3"
+       y="348.07571"
+       x="724.95642"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-7-3"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="348.07571"
+         x="724.95642"
+         sodipodi:role="line">Legend</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1"
+       d="m 85.005262,19.387553 10e-7,29.72874"
+       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)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-3"
+       d="m 85.005263,99.38755 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;marker-end:url(#marker17033-3-01)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4"
+       d="m 85.005263,69.387552 v 9.728741"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0"
+       d="m 85.005263,139.38755 v 9.72874"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9"
+       d="m 85.005263,169.52318 v 9.72874"
+       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)" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-9-8-4"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="219.38759" />
+    <text
+       id="text823-7-9-09"
+       y="233.11151"
+       x="84.611382"
+       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
+         id="tspan825-4-0-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="233.11151"
+         x="84.611382"
+         sodipodi:role="line">Geometry Shader</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-3-2"
+       d="m 85.005265,199.38755 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;marker-end:url(#marker17033-3-01-3)"
+       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-start:url(#Arrow1Mstart-3);marker-end:url(#marker5200-6)"
+       d="m 85.005263,209.38755 h -120"
+       id="path4476-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994741"
+       y="269.38757" />
+    <text
+       id="text823-4-8-5"
+       y="282.89014"
+       x="85.522842"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-9-2"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="282.89014"
+         x="85.522842"
+         sodipodi:role="line">Vertex Post-Processing</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-3-2-4"
+       d="m 85.005263,239.38755 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;marker-end:url(#marker17033-3-01-3-1)"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1"
+       d="m 85.005265,289.52318 v 9.72874"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1-8"
+       d="m 85.005265,319.52318 v 9.72874"
+       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)" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2-4-1"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="329.3876" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-9-8-4-1"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="359.3876" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1-8-6"
+       d="m 85.005265,349.52318 v 9.72874"
+       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)" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1-8-3"
+       d="m 85.005265,379.52318 v 9.72874"
+       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)" />
+    <text
+       id="text823-4-5-3"
+       y="343.07571"
+       x="84.63092"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-7-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="343.07571"
+         x="84.63092"
+         sodipodi:role="line">Early Per-Fragment Tests</tspan></text>
+    <text
+       id="text823-7-9-0-6"
+       y="373.07571"
+       x="84.334686"
+       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
+         id="tspan825-4-0-0-3"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="373.07571"
+         x="84.334686"
+         sodipodi:role="line">Fragment Shader</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2-4-1-2"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="389.3876" />
+    <text
+       id="text823-4-5-5-7"
+       y="402.8576"
+       x="84.63092"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-7-7-9"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="402.8576"
+         x="84.63092"
+         sodipodi:role="line">Late Per-Fragment Tests</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path17023-1-4-0-9-1-8-3-2"
+       d="m 85.005265,409.52318 v 9.72874"
+       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)" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-1-2-4-1-2-2"
+       width="220.00002"
+       height="19.999928"
+       x="-24.994745"
+       y="419.3876" />
+    <text
+       id="text823-4-2-9-4-3"
+       y="433.07571"
+       x="84.956436"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="433.07571"
+         x="84.956436"
+         sodipodi:role="line">Blending</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-0"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="59.387554" />
+    <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"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="39.387554" />
+    <text
+       id="text823-4-2-9-4-7-1"
+       y="54.384296"
+       x="354.53976"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-2"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="54.384296"
+         x="354.53976"
+         sodipodi:role="line">Index Buffer</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-3"
+       y="74.3843"
+       x="355.19733"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-9"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="74.3843"
+         x="355.19733"
+         sodipodi:role="line">Vertex Buffers</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="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-2"
+       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-3"
+       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-1"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="179.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="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-7"
+       width="210.00002"
+       height="19.999994"
+       x="250.00526"
+       y="219.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="239.38757" />
+    <text
+       id="text823-4-2-9-4-7-9-65"
+       y="134.35175"
+       x="354.63092"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="134.35175"
+         x="354.63092"
+         sodipodi:role="line">Push Constants</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-3-0"
+       y="154.38429"
+       x="354.70255"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="154.38429"
+         x="354.70255"
+         sodipodi:role="line">Uniform Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-2-2"
+       y="174.38429"
+       x="354.70255"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="174.38429"
+         x="354.70255"
+         sodipodi:role="line">Uniform Texel Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-2"
+       y="193.0757"
+       x="354.84579"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="193.0757"
+         x="354.84579"
+         sodipodi:role="line">Sampled Images</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-0-8"
+       y="213.10826"
+       x="354.84579"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="213.10826"
+         x="354.84579"
+         sodipodi:role="line">Storage Buffers</tspan></text>
+    <text
+       id="text823-4-2-9-4-7-9-8-8-1"
+       y="233.10826"
+       x="354.84579"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="233.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="252.9455"
+       x="354.84579"
+       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"
+       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.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="252.9455"
+         x="354.84579"
+         sodipodi:role="line">Storage Images</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-0"
+       width="140.00005"
+       height="19.999928"
+       x="515.00525"
+       y="119.38759" />
+    <text
+       id="text823-0"
+       y="134.35175"
+       x="584.98572"
+       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
+         id="tspan825-8"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="134.35175"
+         x="584.98572"
+         sodipodi:role="line">Task Shader</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-6"
+       width="140.00005"
+       height="19.999928"
+       x="515.00525"
+       y="-0.61240721" />
+    <text
+       id="text823-4-0"
+       y="13.111511"
+       x="584.93042"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-2"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="13.111511"
+         x="584.93042"
+         sodipodi:role="line">DrawMeshTasks</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-6"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="329.38754" />
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4-5"
+       y="342.9455"
+       x="354.84576"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="342.9455"
+         x="354.84576"
+         sodipodi:role="line">Depth/Stencil Attachments</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-6-4"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="359.38754" />
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4-5-3"
+       y="372.9455"
+       x="354.84576"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6-4-0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="372.9455"
+         x="354.84576"
+         sodipodi:role="line">Input Attachments</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-6-2"
+       width="220"
+       height="20"
+       x="245.00526"
+       y="419.38754" />
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4-5-6"
+       y="432.9455"
+       x="354.84576"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6-4-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="432.9455"
+         x="354.84576"
+         sodipodi:role="line">Color Attachments</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-26"
+       width="210.00002"
+       height="20.00001"
+       x="620.00525"
+       y="359.38754" />
+    <text
+       id="text823-4-8"
+       y="374.13358"
+       x="724.63416"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-1"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="374.13358"
+         x="724.63416"
+         sodipodi:role="line">Fixed Function Stage</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89574087;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-0-5"
+       width="210.00002"
+       height="20.00001"
+       x="620.00525"
+       y="389.38754" />
+    <text
+       id="text823-0-2"
+       y="403.11151"
+       x="724.61139"
+       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
+         id="tspan825-8-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="403.11151"
+         x="724.61139"
+         sodipodi:role="line">Shader Stage</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-5-0"
+       width="210.00002"
+       height="19.999994"
+       x="620.00525"
+       y="419.38757" />
+    <text
+       id="text823-4-2-9-4-7-9-8-05-4-9"
+       y="432.9455"
+       x="724.84583"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-2-5-6-26-5-3-6-42"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="432.9455"
+         x="724.84583"
+         sodipodi:role="line"> Resource</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)"
+       d="m 465.00526,9.3875526 h 50"
+       id="path9502-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-0-0"
+       width="140.00005"
+       height="19.999928"
+       x="695.00519"
+       y="49.387558" />
+    <text
+       id="text823-0-5"
+       y="63.111511"
+       x="764.61139"
+       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
+         id="tspan825-8-6"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986;stroke-miterlimit:4;stroke-dasharray:none"
+         y="63.111511"
+         x="764.61139"
+         sodipodi:role="line">Compute Shader</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-6-0"
+       width="140.00005"
+       height="19.999928"
+       x="695.00519"
+       y="-0.61240697" />
+    <text
+       id="text823-4-0-3"
+       y="13.111515"
+       x="764.93036"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-2-2"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="13.111515"
+         x="764.93036"
+         sodipodi:role="line">Dispatch</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-3-0-8"
+       width="140.00005"
+       height="19.999928"
+       x="514.35425"
+       y="219.38757" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-9"
+       width="140.00002"
+       height="19.999928"
+       x="515.00525"
+       y="89.387589" />
+    <text
+       id="text823-4-2-83"
+       y="104.35175"
+       x="584.98572"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-4"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="104.35175"
+         x="584.98572"
+         sodipodi:role="line">Task Assembler</tspan></text>
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.89600003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect815-1-2-9-1"
+       width="140.00002"
+       height="19.999928"
+       x="514.35425"
+       y="189.38757" />
+    <text
+       id="text823-4-2-83-4"
+       y="204.35175"
+       x="584.33472"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-4-8"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="204.35175"
+         x="584.33472"
+         sodipodi:role="line">Mesh Assembler</tspan></text>
+    <text
+       id="text823-4-2-83-4-8"
+       y="234.35173"
+       x="583.68372"
+       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"
+       xml:space="preserve"><tspan
+         id="tspan825-6-0-4-8-9"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures: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.26999986"
+         y="234.35173"
+         x="583.68372"
+         sodipodi:role="line">Mesh Shader</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9511)"
+       d="m 585.00526,19.387553 v 70"
+       id="path9501"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker9769)"
+       d="m 585.00526,109.38755 v 10"
+       id="path9759"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10363)"
+       d="m 585.00526,79.387553 h 80 v 69.999997 h -80"
+       id="path10353"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10639)"
+       d="m 585.00526,139.38755 v 50"
+       id="path10629"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker10921)"
+       d="m 584.3542,209.38753 v 10"
+       id="path10911"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker11209)"
+       d="m 585.00526,239.38755 v 40 h -360 v -5 h -10 v 5 h -20"
+       id="path11199"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15027)"
+       d="M 490.00526,9.3875526 V 29.387553 h 90 v -5 h 10 v 5 h 85 V 9.3875526 h 20"
+       id="path15017"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15357)"
+       d="m 490.00526,129.38755 23.98327,-0.0793"
+       id="path15347"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker15681)"
+       d="m 489.3542,229.38753 24.69038,0.0769"
+       id="path15671"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker19523)"
+       d="m 760.00526,19.387553 0,30"
+       id="path21617"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/registry/vulkan/images/pixel_index_1x1.svg b/registry/vulkan/images/pixel_index_1x1.svg
new file mode 100644
index 0000000..badc184
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pixel_index_1x2.svg b/registry/vulkan/images/pixel_index_1x2.svg
new file mode 100644
index 0000000..5ae23af
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pixel_index_1x4.svg b/registry/vulkan/images/pixel_index_1x4.svg
new file mode 100644
index 0000000..87e8f78
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pixel_index_2x1.svg b/registry/vulkan/images/pixel_index_2x1.svg
new file mode 100644
index 0000000..6a9ee26
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pixel_index_2x2.svg b/registry/vulkan/images/pixel_index_2x2.svg
new file mode 100644
index 0000000..67474cf
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pixel_index_2x4.svg b/registry/vulkan/images/pixel_index_2x4.svg
new file mode 100644
index 0000000..2fb6e49
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pixel_index_4x1.svg b/registry/vulkan/images/pixel_index_4x1.svg
new file mode 100644
index 0000000..cd94695
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pixel_index_4x2.svg b/registry/vulkan/images/pixel_index_4x2.svg
new file mode 100644
index 0000000..9ae27fe
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/pixel_index_4x4.svg b/registry/vulkan/images/pixel_index_4x4.svg
new file mode 100644
index 0000000..73c0738
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_key_adjacency_edge.svg b/registry/vulkan/images/primitive_topology_key_adjacency_edge.svg
new file mode 100644
index 0000000..0ab1a88
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_key_edge.svg b/registry/vulkan/images/primitive_topology_key_edge.svg
new file mode 100644
index 0000000..d954122
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_key_provoking_vertex.svg b/registry/vulkan/images/primitive_topology_key_provoking_vertex.svg
new file mode 100644
index 0000000..bfeca33
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_key_vertex.svg b/registry/vulkan/images/primitive_topology_key_vertex.svg
new file mode 100644
index 0000000..9f71fcb
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_key_vertex_number.svg b/registry/vulkan/images/primitive_topology_key_vertex_number.svg
new file mode 100644
index 0000000..35b432f
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_key_winding_order.svg b/registry/vulkan/images/primitive_topology_key_winding_order.svg
new file mode 100644
index 0000000..139675d
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_line_list.svg b/registry/vulkan/images/primitive_topology_line_list.svg
new file mode 100644
index 0000000..ff4710d
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_line_list_last.svg b/registry/vulkan/images/primitive_topology_line_list_last.svg
new file mode 100644
index 0000000..f1afd4b
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_line_list_with_adjacency.svg b/registry/vulkan/images/primitive_topology_line_list_with_adjacency.svg
new file mode 100644
index 0000000..2976295
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_line_list_with_adjacency_last.svg b/registry/vulkan/images/primitive_topology_line_list_with_adjacency_last.svg
new file mode 100644
index 0000000..938b50b
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_line_strip.svg b/registry/vulkan/images/primitive_topology_line_strip.svg
new file mode 100644
index 0000000..a54fabb
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_line_strip_last.svg b/registry/vulkan/images/primitive_topology_line_strip_last.svg
new file mode 100644
index 0000000..3675568
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_line_strip_with_adjacency.svg b/registry/vulkan/images/primitive_topology_line_strip_with_adjacency.svg
new file mode 100644
index 0000000..aeecd76
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_line_strip_with_adjacency_last.svg b/registry/vulkan/images/primitive_topology_line_strip_with_adjacency_last.svg
new file mode 100644
index 0000000..986b1b4
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_point_list.svg b/registry/vulkan/images/primitive_topology_point_list.svg
new file mode 100644
index 0000000..44c1371
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_fan.svg b/registry/vulkan/images/primitive_topology_triangle_fan.svg
new file mode 100644
index 0000000..79315f8
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_fan_last.svg b/registry/vulkan/images/primitive_topology_triangle_fan_last.svg
new file mode 100644
index 0000000..7fcf9cb
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_list.svg b/registry/vulkan/images/primitive_topology_triangle_list.svg
new file mode 100644
index 0000000..86fbe83
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_list_last.svg b/registry/vulkan/images/primitive_topology_triangle_list_last.svg
new file mode 100644
index 0000000..c9b7b58
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency.svg b/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency.svg
new file mode 100644
index 0000000..fc240d4
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency_last.svg b/registry/vulkan/images/primitive_topology_triangle_list_with_adjacency_last.svg
new file mode 100644
index 0000000..236238b
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_strip.svg b/registry/vulkan/images/primitive_topology_triangle_strip.svg
new file mode 100644
index 0000000..964174d
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_strip_last.svg b/registry/vulkan/images/primitive_topology_triangle_strip_last.svg
new file mode 100644
index 0000000..cde5f46
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency.svg b/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency.svg
new file mode 100644
index 0000000..5defb88
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency_last.svg b/registry/vulkan/images/primitive_topology_triangle_strip_with_adjacency_last.svg
new file mode 100644
index 0000000..e23948a
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/ray_intersection_candidate.svg b/registry/vulkan/images/ray_intersection_candidate.svg
new file mode 100644
index 0000000..13cb7c2
--- /dev/null
+++ b/registry/vulkan/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 doesn't 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/registry/vulkan/images/ray_tracing_execution.svg b/registry/vulkan/images/ray_tracing_execution.svg
new file mode 100644
index 0000000..079f41c
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/sample_count_1.svg b/registry/vulkan/images/sample_count_1.svg
new file mode 100644
index 0000000..bfae69c
--- /dev/null
+++ b/registry/vulkan/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>
+		<!-- Axises -->
+		<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/registry/vulkan/images/sample_count_16.svg b/registry/vulkan/images/sample_count_16.svg
new file mode 100644
index 0000000..ce38c9b
--- /dev/null
+++ b/registry/vulkan/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>
+		<!-- Axises -->
+		<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/registry/vulkan/images/sample_count_2.svg b/registry/vulkan/images/sample_count_2.svg
new file mode 100644
index 0000000..91fd4d9
--- /dev/null
+++ b/registry/vulkan/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>
+		<!-- Axises -->
+		<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/registry/vulkan/images/sample_count_4.svg b/registry/vulkan/images/sample_count_4.svg
new file mode 100644
index 0000000..f4bcc7e
--- /dev/null
+++ b/registry/vulkan/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>
+		<!-- Axises -->
+		<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/registry/vulkan/images/sample_count_8.svg b/registry/vulkan/images/sample_count_8.svg
new file mode 100644
index 0000000..0a86371
--- /dev/null
+++ b/registry/vulkan/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>
+		<!-- Axises -->
+		<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/registry/vulkan/images/sparseimage.svg b/registry/vulkan/images/sparseimage.svg
new file mode 100644
index 0000000..1cf04ea
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/sparseimage_alignedmipsize.svg b/registry/vulkan/images/sparseimage_alignedmipsize.svg
new file mode 100644
index 0000000..db50839
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/sparseimage_alignedmipsize_singlemiptail.svg b/registry/vulkan/images/sparseimage_alignedmipsize_singlemiptail.svg
new file mode 100644
index 0000000..74707a3
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/sparseimage_multiaspect.svg b/registry/vulkan/images/sparseimage_multiaspect.svg
new file mode 100644
index 0000000..810fbf6
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/sparseimage_singlemiptail.svg b/registry/vulkan/images/sparseimage_singlemiptail.svg
new file mode 100644
index 0000000..70533e0
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/tessparam.svg b/registry/vulkan/images/tessparam.svg
new file mode 100644
index 0000000..42279f0
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/tessparamUL.svg b/registry/vulkan/images/tessparamUL.svg
new file mode 100644
index 0000000..779e538
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/vulkantexture0-corner-alternative-a-ll.svg b/registry/vulkan/images/vulkantexture0-corner-alternative-a-ll.svg
new file mode 100644
index 0000000..e25a550
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/vulkantexture0-ll.svg b/registry/vulkan/images/vulkantexture0-ll.svg
new file mode 100644
index 0000000..765293d
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/vulkantexture0.svg b/registry/vulkan/images/vulkantexture0.svg
new file mode 100644
index 0000000..b3c1d6c
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/vulkantexture1-ll.svg b/registry/vulkan/images/vulkantexture1-ll.svg
new file mode 100644
index 0000000..e5dc411
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/images/vulkantexture1.svg b/registry/vulkan/images/vulkantexture1.svg
new file mode 100644
index 0000000..fc5a04a
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/include/vk_video/vulkan_video_codec_h264std.h b/registry/vulkan/include/vk_video/vulkan_video_codec_h264std.h
new file mode 100644
index 0000000..3338fe1
--- /dev/null
+++ b/registry/vulkan/include/vk_video/vulkan_video_codec_h264std.h
@@ -0,0 +1,312 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_H_
+#define VULKAN_VIDEO_CODEC_H264STD_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codecs_common.h"
+
+// Vulkan 0.9 provisional Vulkan video H.264 encode and decode std specification version number
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9_5 VK_MAKE_VIDEO_STD_VERSION(0, 9, 5) // Patch version should always be set to 0
+
+// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_SPEC_VERSION   VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9_5
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264"
+
+// *************************************************
+// Video H.264 common definitions:
+// *************************************************
+
+#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32
+#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6
+#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16
+#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 2
+#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64
+
+typedef enum StdVideoH264ChromaFormatIdc {
+    STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME  = 0,
+    STD_VIDEO_H264_CHROMA_FORMAT_IDC_420         = 1,
+    STD_VIDEO_H264_CHROMA_FORMAT_IDC_422         = 2,
+    STD_VIDEO_H264_CHROMA_FORMAT_IDC_444         = 3,
+    STD_VIDEO_H264_CHROMA_FORMAT_IDC_INVALID     = 0x7FFFFFFF
+} StdVideoH264ChromaFormatIdc;
+
+typedef enum StdVideoH264ProfileIdc {
+    STD_VIDEO_H264_PROFILE_IDC_BASELINE             = 66, /* Only constrained baseline is supported */
+    STD_VIDEO_H264_PROFILE_IDC_MAIN                 = 77,
+    STD_VIDEO_H264_PROFILE_IDC_HIGH                 = 100,
+    STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE  = 244,
+    STD_VIDEO_H264_PROFILE_IDC_INVALID              = 0x7FFFFFFF
+} StdVideoH264ProfileIdc;
+
+typedef enum StdVideoH264Level {
+    STD_VIDEO_H264_LEVEL_1_0 = 0,
+    STD_VIDEO_H264_LEVEL_1_1 = 1,
+    STD_VIDEO_H264_LEVEL_1_2 = 2,
+    STD_VIDEO_H264_LEVEL_1_3 = 3,
+    STD_VIDEO_H264_LEVEL_2_0 = 4,
+    STD_VIDEO_H264_LEVEL_2_1 = 5,
+    STD_VIDEO_H264_LEVEL_2_2 = 6,
+    STD_VIDEO_H264_LEVEL_3_0 = 7,
+    STD_VIDEO_H264_LEVEL_3_1 = 8,
+    STD_VIDEO_H264_LEVEL_3_2 = 9,
+    STD_VIDEO_H264_LEVEL_4_0 = 10,
+    STD_VIDEO_H264_LEVEL_4_1 = 11,
+    STD_VIDEO_H264_LEVEL_4_2 = 12,
+    STD_VIDEO_H264_LEVEL_5_0 = 13,
+    STD_VIDEO_H264_LEVEL_5_1 = 14,
+    STD_VIDEO_H264_LEVEL_5_2 = 15,
+    STD_VIDEO_H264_LEVEL_6_0 = 16,
+    STD_VIDEO_H264_LEVEL_6_1 = 17,
+    STD_VIDEO_H264_LEVEL_6_2 = 18,
+    STD_VIDEO_H264_LEVEL_INVALID = 0x7FFFFFFF
+} StdVideoH264Level;
+
+typedef enum StdVideoH264PocType {
+    STD_VIDEO_H264_POC_TYPE_0 = 0,
+    STD_VIDEO_H264_POC_TYPE_1 = 1,
+    STD_VIDEO_H264_POC_TYPE_2 = 2,
+    STD_VIDEO_H264_POC_TYPE_INVALID = 0x7FFFFFFF
+} StdVideoH264PocType;
+
+typedef enum StdVideoH264AspectRatioIdc {
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_UNSPECIFIED = 0,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_SQUARE = 1,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_12_11 = 2,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_10_11 = 3,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_16_11 = 4,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_40_33 = 5,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_24_11 = 6,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_20_11 = 7,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_32_11 = 8,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_80_33 = 9,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_18_11 = 10,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_15_11 = 11,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_64_33 = 12,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_160_99 = 13,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_4_3 = 14,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_3_2 = 15,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_2_1 = 16,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR = 255,
+    STD_VIDEO_H264_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF
+} StdVideoH264AspectRatioIdc;
+
+typedef enum StdVideoH264WeightedBipredIdc {
+    STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_DEFAULT  = 0,
+    STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT = 1,
+    STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT = 2,
+    STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_INVALID = 0x7FFFFFFF
+} StdVideoH264WeightedBipredIdc;
+
+typedef enum StdVideoH264ModificationOfPicNumsIdc {
+    STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_SUBTRACT = 0,
+    STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_ADD = 1,
+    STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LONG_TERM = 2,
+    STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_END = 3,
+    STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_INVALID = 0x7FFFFFFF
+} StdVideoH264ModificationOfPicNumsIdc;
+
+typedef enum StdVideoH264MemMgmtControlOp {
+    STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_END = 0,
+    STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_SHORT_TERM = 1,
+    STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_LONG_TERM = 2,
+    STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_LONG_TERM = 3,
+    STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_SET_MAX_LONG_TERM_INDEX = 4,
+    STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_ALL = 5,
+    STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_CURRENT_AS_LONG_TERM = 6,
+    STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_INVALID = 0x7FFFFFFF
+} StdVideoH264MemMgmtControlOp;
+
+typedef enum StdVideoH264CabacInitIdc {
+    STD_VIDEO_H264_CABAC_INIT_IDC_0 = 0,
+    STD_VIDEO_H264_CABAC_INIT_IDC_1 = 1,
+    STD_VIDEO_H264_CABAC_INIT_IDC_2 = 2,
+    STD_VIDEO_H264_CABAC_INIT_IDC_INVALID = 0x7FFFFFFF
+} StdVideoH264CabacInitIdc;
+
+typedef enum StdVideoH264DisableDeblockingFilterIdc {
+    STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED = 0,
+    STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED = 1,
+    STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL = 2,
+    STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_INVALID = 0x7FFFFFFF
+} StdVideoH264DisableDeblockingFilterIdc;
+
+typedef enum StdVideoH264SliceType {
+    STD_VIDEO_H264_SLICE_TYPE_P  = 0,
+    STD_VIDEO_H264_SLICE_TYPE_B  = 1,
+    STD_VIDEO_H264_SLICE_TYPE_I  = 2,
+    // reserved STD_VIDEO_H264_SLICE_TYPE_SP = 3,
+    // reserved STD_VIDEO_H264_SLICE_TYPE_SI = 4,
+    STD_VIDEO_H264_SLICE_TYPE_INVALID = 0x7FFFFFFF
+} StdVideoH264SliceType;
+
+typedef enum StdVideoH264PictureType {
+    STD_VIDEO_H264_PICTURE_TYPE_P   = 0,
+    STD_VIDEO_H264_PICTURE_TYPE_B   = 1,
+    STD_VIDEO_H264_PICTURE_TYPE_I   = 2,
+    // reserved STD_VIDEO_H264_PICTURE_TYPE_SP  = 3,
+    // reserved STD_VIDEO_H264_PICTURE_TYPE_SI  = 4,
+    STD_VIDEO_H264_PICTURE_TYPE_IDR = 5,
+    STD_VIDEO_H264_PICTURE_TYPE_INVALID = 0x7FFFFFFF
+} StdVideoH264PictureType;
+
+typedef enum StdVideoH264NonVclNaluType {
+    STD_VIDEO_H264_NON_VCL_NALU_TYPE_SPS = 0,
+    STD_VIDEO_H264_NON_VCL_NALU_TYPE_PPS = 1,
+    STD_VIDEO_H264_NON_VCL_NALU_TYPE_AUD = 2,
+    STD_VIDEO_H264_NON_VCL_NALU_TYPE_PREFIX = 3,
+    STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_SEQUENCE = 4,
+    STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_STREAM = 5,
+    STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED = 6,
+    STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID = 0x7FFFFFFF
+} StdVideoH264NonVclNaluType;
+
+typedef struct StdVideoH264SpsVuiFlags {
+    uint32_t aspect_ratio_info_present_flag : 1;
+    uint32_t overscan_info_present_flag : 1;
+    uint32_t overscan_appropriate_flag : 1;
+    uint32_t video_signal_type_present_flag : 1;
+    uint32_t video_full_range_flag : 1;
+    uint32_t color_description_present_flag : 1;
+    uint32_t chroma_loc_info_present_flag : 1;
+    uint32_t timing_info_present_flag : 1;
+    uint32_t fixed_frame_rate_flag : 1;
+    uint32_t bitstream_restriction_flag : 1;
+    uint32_t nal_hrd_parameters_present_flag : 1;
+    uint32_t vcl_hrd_parameters_present_flag : 1;
+} StdVideoH264SpsVuiFlags;
+
+typedef struct StdVideoH264HrdParameters { // hrd_parameters
+    uint8_t                    cpb_cnt_minus1;
+    uint8_t                    bit_rate_scale;
+    uint8_t                    cpb_size_scale;
+    uint32_t                   bit_rate_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; // cpb_cnt_minus1 number of valid elements
+    uint32_t                   cpb_size_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; // cpb_cnt_minus1 number of valid elements
+    uint8_t                    cbr_flag[STD_VIDEO_H264_CPB_CNT_LIST_SIZE];              // cpb_cnt_minus1 number of valid elements
+    uint32_t                   initial_cpb_removal_delay_length_minus1;
+    uint32_t                   cpb_removal_delay_length_minus1;
+    uint32_t                   dpb_output_delay_length_minus1;
+    uint32_t                   time_offset_length;
+} StdVideoH264HrdParameters;
+
+typedef struct StdVideoH264SequenceParameterSetVui {
+    StdVideoH264AspectRatioIdc  aspect_ratio_idc;
+    uint16_t                    sar_width;
+    uint16_t                    sar_height;
+    uint8_t                     video_format;
+    uint8_t                     color_primaries;
+    uint8_t                     transfer_characteristics;
+    uint8_t                     matrix_coefficients;
+    uint32_t                    num_units_in_tick;
+    uint32_t                    time_scale;
+    StdVideoH264HrdParameters*  pHrdParameters;    // must be a valid ptr to hrd_parameters, if nal_hrd_parameters_present_flag or vcl_hrd_parameters_present_flag are set
+    uint8_t                     max_num_reorder_frames;
+    uint8_t                     max_dec_frame_buffering;
+    StdVideoH264SpsVuiFlags     flags;
+} StdVideoH264SequenceParameterSetVui;
+
+typedef struct StdVideoH264SpsFlags {
+    uint32_t constraint_set0_flag : 1;
+    uint32_t constraint_set1_flag : 1;
+    uint32_t constraint_set2_flag : 1;
+    uint32_t constraint_set3_flag : 1;
+    uint32_t constraint_set4_flag : 1;
+    uint32_t constraint_set5_flag : 1;
+    uint32_t direct_8x8_inference_flag : 1;
+    uint32_t mb_adaptive_frame_field_flag : 1;
+    uint32_t frame_mbs_only_flag : 1;
+    uint32_t delta_pic_order_always_zero_flag : 1;
+    uint32_t separate_colour_plane_flag : 1;
+    uint32_t gaps_in_frame_num_value_allowed_flag : 1;
+    uint32_t qpprime_y_zero_transform_bypass_flag : 1;
+    uint32_t frame_cropping_flag : 1;
+    uint32_t seq_scaling_matrix_present_flag : 1;
+    uint32_t vui_parameters_present_flag : 1;
+} StdVideoH264SpsFlags;
+
+typedef struct StdVideoH264ScalingLists
+{
+    // 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 - 7 are for each entry plus 6 for ScalingList8x8
+    uint8_t scaling_list_present_mask;
+    // 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 - 7 are for each entry plus 6 for ScalingList8x8
+    uint8_t use_default_scaling_matrix_mask;
+    uint8_t ScalingList4x4[STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS];
+    uint8_t ScalingList8x8[STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS];
+} StdVideoH264ScalingLists;
+
+typedef struct StdVideoH264SequenceParameterSet
+{
+    StdVideoH264ProfileIdc               profile_idc;
+    StdVideoH264Level                    level_idc;
+    uint8_t                              seq_parameter_set_id;
+    StdVideoH264ChromaFormatIdc          chroma_format_idc;
+    uint8_t                              bit_depth_luma_minus8;
+    uint8_t                              bit_depth_chroma_minus8;
+    uint8_t                              log2_max_frame_num_minus4;
+    StdVideoH264PocType                  pic_order_cnt_type;
+    uint8_t                              log2_max_pic_order_cnt_lsb_minus4;
+    int32_t                              offset_for_non_ref_pic;
+    int32_t                              offset_for_top_to_bottom_field;
+    uint8_t                              num_ref_frames_in_pic_order_cnt_cycle;
+    uint8_t                              max_num_ref_frames;
+    uint32_t                             pic_width_in_mbs_minus1;
+    uint32_t                             pic_height_in_map_units_minus1;
+    uint32_t                             frame_crop_left_offset;
+    uint32_t                             frame_crop_right_offset;
+    uint32_t                             frame_crop_top_offset;
+    uint32_t                             frame_crop_bottom_offset;
+    StdVideoH264SpsFlags                 flags;
+    // 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".
+    int32_t*                             pOffsetForRefFrame;
+    StdVideoH264ScalingLists*            pScalingLists;             // Must be a valid pointer if seq_scaling_matrix_present_flag is set
+    StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui;  // Must be a valid pointer if StdVideoH264SpsFlags:vui_parameters_present_flag is set
+} StdVideoH264SequenceParameterSet;
+
+typedef struct StdVideoH264PpsFlags {
+    uint32_t transform_8x8_mode_flag : 1;
+    uint32_t redundant_pic_cnt_present_flag : 1;
+    uint32_t constrained_intra_pred_flag : 1;
+    uint32_t deblocking_filter_control_present_flag : 1;
+    uint32_t weighted_bipred_idc_flag : 1;
+    uint32_t weighted_pred_flag : 1;
+    uint32_t pic_order_present_flag : 1;
+    uint32_t entropy_coding_mode_flag : 1;
+    uint32_t pic_scaling_matrix_present_flag : 1;
+} StdVideoH264PpsFlags;
+
+typedef struct StdVideoH264PictureParameterSet
+{
+    uint8_t                       seq_parameter_set_id;
+    uint8_t                       pic_parameter_set_id;
+    uint8_t                       num_ref_idx_l0_default_active_minus1;
+    uint8_t                       num_ref_idx_l1_default_active_minus1;
+    StdVideoH264WeightedBipredIdc weighted_bipred_idc;
+    int8_t                        pic_init_qp_minus26;
+    int8_t                        pic_init_qs_minus26;
+    int8_t                        chroma_qp_index_offset;
+    int8_t                        second_chroma_qp_index_offset;
+    StdVideoH264PpsFlags          flags;
+    StdVideoH264ScalingLists*     pScalingLists; // Must be a valid pointer if  StdVideoH264PpsFlags::pic_scaling_matrix_present_flag is set.
+} StdVideoH264PictureParameterSet;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_H_
diff --git a/registry/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h b/registry/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
new file mode 100644
index 0000000..cb0d1df
--- /dev/null
+++ b/registry/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
@@ -0,0 +1,97 @@
+/*
+** Copyright (c) 2019-2020 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
+#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codec_h264std.h"
+
+// *************************************************
+// Video H.264 Decode related parameters:
+// *************************************************
+
+#define STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE 15
+
+typedef enum StdVideoDecodeH264FieldOrderCount {
+    STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP       = 0,
+    STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM    = 1,
+    STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE = 2,
+    STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID   = 0x7FFFFFFF
+} StdVideoDecodeH264FieldOrderCnt;
+
+typedef struct StdVideoDecodeH264PictureInfoFlags {
+    uint32_t field_pic_flag : 1;             // Is field picture
+    uint32_t is_intra : 1;                   // Is intra picture
+    uint32_t IdrPicFlag : 1;                 // instantaneous decoding refresh (IDR) picture
+    uint32_t bottom_field_flag : 1;          // bottom (true) or top (false) field if field_pic_flag is set.
+    uint32_t is_reference : 1;               // This only applies to picture info, and not to the DPB lists.
+    uint32_t complementary_field_pair : 1;   // complementary field pair, complementary non-reference field pair, complementary reference field pair
+} StdVideoDecodeH264PictureInfoFlags;
+
+typedef struct StdVideoDecodeH264PictureInfo {
+    uint8_t  seq_parameter_set_id;          // Selecting SPS from the Picture Parameters
+    uint8_t  pic_parameter_set_id;          // Selecting PPS from the Picture Parameters and the SPS
+    uint16_t reserved;                      // for structure members 32-bit packing/alignment
+    uint16_t frame_num;                     // 7.4.3 Slice header semantics
+    uint16_t idr_pic_id;                    // 7.4.3 Slice header semantics
+    // PicOrderCnt is based on TopFieldOrderCnt and BottomFieldOrderCnt. See 8.2.1 Decoding process for picture order count type 0 - 2
+    int32_t  PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE];  // TopFieldOrderCnt and BottomFieldOrderCnt fields.
+    StdVideoDecodeH264PictureInfoFlags flags;
+} StdVideoDecodeH264PictureInfo;
+
+typedef struct StdVideoDecodeH264ReferenceInfoFlags {
+    uint32_t top_field_flag : 1;             // Reference is used for top field reference.
+    uint32_t bottom_field_flag : 1;          // Reference is used for bottom field reference.
+    uint32_t is_long_term : 1;               // this is a long term reference
+    uint32_t is_non_existing : 1;            // Must be handled in accordance with 8.2.5.2: Decoding process for gaps in frame_num
+} StdVideoDecodeH264ReferenceInfoFlags;
+
+typedef struct StdVideoDecodeH264ReferenceInfo {
+    // FrameNum = is_long_term ?  long_term_frame_idx : frame_num
+    uint16_t FrameNum;                     // 7.4.3.3 Decoded reference picture marking semantics
+    uint16_t reserved;                     // for structure members 32-bit packing/alignment
+    int32_t  PicOrderCnt[2];               // TopFieldOrderCnt and BottomFieldOrderCnt fields.
+    StdVideoDecodeH264ReferenceInfoFlags flags;
+} StdVideoDecodeH264ReferenceInfo;
+
+typedef struct StdVideoDecodeH264MvcElementFlags {
+    uint32_t non_idr : 1;
+    uint32_t anchor_pic : 1;
+    uint32_t inter_view : 1;
+} StdVideoDecodeH264MvcElementFlags;
+
+typedef struct StdVideoDecodeH264MvcElement {
+    StdVideoDecodeH264MvcElementFlags flags;
+    uint16_t viewOrderIndex;
+    uint16_t viewId;
+    uint16_t temporalId; // move out?
+    uint16_t priorityId; // move out?
+    uint16_t numOfAnchorRefsInL0;
+    uint16_t viewIdOfAnchorRefsInL0[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE];
+    uint16_t numOfAnchorRefsInL1;
+    uint16_t viewIdOfAnchorRefsInL1[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE];
+    uint16_t numOfNonAnchorRefsInL0;
+    uint16_t viewIdOfNonAnchorRefsInL0[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE];
+    uint16_t numOfNonAnchorRefsInL1;
+    uint16_t viewIdOfNonAnchorRefsInL1[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE];
+} StdVideoDecodeH264MvcElement;
+
+typedef struct StdVideoDecodeH264Mvc {
+    uint32_t viewId0;
+    uint32_t mvcElementCount;
+    StdVideoDecodeH264MvcElement* pMvcElements;
+} StdVideoDecodeH264Mvc;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
diff --git a/registry/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h b/registry/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
new file mode 100644
index 0000000..f3a0d3a
--- /dev/null
+++ b/registry/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
@@ -0,0 +1,94 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
+#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codec_h264std.h"
+
+// *************************************************
+// Video H.264 Encode related parameters:
+// *************************************************
+
+typedef struct StdVideoEncodeH264SliceHeaderFlags {
+    uint32_t idr_flag : 1;
+    uint32_t is_reference_flag : 1;
+    uint32_t num_ref_idx_active_override_flag : 1;
+    uint32_t no_output_of_prior_pics_flag : 1;
+    uint32_t long_term_reference_flag : 1;
+    uint32_t adaptive_ref_pic_marking_mode_flag : 1;
+    uint32_t no_prior_references_available_flag : 1;
+} StdVideoEncodeH264SliceHeaderFlags;
+
+typedef struct StdVideoEncodeH264PictureInfoFlags {
+    uint32_t idr_flag : 1;
+    uint32_t is_reference_flag : 1;
+    uint32_t long_term_reference_flag : 1;
+} StdVideoEncodeH264PictureInfoFlags;
+
+typedef struct StdVideoEncodeH264RefMgmtFlags {
+    uint32_t ref_pic_list_modification_l0_flag : 1;
+    uint32_t ref_pic_list_modification_l1_flag : 1;
+} StdVideoEncodeH264RefMgmtFlags;
+
+typedef struct StdVideoEncodeH264RefListModEntry {
+    StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc;
+    uint16_t                             abs_diff_pic_num_minus1;
+    uint16_t                             long_term_pic_num;
+} StdVideoEncodeH264RefListModEntry;
+
+typedef struct StdVideoEncodeH264RefPicMarkingEntry {
+    StdVideoH264MemMgmtControlOp  operation;
+    uint16_t                      difference_of_pic_nums_minus1;
+    uint16_t                      long_term_pic_num;
+    uint16_t                      long_term_frame_idx;
+    uint16_t                      max_long_term_frame_idx_plus1;
+} StdVideoEncodeH264RefPicMarkingEntry;
+
+typedef struct StdVideoEncodeH264RefMemMgmtCtrlOperations {
+    StdVideoEncodeH264RefMgmtFlags        flags;
+    uint8_t                               refList0ModOpCount;
+    StdVideoEncodeH264RefListModEntry*    pRefList0ModOperations;
+    uint8_t                               refList1ModOpCount;
+    StdVideoEncodeH264RefListModEntry*    pRefList1ModOperations;
+    uint8_t                               refPicMarkingOpCount;
+    StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations;
+} StdVideoEncodeH264RefMemMgmtCtrlOperations;
+
+typedef struct StdVideoEncodeH264PictureInfo {
+    StdVideoEncodeH264PictureInfoFlags   flags;
+    StdVideoH264PictureType              pictureType;
+    uint32_t                             frameNum;
+    uint32_t                             pictureOrderCount;
+    uint16_t                             long_term_pic_num;
+    uint16_t                             long_term_frame_idx;
+} StdVideoEncodeH264PictureInfo;
+
+typedef struct StdVideoEncodeH264SliceHeader {
+    StdVideoEncodeH264SliceHeaderFlags          flags;
+    StdVideoH264SliceType                       slice_type;
+    uint8_t                                     seq_parameter_set_id;
+    uint8_t                                     pic_parameter_set_id;
+    uint16_t                                    idr_pic_id;
+    uint8_t                                     num_ref_idx_l0_active_minus1;
+    uint8_t                                     num_ref_idx_l1_active_minus1;
+    StdVideoH264CabacInitIdc                    cabac_init_idc;
+    StdVideoH264DisableDeblockingFilterIdc      disable_deblocking_filter_idc;
+    int8_t                                      slice_alpha_c0_offset_div2;
+    int8_t                                      slice_beta_offset_div2;
+    StdVideoEncodeH264RefMemMgmtCtrlOperations* pMemMgmtCtrlOperations;
+} StdVideoEncodeH264SliceHeader;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
diff --git a/registry/vulkan/include/vk_video/vulkan_video_codec_h265std.h b/registry/vulkan/include/vk_video/vulkan_video_codec_h265std.h
new file mode 100644
index 0000000..179c6b7
--- /dev/null
+++ b/registry/vulkan/include/vk_video/vulkan_video_codec_h265std.h
@@ -0,0 +1,371 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H265STD_H_
+#define VULKAN_VIDEO_CODEC_H265STD_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codecs_common.h"
+
+// Vulkan 0.5 version number WIP
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_9_5 VK_MAKE_VIDEO_STD_VERSION(0, 9, 5) // Patch version should always be set to 0
+
+// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_SPEC_VERSION   VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_9_5
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265"
+
+#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32
+#define STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE 7
+#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6
+#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16
+#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6
+#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64
+#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6
+#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64
+#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2
+#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64
+#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6
+#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19
+#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21
+#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3
+#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128
+
+typedef enum StdVideoH265ChromaFormatIdc {
+    STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME  = 0,
+    STD_VIDEO_H265_CHROMA_FORMAT_IDC_420         = 1,
+    STD_VIDEO_H265_CHROMA_FORMAT_IDC_422         = 2,
+    STD_VIDEO_H265_CHROMA_FORMAT_IDC_444         = 3,
+    STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID     = 0x7FFFFFFF
+} StdVideoH265ChromaFormatIdc;
+
+typedef enum StdVideoH265ProfileIdc {
+    STD_VIDEO_H265_PROFILE_IDC_MAIN                     = 1,
+    STD_VIDEO_H265_PROFILE_IDC_MAIN_10                  = 2,
+    STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE       = 3,
+    STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS  = 4,
+    STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS           = 9,
+    STD_VIDEO_H265_PROFILE_IDC_INVALID                  = 0x7FFFFFFF
+} StdVideoH265ProfileIdc;
+
+typedef enum StdVideoH265Level {
+    STD_VIDEO_H265_LEVEL_1_0 = 0,
+    STD_VIDEO_H265_LEVEL_2_0 = 1,
+    STD_VIDEO_H265_LEVEL_2_1 = 2,
+    STD_VIDEO_H265_LEVEL_3_0 = 3,
+    STD_VIDEO_H265_LEVEL_3_1 = 4,
+    STD_VIDEO_H265_LEVEL_4_0 = 5,
+    STD_VIDEO_H265_LEVEL_4_1 = 6,
+    STD_VIDEO_H265_LEVEL_5_0 = 7,
+    STD_VIDEO_H265_LEVEL_5_1 = 8,
+    STD_VIDEO_H265_LEVEL_5_2 = 9,
+    STD_VIDEO_H265_LEVEL_6_0 = 10,
+    STD_VIDEO_H265_LEVEL_6_1 = 11,
+    STD_VIDEO_H265_LEVEL_6_2 = 12,
+    STD_VIDEO_H265_LEVEL_INVALID = 0x7FFFFFFF
+} StdVideoH265Level;
+
+typedef enum StdVideoH265SliceType {
+    STD_VIDEO_H265_SLICE_TYPE_B = 0,
+    STD_VIDEO_H265_SLICE_TYPE_P = 1,
+    STD_VIDEO_H265_SLICE_TYPE_I = 2,
+    STD_VIDEO_H265_SLICE_TYPE_INVALID = 0x7FFFFFFF
+} StdVideoH265SliceType;
+
+typedef enum StdVideoH265PictureType {
+    STD_VIDEO_H265_PICTURE_TYPE_P   = 0,
+    STD_VIDEO_H265_PICTURE_TYPE_B   = 1,
+    STD_VIDEO_H265_PICTURE_TYPE_I   = 2,
+    STD_VIDEO_H265_PICTURE_TYPE_IDR = 3,
+    STD_VIDEO_H265_PICTURE_TYPE_INVALID = 0x7FFFFFFF
+} StdVideoH265PictureType;
+
+typedef struct StdVideoH265DecPicBufMgr
+{
+    uint32_t max_latency_increase_plus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+    uint8_t  max_dec_pic_buffering_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+    uint8_t  max_num_reorder_pics[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+} StdVideoH265DecPicBufMgr;
+
+typedef struct StdVideoH265SubLayerHrdParameters { // sub_layer_hrd_parameters
+    uint32_t bit_rate_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
+    uint32_t cpb_size_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
+    uint32_t cpb_size_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
+    uint32_t bit_rate_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
+    uint32_t cbr_flag; // each bit represents a range of CpbCounts (bit 0 - cpb_cnt_minus1) per sub-layer
+} StdVideoH265SubLayerHrdParameters;
+
+typedef struct StdVideoH265HrdFlags {
+    uint32_t nal_hrd_parameters_present_flag : 1;
+    uint32_t vcl_hrd_parameters_present_flag : 1;
+    uint32_t sub_pic_hrd_params_present_flag : 1;
+    uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1;
+    uint32_t fixed_pic_rate_general_flag : 8;    // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+    uint32_t fixed_pic_rate_within_cvs_flag : 8; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+    uint32_t low_delay_hrd_flag : 8;             // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+} StdVideoH265HrdFlags;
+
+typedef struct StdVideoH265HrdParameters {
+    uint8_t                            tick_divisor_minus2;
+    uint8_t                            du_cpb_removal_delay_increment_length_minus1;
+    uint8_t                            dpb_output_delay_du_length_minus1;
+    uint8_t                            bit_rate_scale;
+    uint8_t                            cpb_size_scale;
+    uint8_t                            cpb_size_du_scale;
+    uint8_t                            initial_cpb_removal_delay_length_minus1;
+    uint8_t                            au_cpb_removal_delay_length_minus1;
+    uint8_t                            dpb_output_delay_length_minus1;
+    uint8_t                            cpb_cnt_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+    uint16_t                           elemental_duration_in_tc_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+    StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersNal[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; // NAL per layer ptr to sub_layer_hrd_parameters
+    StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersVcl[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE]; // VCL per layer ptr to sub_layer_hrd_parameters
+    StdVideoH265HrdFlags               flags;
+} StdVideoH265HrdParameters;
+
+typedef struct StdVideoH265VpsFlags {
+    uint32_t vps_temporal_id_nesting_flag : 1;
+    uint32_t vps_sub_layer_ordering_info_present_flag : 1;
+    uint32_t vps_timing_info_present_flag : 1;
+    uint32_t vps_poc_proportional_to_timing_flag : 1;
+} StdVideoH265VpsFlags;
+
+typedef struct StdVideoH265VideoParameterSet
+{
+    uint8_t                      vps_video_parameter_set_id;
+    uint8_t                      vps_max_sub_layers_minus1;
+    uint32_t                     vps_num_units_in_tick;
+    uint32_t                     vps_time_scale;
+    uint32_t                     vps_num_ticks_poc_diff_one_minus1;
+    StdVideoH265DecPicBufMgr*    pDecPicBufMgr;
+    StdVideoH265HrdParameters*   pHrdParameters;
+    StdVideoH265VpsFlags         flags;
+} StdVideoH265VideoParameterSet;
+
+typedef struct StdVideoH265ScalingLists
+{
+    uint8_t ScalingList4x4[STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS];       // ScalingList[ 0 ][ MatrixID ][ i ] (sizeID = 0)
+    uint8_t ScalingList8x8[STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS];       // ScalingList[ 1 ][ MatrixID ][ i ] (sizeID = 1)
+    uint8_t ScalingList16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS];     // ScalingList[ 2 ][ MatrixID ][ i ] (sizeID = 2)
+    uint8_t ScalingList32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS];     // ScalingList[ 3 ][ MatrixID ][ i ] (sizeID = 3)
+    uint8_t ScalingListDCCoef16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS];   // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8, sizeID = 2
+    uint8_t ScalingListDCCoef32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS];   // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8. sizeID = 3
+} StdVideoH265ScalingLists;
+
+typedef struct StdVideoH265SpsVuiFlags {
+    uint32_t aspect_ratio_info_present_flag : 1;
+    uint32_t overscan_info_present_flag : 1;
+    uint32_t overscan_appropriate_flag : 1;
+    uint32_t video_signal_type_present_flag : 1;
+    uint32_t video_full_range_flag : 1;
+    uint32_t colour_description_present_flag : 1;
+    uint32_t chroma_loc_info_present_flag : 1;
+    uint32_t neutral_chroma_indication_flag : 1;
+    uint32_t field_seq_flag : 1;
+    uint32_t frame_field_info_present_flag : 1;
+    uint32_t default_display_window_flag : 1;
+    uint32_t vui_timing_info_present_flag : 1;
+    uint32_t vui_poc_proportional_to_timing_flag : 1;
+    uint32_t vui_hrd_parameters_present_flag : 1;
+    uint32_t bitstream_restriction_flag : 1;
+    uint32_t tiles_fixed_structure_flag : 1;
+    uint32_t motion_vectors_over_pic_boundaries_flag : 1;
+    uint32_t restricted_ref_pic_lists_flag : 1;
+} StdVideoH265SpsVuiFlags;
+
+typedef struct StdVideoH265SequenceParameterSetVui {
+    uint8_t                     aspect_ratio_idc;
+    uint16_t                    sar_width;
+    uint16_t                    sar_height;
+    uint8_t                     video_format;
+    uint8_t                     colour_primaries;
+    uint8_t                     transfer_characteristics;
+    uint8_t                     matrix_coeffs;
+    uint8_t                     chroma_sample_loc_type_top_field;
+    uint8_t                     chroma_sample_loc_type_bottom_field;
+    uint16_t                    def_disp_win_left_offset;
+    uint16_t                    def_disp_win_right_offset;
+    uint16_t                    def_disp_win_top_offset;
+    uint16_t                    def_disp_win_bottom_offset;
+    uint32_t                    vui_num_units_in_tick;
+    uint32_t                    vui_time_scale;
+    uint32_t                    vui_num_ticks_poc_diff_one_minus1;
+    StdVideoH265HrdParameters*  pHrdParameters;
+    uint16_t                    min_spatial_segmentation_idc;
+    uint8_t                     max_bytes_per_pic_denom;
+    uint8_t                     max_bits_per_min_cu_denom;
+    uint8_t                     log2_max_mv_length_horizontal;
+    uint8_t                     log2_max_mv_length_vertical;
+    StdVideoH265SpsVuiFlags     flags;
+} StdVideoH265SequenceParameterSetVui;
+
+typedef struct StdVideoH265PredictorPaletteEntries
+{
+    uint16_t PredictorPaletteEntries[STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE][STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE];
+} StdVideoH265PredictorPaletteEntries;
+
+typedef struct StdVideoH265SpsFlags {
+    uint32_t sps_temporal_id_nesting_flag : 1;
+    uint32_t separate_colour_plane_flag : 1;
+    uint32_t scaling_list_enabled_flag : 1;
+    uint32_t sps_scaling_list_data_present_flag : 1;
+    uint32_t amp_enabled_flag : 1;
+    uint32_t sample_adaptive_offset_enabled_flag : 1;
+    uint32_t pcm_enabled_flag : 1;
+    uint32_t pcm_loop_filter_disabled_flag : 1;
+    uint32_t long_term_ref_pics_present_flag : 1;
+    uint32_t sps_temporal_mvp_enabled_flag : 1;
+    uint32_t strong_intra_smoothing_enabled_flag : 1;
+    uint32_t vui_parameters_present_flag : 1;
+    uint32_t sps_extension_present_flag : 1;
+    uint32_t sps_range_extension_flag : 1;
+
+    // extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
+    uint32_t transform_skip_rotation_enabled_flag : 1;
+    uint32_t transform_skip_context_enabled_flag : 1;
+    uint32_t implicit_rdpcm_enabled_flag : 1;
+    uint32_t explicit_rdpcm_enabled_flag : 1;
+    uint32_t extended_precision_processing_flag : 1;
+    uint32_t intra_smoothing_disabled_flag : 1;
+    uint32_t high_precision_offsets_enabled_flag : 1;
+    uint32_t persistent_rice_adaptation_enabled_flag : 1;
+    uint32_t cabac_bypass_alignment_enabled_flag : 1;
+
+    // extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+    uint32_t sps_curr_pic_ref_enabled_flag : 1;
+    uint32_t palette_mode_enabled_flag : 1;
+    uint32_t sps_palette_predictor_initializer_present_flag : 1;
+    uint32_t intra_boundary_filtering_disabled_flag : 1;
+} StdVideoH265SpsFlags;
+
+typedef struct StdVideoH265SequenceParameterSet
+{
+    StdVideoH265ProfileIdc               profile_idc;
+    StdVideoH265Level                    level_idc;
+    uint32_t                             pic_width_in_luma_samples;
+    uint32_t                             pic_height_in_luma_samples;
+    uint8_t                              sps_video_parameter_set_id;
+    uint8_t                              sps_max_sub_layers_minus1;
+    uint8_t                              sps_seq_parameter_set_id;
+    uint8_t                              chroma_format_idc;
+    uint8_t                              bit_depth_luma_minus8;
+    uint8_t                              bit_depth_chroma_minus8;
+    uint8_t                              log2_max_pic_order_cnt_lsb_minus4;
+    uint8_t                              sps_max_dec_pic_buffering_minus1;
+    uint8_t                              log2_min_luma_coding_block_size_minus3;
+    uint8_t                              log2_diff_max_min_luma_coding_block_size;
+    uint8_t                              log2_min_luma_transform_block_size_minus2;
+    uint8_t                              log2_diff_max_min_luma_transform_block_size;
+    uint8_t                              max_transform_hierarchy_depth_inter;
+    uint8_t                              max_transform_hierarchy_depth_intra;
+    uint8_t                              num_short_term_ref_pic_sets;
+    uint8_t                              num_long_term_ref_pics_sps;
+    uint8_t                              pcm_sample_bit_depth_luma_minus1;
+    uint8_t                              pcm_sample_bit_depth_chroma_minus1;
+    uint8_t                              log2_min_pcm_luma_coding_block_size_minus3;
+    uint8_t                              log2_diff_max_min_pcm_luma_coding_block_size;
+    uint32_t                             conf_win_left_offset;
+    uint32_t                             conf_win_right_offset;
+    uint32_t                             conf_win_top_offset;
+    uint32_t                             conf_win_bottom_offset;
+    StdVideoH265DecPicBufMgr*            pDecPicBufMgr;
+    StdVideoH265SpsFlags                 flags;
+    StdVideoH265ScalingLists*            pScalingLists;             // Must be a valid pointer if sps_scaling_list_data_present_flag is set
+    StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui;  // Must be a valid pointer if StdVideoH265SpsFlags:vui_parameters_present_flag is set palette_max_size;
+
+    // extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+    uint8_t                              palette_max_size;
+    uint8_t                              delta_palette_max_predictor_size;
+    uint8_t                              motion_vector_resolution_control_idc;
+    uint8_t                              sps_num_palette_predictor_initializer_minus1;
+    StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;  // Must be a valid pointer if sps_palette_predictor_initializer_present_flag is set
+} StdVideoH265SequenceParameterSet;
+
+
+typedef struct StdVideoH265PpsFlags {
+    uint32_t dependent_slice_segments_enabled_flag : 1;
+    uint32_t output_flag_present_flag : 1;
+    uint32_t sign_data_hiding_enabled_flag : 1;
+    uint32_t cabac_init_present_flag : 1;
+    uint32_t constrained_intra_pred_flag : 1;
+    uint32_t transform_skip_enabled_flag : 1;
+    uint32_t cu_qp_delta_enabled_flag : 1;
+    uint32_t pps_slice_chroma_qp_offsets_present_flag : 1;
+    uint32_t weighted_pred_flag : 1;
+    uint32_t weighted_bipred_flag : 1;
+    uint32_t transquant_bypass_enabled_flag : 1;
+    uint32_t tiles_enabled_flag : 1;
+    uint32_t entropy_coding_sync_enabled_flag : 1;
+    uint32_t uniform_spacing_flag : 1;
+    uint32_t loop_filter_across_tiles_enabled_flag : 1;
+    uint32_t pps_loop_filter_across_slices_enabled_flag : 1;
+    uint32_t deblocking_filter_control_present_flag : 1;
+    uint32_t deblocking_filter_override_enabled_flag : 1;
+    uint32_t pps_deblocking_filter_disabled_flag : 1;
+    uint32_t pps_scaling_list_data_present_flag : 1;
+    uint32_t lists_modification_present_flag : 1;
+    uint32_t slice_segment_header_extension_present_flag : 1;
+    uint32_t pps_extension_present_flag : 1;
+
+    // extension PPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
+    uint32_t cross_component_prediction_enabled_flag : 1;
+    uint32_t chroma_qp_offset_list_enabled_flag : 1;
+
+    // extension PPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+    uint32_t pps_curr_pic_ref_enabled_flag : 1;
+    uint32_t residual_adaptive_colour_transform_enabled_flag : 1;
+    uint32_t pps_slice_act_qp_offsets_present_flag : 1;
+    uint32_t pps_palette_predictor_initializer_present_flag : 1;
+    uint32_t monochrome_palette_flag : 1;
+    uint32_t pps_range_extension_flag : 1;
+} StdVideoH265PpsFlags;
+
+typedef struct StdVideoH265PictureParameterSet
+{
+    uint8_t                              pps_pic_parameter_set_id;
+    uint8_t                              pps_seq_parameter_set_id;
+    uint8_t                              num_extra_slice_header_bits;
+    uint8_t                              num_ref_idx_l0_default_active_minus1;
+    uint8_t                              num_ref_idx_l1_default_active_minus1;
+    int8_t                               init_qp_minus26;
+    uint8_t                              diff_cu_qp_delta_depth;
+    int8_t                               pps_cb_qp_offset;
+    int8_t                               pps_cr_qp_offset;
+    uint8_t                              num_tile_columns_minus1;
+    uint8_t                              num_tile_rows_minus1;
+    uint16_t                             column_width_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE];
+    uint16_t                             row_height_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE];
+    int8_t                               pps_beta_offset_div2;
+    int8_t                               pps_tc_offset_div2;
+    uint8_t                              log2_parallel_merge_level_minus2;
+    StdVideoH265PpsFlags                 flags;
+    StdVideoH265ScalingLists*            pScalingLists; // Must be a valid pointer if pps_scaling_list_data_present_flag is set
+
+    // extension PPS, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set
+    uint8_t                              log2_max_transform_skip_block_size_minus2;
+    uint8_t                              diff_cu_chroma_qp_offset_depth;
+    uint8_t                              chroma_qp_offset_list_len_minus1;
+    int8_t                               cb_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE];
+    int8_t                               cr_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE];
+    uint8_t                              log2_sao_offset_scale_luma;
+    uint8_t                              log2_sao_offset_scale_chroma;
+
+    // extension PPS, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set
+    int8_t                               pps_act_y_qp_offset_plus5;
+    int8_t                               pps_act_cb_qp_offset_plus5;
+    int8_t                               pps_act_cr_qp_offset_plus5;
+    uint8_t                              pps_num_palette_predictor_initializer;
+    uint8_t                              luma_bit_depth_entry_minus8;
+    uint8_t                              chroma_bit_depth_entry_minus8;
+    StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;  // Must be a valid pointer if pps_palette_predictor_initializer_present_flag is set
+} StdVideoH265PictureParameterSet;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H265STD_H_
diff --git a/registry/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h b/registry/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
new file mode 100644
index 0000000..a1efa05
--- /dev/null
+++ b/registry/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
@@ -0,0 +1,64 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
+#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codec_h265std.h"
+
+// *************************************************
+// Video h265 Decode related parameters:
+// *************************************************
+
+#define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8
+
+typedef struct StdVideoDecodeH265PictureInfoFlags {
+    uint32_t IrapPicFlag : 1;
+    uint32_t IdrPicFlag  : 1;
+    uint32_t IsReference : 1;
+    uint32_t short_term_ref_pic_set_sps_flag : 1;
+} StdVideoDecodeH265PictureInfoFlags;
+
+typedef struct StdVideoDecodeH265PictureInfo {
+    uint8_t                            vps_video_parameter_set_id;
+    uint8_t                            sps_seq_parameter_set_id;
+    uint8_t                            pps_pic_parameter_set_id;
+    uint8_t                            num_short_term_ref_pic_sets;
+    int32_t                            PicOrderCntVal;
+    uint16_t                           NumBitsForSTRefPicSetInSlice; // number of bits used in st_ref_pic_set()
+                                                                     //when short_term_ref_pic_set_sps_flag is 0; otherwise set to 0.
+    uint8_t                            NumDeltaPocsOfRefRpsIdx;      // NumDeltaPocs[ RefRpsIdx ] when short_term_ref_pic_set_sps_flag = 1, otherwise 0
+    uint8_t                            RefPicSetStCurrBefore[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; // slotIndex as used in
+                                                                     // VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    uint8_t                            RefPicSetStCurrAfter[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE];   // slotIndex as used in
+                                                                     // VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    uint8_t                            RefPicSetLtCurr[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; // slotIndex as used in
+                                                                     // VkVideoReferenceSlotKHR structures representing
+                                                                     //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
+    StdVideoDecodeH265PictureInfoFlags flags;
+} StdVideoDecodeH265PictureInfo;
+
+typedef struct StdVideoDecodeH265ReferenceInfoFlags {
+    uint32_t is_long_term : 1;
+    uint32_t is_non_existing : 1;
+} StdVideoDecodeH265ReferenceInfoFlags;
+
+typedef struct StdVideoDecodeH265ReferenceInfo {
+    int32_t                              PicOrderCntVal;
+    StdVideoDecodeH265ReferenceInfoFlags flags;
+} StdVideoDecodeH265ReferenceInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
diff --git a/registry/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h b/registry/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h
new file mode 100644
index 0000000..ffffef2
--- /dev/null
+++ b/registry/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h
@@ -0,0 +1,122 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_
+#define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "vk_video/vulkan_video_codec_h265std.h"
+
+// *************************************************
+// Video h265 Encode related parameters:
+// *************************************************
+
+#define STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE   15
+#define STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE 15
+#define STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM  2
+
+typedef struct StdVideoEncodeH265SliceHeaderFlags {
+    uint32_t first_slice_segment_in_pic_flag : 1;
+    uint32_t no_output_of_prior_pics_flag : 1;
+    uint32_t dependent_slice_segment_flag : 1;
+    uint32_t short_term_ref_pic_set_sps_flag : 1;
+    uint32_t slice_temporal_mvp_enable_flag : 1;
+    uint32_t slice_sao_luma_flag : 1;
+    uint32_t slice_sao_chroma_flag : 1;
+    uint32_t num_ref_idx_active_override_flag : 1;
+    uint32_t mvd_l1_zero_flag : 1;
+    uint32_t cabac_init_flag : 1;
+    uint32_t slice_deblocking_filter_disable_flag : 1;
+    uint32_t collocated_from_l0_flag : 1;
+    uint32_t slice_loop_filter_across_slices_enabled_flag : 1;
+    uint32_t bLastSliceInPic : 1;
+    uint32_t reservedBits : 18;
+    uint16_t luma_weight_l0_flag;   // bit 0 - num_ref_idx_l0_active_minus1
+    uint16_t chroma_weight_l0_flag; // bit 0 - num_ref_idx_l0_active_minus1
+    uint16_t luma_weight_l1_flag;   // bit 0 - num_ref_idx_l1_active_minus1
+    uint16_t chroma_weight_l1_flag; // bit 0 - num_ref_idx_l1_active_minus1
+} StdVideoEncodeH265SliceHeaderFlags;
+
+typedef struct StdVideoEncodeH265SliceHeader {
+    StdVideoH265SliceType              slice_type;
+    uint8_t                            slice_pic_parameter_set_id;
+    uint8_t                            num_short_term_ref_pic_sets;
+    uint32_t                           slice_segment_address;
+    uint8_t                            short_term_ref_pic_set_idx;
+    uint8_t                            num_long_term_sps;
+    uint8_t                            num_long_term_pics;
+    uint8_t                            collocated_ref_idx;
+    uint8_t                            num_ref_idx_l0_active_minus1; // [0, 14]
+    uint8_t                            num_ref_idx_l1_active_minus1; // [0, 14]
+    uint8_t                            luma_log2_weight_denom;       // [0, 7]
+    int8_t                             delta_chroma_log2_weight_denom;
+    int8_t                             delta_luma_weight_l0[STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE];
+    int8_t                             luma_offset_l0[STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE];
+    int8_t                             delta_chroma_weight_l0[STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE][STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM];
+    int8_t                             delta_chroma_offset_l0[STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE][STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM];
+    int8_t                             delta_luma_weight_l1[STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE];
+    int8_t                             luma_offset_l1[STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE];
+    int8_t                             delta_chroma_weight_l1[STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE][STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM];
+    int8_t                             delta_chroma_offset_l1[STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE][STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM];
+    uint8_t                            MaxNumMergeCand;
+    int8_t                             slice_qp_delta;
+    int8_t                             slice_cb_qp_offset;         // [-12, 12]
+    int8_t                             slice_cr_qp_offset;         // [-12, 12]
+    int8_t                             slice_beta_offset_div2;    // [-6, 6]
+    int8_t                             slice_tc_offset_div2;       // [-6, 6]
+    int8_t                             slice_act_y_qp_offset;
+    int8_t                             slice_act_cb_qp_offset;
+    int8_t                             slice_act_cr_qp_offset;
+    StdVideoEncodeH265SliceHeaderFlags flags;
+} StdVideoEncodeH265SliceHeader;
+
+typedef struct StdVideoEncodeH265ReferenceModificationFlags {
+    uint32_t ref_pic_list_modification_flag_l0 : 1;
+    uint32_t ref_pic_list_modification_flag_l1 : 1;
+} StdVideoEncodeH265ReferenceModificationFlags;
+
+typedef struct StdVideoEncodeH265ReferenceModifications {
+    StdVideoEncodeH265ReferenceModificationFlags flags;
+    uint8_t                                      referenceList0ModificationsCount; // num_ref_idx_l0_active_minus1
+    uint8_t*                                     pReferenceList0Modifications;     // list_entry_l0
+    uint8_t                                      referenceList1ModificationsCount; // num_ref_idx_l1_active_minus1
+    uint8_t*                                     pReferenceList1Modifications;     // list_entry_l1
+} StdVideoEncodeH265ReferenceModifications;
+
+typedef struct StdVideoEncodeH265PictureInfoFlags {
+    uint32_t is_reference_flag : 1;
+    uint32_t IrapPicFlag : 1;
+    uint32_t long_term_flag : 1;
+} StdVideoEncodeH265PictureInfoFlags;
+
+typedef struct StdVideoEncodeH265PictureInfo {
+    StdVideoH265PictureType            PictureType;
+    uint8_t                            sps_video_parameter_set_id;
+    uint8_t                            pps_seq_parameter_set_id;
+    int32_t                            PicOrderCntVal;
+    uint8_t                            TemporalId;
+    StdVideoEncodeH265PictureInfoFlags flags;
+} StdVideoEncodeH265PictureInfo;
+
+typedef struct StdVideoEncodeH265ReferenceInfoFlags {
+    uint32_t is_long_term : 1;
+    uint32_t isUsedFlag : 1;
+} StdVideoEncodeH265ReferenceInfoFlags;
+
+typedef struct StdVideoEncodeH265ReferenceInfo {
+    int32_t                              PicOrderCntVal;
+    uint8_t                              TemporalId;
+    StdVideoEncodeH265ReferenceInfoFlags flags;
+} StdVideoEncodeH265ReferenceInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_
diff --git a/registry/vulkan/include/vk_video/vulkan_video_codecs_common.h b/registry/vulkan/include/vk_video/vulkan_video_codecs_common.h
new file mode 100644
index 0000000..8cc227a
--- /dev/null
+++ b/registry/vulkan/include/vk_video/vulkan_video_codecs_common.h
@@ -0,0 +1,21 @@
+/*
+** Copyright (c) 2019-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+#ifndef VULKAN_VIDEO_CODEC_COMMON_H_
+#define VULKAN_VIDEO_CODEC_COMMON_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \
+    ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // VULKAN_VIDEO_CODEC_COMMON_H_
diff --git a/registry/vulkan/include/vulkan/vk_platform.h b/registry/vulkan/include/vulkan/vk_platform.h
new file mode 100644
index 0000000..18b913a
--- /dev/null
+++ b/registry/vulkan/include/vulkan/vk_platform.h
@@ -0,0 +1,84 @@
+//
+// File: vk_platform.h
+//
+/*
+** Copyright 2014-2021 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 isn't 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/registry/vulkan/include/vulkan/vulkan.h b/registry/vulkan/include/vulkan/vulkan.h
new file mode 100644
index 0000000..3f7cdba
--- /dev/null
+++ b/registry/vulkan/include/vulkan/vulkan.h
@@ -0,0 +1,92 @@
+#ifndef VULKAN_H_
+#define VULKAN_H_ 1
+
+/*
+** Copyright 2015-2021 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 <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_ENABLE_BETA_EXTENSIONS
+#include "vulkan_beta.h"
+#endif
+
+#endif // VULKAN_H_
diff --git a/registry/vulkan/installRelease b/registry/vulkan/installRelease
new file mode 100755
index 0000000..6353a00
--- /dev/null
+++ b/registry/vulkan/installRelease
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+#
+# Copyright 2016-2021 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/registry/vulkan/katex/README.md b/registry/vulkan/katex/README.md
new file mode 100644
index 0000000..5868416
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/auto-render.js b/registry/vulkan/katex/contrib/auto-render.js
new file mode 100644
index 0000000..d31cc7c
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/auto-render.min.js b/registry/vulkan/katex/contrib/auto-render.min.js
new file mode 100644
index 0000000..3a6d663
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/auto-render.mjs b/registry/vulkan/katex/contrib/auto-render.mjs
new file mode 100644
index 0000000..58de8b6
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/copy-tex.css b/registry/vulkan/katex/contrib/copy-tex.css
new file mode 100644
index 0000000..90801d8
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/copy-tex.js b/registry/vulkan/katex/contrib/copy-tex.js
new file mode 100644
index 0000000..4649f8f
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/copy-tex.min.css b/registry/vulkan/katex/contrib/copy-tex.min.css
new file mode 100644
index 0000000..555ed11
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/copy-tex.min.js b/registry/vulkan/katex/contrib/copy-tex.min.js
new file mode 100644
index 0000000..e0354d6
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/copy-tex.mjs b/registry/vulkan/katex/contrib/copy-tex.mjs
new file mode 100644
index 0000000..b6ed1ee
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/mathtex-script-type.js b/registry/vulkan/katex/contrib/mathtex-script-type.js
new file mode 100644
index 0000000..daa01a6
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/mathtex-script-type.min.js b/registry/vulkan/katex/contrib/mathtex-script-type.min.js
new file mode 100644
index 0000000..ae9f528
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/mathtex-script-type.mjs b/registry/vulkan/katex/contrib/mathtex-script-type.mjs
new file mode 100644
index 0000000..7cfb90e
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/mhchem.js b/registry/vulkan/katex/contrib/mhchem.js
new file mode 100644
index 0000000..f84566e
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/mhchem.min.js b/registry/vulkan/katex/contrib/mhchem.min.js
new file mode 100644
index 0000000..8fd9cca
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/mhchem.mjs b/registry/vulkan/katex/contrib/mhchem.mjs
new file mode 100644
index 0000000..46241b5
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/render-a11y-string.js b/registry/vulkan/katex/contrib/render-a11y-string.js
new file mode 100644
index 0000000..34643ec
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/render-a11y-string.min.js b/registry/vulkan/katex/contrib/render-a11y-string.min.js
new file mode 100644
index 0000000..0dcac27
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/contrib/render-a11y-string.mjs b/registry/vulkan/katex/contrib/render-a11y-string.mjs
new file mode 100644
index 0000000..fc63bfc
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.ttf
new file mode 100644
index 0000000..afcd2eb
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff
new file mode 100644
index 0000000..4f57515
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff2
new file mode 100644
index 0000000..b982d6e
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_AMS-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.ttf b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.ttf
new file mode 100644
index 0000000..f84148d
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff
new file mode 100644
index 0000000..ab56ab7
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff2
new file mode 100644
index 0000000..710c261
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Bold.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.ttf
new file mode 100644
index 0000000..97814db
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff
new file mode 100644
index 0000000..aec8a33
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff2
new file mode 100644
index 0000000..ee5193d
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Caligraphic-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.ttf b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.ttf
new file mode 100644
index 0000000..483a7cd
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff
new file mode 100644
index 0000000..189fea5
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff2
new file mode 100644
index 0000000..dc3bd4c
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Bold.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.ttf
new file mode 100644
index 0000000..9aa5f67
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff
new file mode 100644
index 0000000..d01450e
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff2
new file mode 100644
index 0000000..7eeba37
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Fraktur-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.ttf b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.ttf
new file mode 100644
index 0000000..dc0185a
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff
new file mode 100644
index 0000000..acf48e6
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff2 b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff2
new file mode 100644
index 0000000..cf5abab
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Bold.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.ttf b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.ttf
new file mode 100644
index 0000000..4346f17
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff
new file mode 100644
index 0000000..d2cfe4e
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff2 b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff2
new file mode 100644
index 0000000..d0178f4
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-BoldItalic.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.ttf b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.ttf
new file mode 100644
index 0000000..f2c3eba
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff
new file mode 100644
index 0000000..1184295
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff2 b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff2
new file mode 100644
index 0000000..aa05e14
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Italic.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.ttf
new file mode 100644
index 0000000..8acb365
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff
new file mode 100644
index 0000000..9f8228f
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff2
new file mode 100644
index 0000000..e3f71eb
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Main-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.ttf b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.ttf
new file mode 100644
index 0000000..a645df6
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff
new file mode 100644
index 0000000..87d4f22
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff2
new file mode 100644
index 0000000..83b4996
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Math-BoldItalic.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.ttf b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.ttf
new file mode 100644
index 0000000..9c38359
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff
new file mode 100644
index 0000000..959746e
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff2 b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff2
new file mode 100644
index 0000000..e3ea522
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Math-Italic.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.ttf b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.ttf
new file mode 100644
index 0000000..ff10851
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff
new file mode 100644
index 0000000..f0d6ea7
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff2
new file mode 100644
index 0000000..4cf8f14
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Bold.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.ttf b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.ttf
new file mode 100644
index 0000000..3dd7671
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff
new file mode 100644
index 0000000..9da0dfe
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff2
new file mode 100644
index 0000000..ce19ae0
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Italic.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.ttf
new file mode 100644
index 0000000..f117cd6
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff
new file mode 100644
index 0000000..6ed9878
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff2
new file mode 100644
index 0000000..2761149
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_SansSerif-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.ttf
new file mode 100644
index 0000000..e6f3454
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff
new file mode 100644
index 0000000..4a48e65
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff2
new file mode 100644
index 0000000..b0aed19
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Script-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.ttf
new file mode 100644
index 0000000..37faa0f
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff
new file mode 100644
index 0000000..0832f7a
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff2
new file mode 100644
index 0000000..483e7b6
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size1-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.ttf
new file mode 100644
index 0000000..cf32623
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff
new file mode 100644
index 0000000..14f6485
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff2
new file mode 100644
index 0000000..5ff7060
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size2-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.ttf
new file mode 100644
index 0000000..ff7e2b9
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff
new file mode 100644
index 0000000..d3626ce
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff2
new file mode 100644
index 0000000..e45ca49
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size3-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.ttf
new file mode 100644
index 0000000..3034091
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff
new file mode 100644
index 0000000..93c57a6
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff2
new file mode 100644
index 0000000..53b65af
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Size4-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.ttf b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.ttf
new file mode 100644
index 0000000..2fd8529
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.ttf
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff
new file mode 100644
index 0000000..e90fa2b
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff
Binary files differ
diff --git a/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff2
new file mode 100644
index 0000000..e40ab15
--- /dev/null
+++ b/registry/vulkan/katex/fonts/KaTeX_Typewriter-Regular.woff2
Binary files differ
diff --git a/registry/vulkan/katex/katex.css b/registry/vulkan/katex/katex.css
new file mode 100644
index 0000000..7c97e92
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/katex.js b/registry/vulkan/katex/katex.js
new file mode 100644
index 0000000..2aa2c91
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/katex.min.css b/registry/vulkan/katex/katex.min.css
new file mode 100644
index 0000000..c0cd145
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/katex.min.js b/registry/vulkan/katex/katex.min.js
new file mode 100644
index 0000000..906ce12
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/katex/katex.mjs b/registry/vulkan/katex/katex.mjs
new file mode 100644
index 0000000..dc7eebb
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/makeAllExts b/registry/vulkan/makeAllExts
new file mode 100755
index 0000000..fce3ce3
--- /dev/null
+++ b/registry/vulkan/makeAllExts
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+#
+# Copyright 2016-2021 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/registry/vulkan/makeExt b/registry/vulkan/makeExt
new file mode 100755
index 0000000..2a92198
--- /dev/null
+++ b/registry/vulkan/makeExt
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+#
+# Copyright 2016-2021 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/registry/vulkan/makeKHR b/registry/vulkan/makeKHR
new file mode 100755
index 0000000..147f2e3
--- /dev/null
+++ b/registry/vulkan/makeKHR
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+#
+# Copyright 2016-2021 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/registry/vulkan/makeSpec b/registry/vulkan/makeSpec
new file mode 100755
index 0000000..a8d4ce0
--- /dev/null
+++ b/registry/vulkan/makeSpec
@@ -0,0 +1,131 @@
+#!/usr/bin/env python3
+#
+# Copyright 2020-2021 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 all - make a spec with all registered extensions
+#   -version {1.0 | 1.1 | 1.2} - make a spec with this core version
+#   -ext name - add specified extension and its dependencies
+#   -clean - clean generated files before building
+#   -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', 'all' ],
+                        default='core',
+                        help='Type of spec to generate')
+    parser.add_argument('-version', action='store',
+                        choices=[ '1.0', '1.1', '1.2' ],
+                        default='1.2',
+                        help='Type of spec to generate')
+    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
+
+    # Ensure extDependency.py exists and is up to date before importing it
+    try:
+        execute(['make', 'GENERATED=' + results.genpath, 'extDependency'], results)
+
+        # Look for extDependency.py in the specified directory and import it
+        sys.path.insert(0, results.genpath)
+        from extDependency import extensions, allExts, khrExts
+    except:
+        print('Cannot execute "make extDependency" or determine correct extension list', file=sys.stderr)
+
+    # List of versions to build with from the requested -version
+    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' ],
+    }
+    versions = 'VERSIONS={}'.format(' '.join(versionDict[results.version]))
+
+    # List of extensions to build with from the requested -spec
+    # Also construct a spec title
+    if results.spec == 'core':
+        title = ''
+        exts = set()
+    if results.spec == 'khr':
+        title = 'with all KHR extensions'
+        exts = set(khrExts)
+    elif results.spec == 'all':
+        title = 'with all registered extensions'
+        exts = set(allExts)
+
+    # List of explicitly requested extension and all its dependencies
+    extraexts = set()
+    for name in results.extension:
+        if name in extensions:
+            extraexts.add(name)
+            extraexts.update(extensions[name])
+        else:
+            print('ERROR: unknown extension', name, file=sys.stderr)
+            sys.exit(1)
+
+    # See if any explicitly requested extensions aren't 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:
+        execute(args + ['clean'], results)
+
+    args.append(versions)
+
+    # The actual target
+    if len(exts) > 0:
+        args.append('EXTENSIONS={}'.format(' '.join(sorted(exts))))
+    args.append('APITITLE={}'.format(title))
+    args += options
+
+    try:
+        execute(args, results)
+    except:
+        sys.exit(1)
diff --git a/registry/vulkan/package-lock.json b/registry/vulkan/package-lock.json
new file mode 100644
index 0000000..ead9d52
--- /dev/null
+++ b/registry/vulkan/package-lock.json
@@ -0,0 +1,24 @@
+{
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "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
+    },
+    "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
+    },
+    "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/registry/vulkan/package.json b/registry/vulkan/package.json
new file mode 100644
index 0000000..9aa37e1
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/proposals/VK_HUAWEI_invocation_mask.asciidoc b/registry/vulkan/proposals/VK_HUAWEI_invocation_mask.asciidoc
new file mode 100644
index 0000000..c1726a4
--- /dev/null
+++ b/registry/vulkan/proposals/VK_HUAWEI_invocation_mask.asciidoc
@@ -0,0 +1,149 @@
+
+// Copyright 2021 HUAWEI, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_HUAWEI_invocation_mask
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-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 elment 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/registry/vulkan/proposals/VK_KHR_dynamic_rendering.asciidoc b/registry/vulkan/proposals/VK_KHR_dynamic_rendering.asciidoc
new file mode 100644
index 0000000..f7ef51e
--- /dev/null
+++ b/registry/vulkan/proposals/VK_KHR_dynamic_rendering.asciidoc
@@ -0,0 +1,440 @@
+// Copyright 2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_dynamic_rendering
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-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 don't or can't use subpasses, but still pay the cost of setting them up
+  . The API doesn't fit into most existing software architectures
+  . Fundamentally, other than load/store actions, they don't 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 doesn’t 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’s 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 don’t 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’s 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`.
+Applications can provide a valid format here and then not specify an 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_RASTERIZATION_STATE_CREATE_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_RASTERIZATION_STATE_CREATE_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_FORMAT_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_NONE_KHR,
+        .clearValue = {.color = {.float32 = {0.0f,0.0f,0.0f,0.0f} } }
+    }, {
+        .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR
+        .pNext = NULL,
+        .imageView = colorImageViews[0],
+        .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_KHR
+    } };
+
+// 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 haven’t addressed, and closed issues that aren’t self-evident from the proposal description. 
+
+
+=== RESOLVED: Should we support multiview?
+
+Yes, its complexity is much reduced compared to render pass objects, and it’s probably worth preserving in this limited form for compatibility reasons.
+
+
+=== RESOLVED: 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's unclear if any applications use this, to maintain compatibility with existing APIs it has been included.
+
+
+=== RESOLVED: Should we have functionality to replace the on-chip storage aspect of subpasses?
+
+No - this will be designed as a separate extension.
+
+
+=== RESOLVED: 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.
diff --git a/registry/vulkan/proposals/VK_KHR_shader_integer_dot_product.asciidoc b/registry/vulkan/proposals/VK_KHR_shader_integer_dot_product.asciidoc
new file mode 100644
index 0000000..559ccb5
--- /dev/null
+++ b/registry/vulkan/proposals/VK_KHR_shader_integer_dot_product.asciidoc
@@ -0,0 +1,130 @@
+// Copyright 2021 The Khronos Group, Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= VK_KHR_shader_integer_dot_product
+:toc: left
+:refpage: https://www.khronos.org/registry/vulkan/specs/1.2-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's 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 aren't accelerated
+
+Most existing ML backends targetting 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;
+} VkPhysicalDeviceDynamicRenderingFeaturesKHR
+----
+
+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: http://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/registry/vulkan/proposals/template.asciidoc b/registry/vulkan/proposals/template.asciidoc
new file mode 100644
index 0000000..45b2d43
--- /dev/null
+++ b/registry/vulkan/proposals/template.asciidoc
@@ -0,0 +1,69 @@
+// Copyright 2021 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:
+
+.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’s 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 doesn’t directly address.
+
+Writing this section is a good opportunity to make sure you’re 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’re 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 don’t necessarily fix the initial problem should move to section 5 (further functionality).
+They may make it into the final solution, but it’s 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 don't need to compile).
+
+== Issues
+
+This section describes issues with the existing proposal – including both open issues that you haven’t addressed, and closed issues that aren’t 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 to in the final solution, but maybe isn’t 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/registry/vulkan/registry.txt b/registry/vulkan/registry.txt
new file mode 100644
index 0000000..baa4914
--- /dev/null
+++ b/registry/vulkan/registry.txt
@@ -0,0 +1,2575 @@
+// Copyright 2013-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= 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"
+:cl: &#x3a;
+
+// Various special / math symbols. This is easier to edit with than Unicode.
+include::{config}/attribs.txt[]
+
+:leveloffset: 1
+
+<<<<
+
+include::{config}/copyright-ccby.txt[]
+
+<<<<
+
+[[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.
+We have considered separating the registry from the specification source
+into a separate repository, but since there is so much specification valid
+usage language imbedded in the registry XML, this is unlikely to happen.
+
+
+[[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 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
+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-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 <<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: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: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:externsync - denotes that the member should be externally
+    synchronized when accessed by Vulkan
+  * attr:optional - optional.
+    A value of `"true"` or `"false"` determines whether this member can be
+    omitted by providing `NULL` (for pointers), `VK_NULL_HANDLE` (for
+    handles), or 0 (for other scalar types).
+    If the member is a pointer to one of those types, multiple values may be
+    provided, separated by commas - one for each pointer indirection.
+    If not present, the value is assumed to be `"false"` (the member must
+    not be omitted).
+    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
+Specification.
+In this case, the attribute serves only as an indicator to human readers of
+the XML.
+====
+--
+  * 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
+    VkPhysicalDeviceProperties and VkPhysicalDeviceProperties2, their
+    substrucutres, and extensions.
+    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`.
+  ** `"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.
+  ** `"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 obejct handle.
+    Specifies the name of another member which must be a `VkObjectType` or
+    `VkDebugReportObjectTypeEXT` value specifying the type of object the
+    handle refers to.
+
+==== 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:start, attr:end - optional.
+    Integers defining the start and end of a reserved range of enumerants
+    for a particular vendor or purpose.
+    attr:start must be less than or equal to attr:end.
+    These fields define formal enumerant allocations, and are made by the
+    Khronos Registrar on request from implementors following the enum
+    allocation policy.
+  * attr:vendor - optional.
+    String describing the vendor or purpose to whom a reserved range of
+    enumerants is allocated.
+  * 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 <<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: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
+====
+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: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"`,
+    `"transfer"`, and `"graphics"`, 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: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.
+
+== 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 flink:vkGetInstanceProcAddr
+or flink: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: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"` or `"false"` determines whether this parameter can
+    be omitted by providing `NULL` (for pointers), `VK_NULL_HANDLE` (for
+    handles), or 0 (for other scalar types).
+    If the parameter is a pointer to one of those types, multiple values may
+    be provided, separated by commas - one for each pointer indirection.
+    If not present, the value is assumed to be `"false"` (the parameter must
+    not be omitted).
++
+--
+[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
+Specification.
+In this case, the attribute serves only as an indicator to human readers of
+the XML.
+====
+--
+  * 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 `vkQueueSubmit` command includes attr:externsync
+    attributes for the `pSubmits` array indicating that only specific
+    members of each element of the array are modified:
++
+--
+[source,xml]
+--------------------------------------
+<param len="submitCount" externsync="pSubmits[].pWaitSemaphores[],pSubmits[].pSignalSemaphores[]">const <type>VkSubmitInfo</type>* <name>pSubmits</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 obejct handle.
+    Specifies the name of another parameter which must be a `VkObjectType`
+    or `VkDebugReportObjectTypeEXT` value specifying the type of object the
+    handle refers to.
+
+=== 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 <<schema:apiname, API names>> this feature is
+    defined for, 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 extenions 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 attr:version
+and attr:profile attributes, 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 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.
+  * attr:requires - optional.
+    Comma-separated list of extension names this extension requires to be
+    supported.
+    Extensions whose attr:type is `'instance'` must not require extensions
+    whose attr:type is `'device'`.
+  * attr:requiresCore - optional.
+    Core version of Vulkan required by the extension, e.g. "1.1".
+    Defaults to "1.0".
+  * 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 - required <<schema:apiname, API names>> this extension
+    is defined for.
+    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: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.
+  * 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:requires 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, using the
+attr:extension 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 <<schema:apiname, API names>> requiring or removing
+    these interfaces.
+    Interfaces in the tag are only required (or removed) if the requested
+    API name matches 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 attribues are allowed only for a tag:require tag.
+
+  * attr:extension - optional, and only for tag:require tags.
+    String containing an API extension name.
+    Interfaces in the tag are only required if the string matches the
+    attr:name of an tag:extension tag, and that extension is enabled.
+  * attr:feature - optional, and only for tag:require tags.
+    String containing an API feature name.
+    Interfaces in the tag are only required if the string matches the
+    attr:name of a tag:feature tag, and that feature is enabled.
+
+[NOTE]
+.Note
+====
+The attr:extension attribute currently does not affect output generators in
+any way, and is simply metadata.
+This will be addressed as we better define different types of dependencies
+between extensions.
+====
+
+== 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 <<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 actual numeric value of the enumerant is computed as defined in the
+    "`Layers and Extensions`" appendix of the Vulkan Specification.
+  * 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
+|====
+| attr:value | attr:bitpos | attr:alias | attr:offset | attr:extnumber | attr:dir | attr:extends | Description
+| {yes}      | {no}        | {no}       | {no}        | {no}           | {no}     | {opt}^2^     | Numeric value
+| {no}       | {yes}       | {no}       | {no}        | {no}           | {no}     | {opt}^2^     | Bitmask value
+| {no}       | {no}        | {yes}      | {no}        | {no}           | {no}     | {opt}^2^     | Alias of another enumerant
+| {no}       | {no}        | {no}       | {yes}       | {opt}^1^       | {opt}    | {yes}        | Value added to an enumeration
+| {no}       | {no}        | {no}       | {yes}       | {opt}^1^       | {opt}    | {yes}        | Value added to an enumeration
+|====
+
+[1]: 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]: If attr:extends is not present, the enumerant value is a global
+constant.
+Otherwise, the value is added to the specified enumeration.
+
+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
+--------------------------------------
+
+
+[[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.
+
+Initially, the only API feature is Vulkan 1.0, so there is only one
+tag:feature tag in `vk.xml`.
+You can find it by searching for the following block of `vk.xml`:
+
+[source,xml]
+--------------------------------------
+<comment>
+<feature api="vulkan" name="VK_VERSION_1_0" number="1.0"
+         comment="Vulkan core API interface definitions">
+--------------------------------------
+
+Inside the tag:feature tag are nested multiple tag:require tags.
+These are just being used as a logical grouping mechanism for related parts
+of Vulkan 1.0 at present, though they may have more meaningful roles in the
+future if different API profiles are defined.
+
+
+=== 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-2021 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
+
+  * 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/registry/vulkan/sandboxCopy b/registry/vulkan/sandboxCopy
new file mode 100755
index 0000000..a7bec52
--- /dev/null
+++ b/registry/vulkan/sandboxCopy
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+#
+# Copyright 2018-2021 The Khronos Group, Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+specdir=out
+RHOST=kaylee
+RPATH=/home/khronos/memberftp/vulkan/
+
+cd $specdir || (echo "Can't 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/registry/vulkan/scripts/README.adoc b/registry/vulkan/scripts/README.adoc
new file mode 100644
index 0000000..0a60629
--- /dev/null
+++ b/registry/vulkan/scripts/README.adoc
@@ -0,0 +1,74 @@
+// Copyright 2014-2021 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` - 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.
+  ** `pygenerator.py` - Generates python encoding of the API description.
+  ** `validitygenerator.py` - Asciidoc validity language generator.
+
+  * `check_spec_links.py` - validates a variety of markup and content in the
+    Asciidoctor specification source.
+  * `make_ext_dependency.py` - generate extension dependencies in Bash and
+    Python form 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` - extract API reference pages from specification
+    source into single-page source documents.
+  * `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're
+    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.
+
+  * `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's 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/registry/vulkan/scripts/Retired/checkLinks.py b/registry/vulkan/scripts/Retired/checkLinks.py
new file mode 100755
index 0000000..35103a8
--- /dev/null
+++ b/registry/vulkan/scripts/Retired/checkLinks.py
@@ -0,0 +1,353 @@
+#!/usr/bin/python3
+#
+# Copyright 2015-2021 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 isn't # 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 doesn't 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's 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 precding '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+)\.txt')
+
+    # 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 didn't 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', '-----')
+
+    # Don't 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/registry/vulkan/scripts/Retired/extensionStubSource.py b/registry/vulkan/scripts/Retired/extensionStubSource.py
new file mode 100644
index 0000000..b9ff837
--- /dev/null
+++ b/registry/vulkan/scripts/Retired/extensionStubSource.py
@@ -0,0 +1,327 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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's 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's 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/registry/vulkan/scripts/Retired/findBalance.py b/registry/vulkan/scripts/Retired/findBalance.py
new file mode 100755
index 0000000..2a9efe1
--- /dev/null
+++ b/registry/vulkan/scripts/Retired/findBalance.py
@@ -0,0 +1,162 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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/registry/vulkan/scripts/Retired/fixupRef.py b/registry/vulkan/scripts/Retired/fixupRef.py
new file mode 100755
index 0000000..4a9b792
--- /dev/null
+++ b/registry/vulkan/scripts/Retired/fixupRef.py
@@ -0,0 +1,202 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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 weren't
+#       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're 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 crossreferenced 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/registry/vulkan/scripts/Retired/insertTags.py b/registry/vulkan/scripts/Retired/insertTags.py
new file mode 100755
index 0000000..a8c494c
--- /dev/null
+++ b/registry/vulkan/scripts/Retired/insertTags.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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're 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's 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's 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/registry/vulkan/scripts/Retired/realign.py b/registry/vulkan/scripts/Retired/realign.py
new file mode 100755
index 0000000..c2780d4
--- /dev/null
+++ b/registry/vulkan/scripts/Retired/realign.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python3
+#
+# Copyright 2013-2021 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's operated on by
+# some other filter, since whitespace inside a tag isn't 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/registry/vulkan/scripts/Retired/refDesc.py b/registry/vulkan/scripts/Retired/refDesc.py
new file mode 100644
index 0000000..be05a4b
--- /dev/null
+++ b/registry/vulkan/scripts/Retired/refDesc.py
@@ -0,0 +1,356 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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/registry/vulkan/scripts/__init__.py.docs b/registry/vulkan/scripts/__init__.py.docs
new file mode 100644
index 0000000..e4c3075
--- /dev/null
+++ b/registry/vulkan/scripts/__init__.py.docs
@@ -0,0 +1,36 @@
+# Copyright 2019-2021 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",
+#     "extensionmetadocgenerator",
+#     "generator",
+#     "genRef",
+#     "genspec",
+#     "genvk",
+#     "hostsyncgenerator",
+#     "indexExt",
+#     "make_ext_dependency",
+#     "pygenerator",
+#     "reflib",
+#     "reflow_count",
+#     "reflow",
+#     "reg",
+#     "test_check_spec_links_api_specific",
+#     "test_check_spec_links",
+#     "test_entity_db",
+#     "validitygenerator",
+#     "vkconventions",
+#     "xml_consistency",
+#     "spec_tools",
+# ]
diff --git a/registry/vulkan/scripts/asciidoctor-chunker/LICENSE b/registry/vulkan/scripts/asciidoctor-chunker/LICENSE
new file mode 100644
index 0000000..ab60297
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/asciidoctor-chunker/README.md b/registry/vulkan/scripts/asciidoctor-chunker/README.md
new file mode 100644
index 0000000..022c8f1
--- /dev/null
+++ b/registry/vulkan/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 shotcuts 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 discription 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/registry/vulkan/scripts/asciidoctor-chunker/asciidoctor-chunker.js b/registry/vulkan/scripts/asciidoctor-chunker/asciidoctor-chunker.js
new file mode 100755
index 0000000..dd35f4e
--- /dev/null
+++ b/registry/vulkan/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(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,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)?v(null!==(r=n.root)&&void 0!==r?r:h.getDocumentRoot(t[0]),a(a([],e),[m]),n,!0,t):v(t,e,n,!1)}t.is=function(e,t,n){return void 0===n&&(n={}),E([e],t,n)},t.some=E,t.filter=function(e,t,n){return void 0===n&&(n={}),_(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 v(t,e,n,!0)}));return i.length&&s.push(O(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 v(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)?O(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(_(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 E=t.slice(s+1),g=E.some(c.isTraversal),C=N(E,n,i);return g&&(A.has(E[0].type)&&E.unshift(T),E.unshift(f)),E.some(p.isFilter)?v(m,E,n,!1,i):g?O(m,[E],C,1/0):S(m,[E],C)}function O(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(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(e,t){e.attribs&&s.call(e.attribs,t)&&delete e.attribs[t]}function _(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),n=function(e){i.domEach(r,(function(n){i.isTag(n)&&E(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=_(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.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=_(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=E(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(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||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(E(this.toArray(),e,this.options.xmlMode,null===(t=this._root)||void 0===t?void 0:t[0]))},t.filterArray=E,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:()=>E,__spreadArray:()=>_,__await:()=>g,__asyncGenerator:()=>A,__asyncDelegator:()=>C,__asyncValues:()=>N,__makeTemplateObject:()=>v,__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 E(){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,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 v(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var O=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 O(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}},8783:(e,t,n)=>{var r=n(8614).EventEmitter,i=n(3129).spawn,s=n(5622),o=s.dirname,a=s.basename,c=n(5747);function l(e,t){this.flags=e,this.required=e.indexOf("<")>=0,this.optional=e.indexOf("[")>=0,this.bool=-1===e.indexOf("-no-"),(e=e.split(/[ ,|]+/)).length>1&&!/^[[<]/.test(e[1])&&(this.short=e.shift()),this.long=e.shift(),this.description=t||""}function u(e){this.commands=[],this.options=[],this._execs={},this._allowUnknownOption=!1,this._args=[],this._name=e||""}function h(e,t){var n=Math.max(0,t-e.length);return e+Array(n+1).join(" ")}function p(e,t){t=t||[];for(var n=0;n<t.length;n++)"--help"!==t[n]&&"-h"!==t[n]||(e.outputHelp(),process.exit(0))}function d(e){var t=e.name+(!0===e.variadic?"...":"");return e.required?"<"+t+">":"["+t+"]"}function f(e){try{if(c.statSync(e).isFile())return!0}catch(e){return!1}}n(1669).inherits(u,r),(t=e.exports=new u).Command=u,t.Option=l,l.prototype.name=function(){return this.long.replace("--","").replace("no-","")},l.prototype.attributeName=function(){return this.name().split("-").reduce((function(e,t){return e+t[0].toUpperCase()+t.slice(1)}))},l.prototype.is=function(e){return this.short===e||this.long===e},u.prototype.command=function(e,t,n){"object"==typeof t&&null!==t&&(n=t,t=null),n=n||{};var r=e.split(/ +/),i=new u(r.shift());return t&&(i.description(t),this.executables=!0,this._execs[i._name]=!0,n.isDefault&&(this.defaultExecutable=i._name)),i._noHelp=!!n.noHelp,this.commands.push(i),i.parseExpectedArgs(r),i.parent=this,t?this:i},u.prototype.arguments=function(e){return this.parseExpectedArgs(e.split(/ +/))},u.prototype.addImplicitHelpCommand=function(){this.command("help [cmd]","display help for [cmd]")},u.prototype.parseExpectedArgs=function(e){if(e.length){var t=this;return e.forEach((function(e){var n={required:!1,name:"",variadic:!1};switch(e[0]){case"<":n.required=!0,n.name=e.slice(1,-1);break;case"[":n.name=e.slice(1,-1)}n.name.length>3&&"..."===n.name.slice(-3)&&(n.variadic=!0,n.name=n.name.slice(0,-3)),n.name&&t._args.push(n)})),this}},u.prototype.action=function(e){var t=this,n=function(n,r){n=n||[],r=r||[];var i=t.parseOptions(r);p(t,i.unknown),i.unknown.length>0&&t.unknownOption(i.unknown[0]),i.args.length&&(n=i.args.concat(n)),t._args.forEach((function(e,r){e.required&&null==n[r]?t.missingArgument(e.name):e.variadic&&(r!==t._args.length-1&&t.variadicArgNotLast(e.name),n[r]=n.splice(r))})),t._args.length?n[t._args.length]=t:n.push(t),e.apply(t,n)},r=this.parent||this,i=r===this?"*":this._name;return r.on("command:"+i,n),this._alias&&r.on("command:"+this._alias,n),this},u.prototype.option=function(e,t,n,r){var i=this,s=new l(e,t),o=s.name(),a=s.attributeName();if("function"!=typeof n)if(n instanceof RegExp){var c=n;n=function(e,t){var n=c.exec(e);return n?n[0]:t}}else r=n,n=null;return(!s.bool||s.optional||s.required)&&(s.bool||(r=!0),void 0!==r&&(i[a]=r,s.defaultValue=r)),this.options.push(s),this.on("option:"+o,(function(e){null!==e&&n&&(e=n(e,void 0===i[a]?r:i[a])),"boolean"==typeof i[a]||void 0===i[a]?i[a]=null==e?!!s.bool&&(r||!0):e:null!==e&&(i[a]=e)})),this},u.prototype.allowUnknownOption=function(e){return this._allowUnknownOption=0===arguments.length||e,this},u.prototype.parse=function(e){this.executables&&this.addImplicitHelpCommand(),this.rawArgs=e,this._name=this._name||a(e[1],".js"),this.executables&&e.length<3&&!this.defaultExecutable&&e.push("--help");var t=this.parseOptions(this.normalize(e.slice(2))),n=this.args=t.args,r=this.parseArgs(this.args,t.unknown),i=r.args[0],s=null;return i&&(s=this.commands.filter((function(e){return e.alias()===i}))[0]),!0===this._execs[i]?this.executeSubCommand(e,n,t.unknown):s?(n[0]=s._name,this.executeSubCommand(e,n,t.unknown)):this.defaultExecutable?(n.unshift(this.defaultExecutable),this.executeSubCommand(e,n,t.unknown)):r},u.prototype.executeSubCommand=function(e,t,n){(t=t.concat(n)).length||this.help(),"help"===t[0]&&1===t.length&&this.help(),"help"===t[0]&&(t[0]=t[1],t[1]="--help");var r,l=e[1],u=a(l,s.extname(l))+"-"+t[0],h=c.realpathSync(l);r=o(h);var p,d=s.join(r,u),m=!1;f(d+".js")?(u=d+".js",m=!0):f(d+".ts")?(u=d+".ts",m=!0):f(d)&&(u=d),t=t.slice(1),"win32"!==process.platform?m?(t.unshift(u),t=(process.execArgv||[]).concat(t),p=i(process.argv[0],t,{stdio:"inherit",customFds:[0,1,2]})):p=i(u,t,{stdio:"inherit",customFds:[0,1,2]}):(t.unshift(u),p=i(process.execPath,t,{stdio:"inherit"})),["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((function(e){process.on(e,(function(){!1===p.killed&&null===p.exitCode&&p.kill(e)}))})),p.on("close",process.exit.bind(process)),p.on("error",(function(e){"ENOENT"===e.code?console.error("error: %s(1) does not exist, try --help",u):"EACCES"===e.code&&console.error("error: %s(1) not executable. try chmod or run with root",u),process.exit(1)})),this.runningCommand=p},u.prototype.normalize=function(e){for(var t,n,r,i=[],s=0,o=e.length;s<o;++s){if(t=e[s],s>0&&(n=this.optionFor(e[s-1])),"--"===t){i=i.concat(e.slice(s));break}n&&n.required?i.push(t):t.length>1&&"-"===t[0]&&"-"!==t[1]?t.slice(1).split("").forEach((function(e){i.push("-"+e)})):/^--/.test(t)&&~(r=t.indexOf("="))?i.push(t.slice(0,r),t.slice(r+1)):i.push(t)}return i},u.prototype.parseArgs=function(e,t){var n;return e.length?(n=e[0],this.listeners("command:"+n).length?this.emit("command:"+e.shift(),e,t):this.emit("command:*",e)):(p(this,t),t.length>0&&this.unknownOption(t[0]),0===this.commands.length&&0===this._args.filter((function(e){return e.required})).length&&this.emit("command:*")),this},u.prototype.optionFor=function(e){for(var t=0,n=this.options.length;t<n;++t)if(this.options[t].is(e))return this.options[t]},u.prototype.parseOptions=function(e){for(var t,n,r,i=[],s=e.length,o=[],a=0;a<s;++a)if(r=e[a],t)i.push(r);else if("--"!==r)if(n=this.optionFor(r))if(n.required){if(null==(r=e[++a]))return this.optionMissingArgument(n);this.emit("option:"+n.name(),r)}else n.optional?(null==(r=e[a+1])||"-"===r[0]&&"-"!==r?r=null:++a,this.emit("option:"+n.name(),r)):this.emit("option:"+n.name());else r.length>1&&"-"===r[0]?(o.push(r),a+1<e.length&&"-"!==e[a+1][0]&&o.push(e[++a])):i.push(r);else t=!0;return{args:i,unknown:o}},u.prototype.opts=function(){for(var e={},t=this.options.length,n=0;n<t;n++){var r=this.options[n].attributeName();e[r]=r===this._versionOptionName?this._version:this[r]}return e},u.prototype.missingArgument=function(e){console.error("error: missing required argument `%s'",e),process.exit(1)},u.prototype.optionMissingArgument=function(e,t){t?console.error("error: option `%s' argument missing, got `%s'",e.flags,t):console.error("error: option `%s' argument missing",e.flags),process.exit(1)},u.prototype.unknownOption=function(e){this._allowUnknownOption||(console.error("error: unknown option `%s'",e),process.exit(1))},u.prototype.variadicArgNotLast=function(e){console.error("error: variadic arguments must be last `%s'",e),process.exit(1)},u.prototype.version=function(e,t){if(0===arguments.length)return this._version;this._version=e;var n=new l(t=t||"-V, --version","output the version number");return this._versionOptionName=n.long.substr(2)||"version",this.options.push(n),this.on("option:"+this._versionOptionName,(function(){process.stdout.write(e+"\n"),process.exit(0)})),this},u.prototype.description=function(e,t){return 0===arguments.length?this._description:(this._description=e,this._argsDescription=t,this)},u.prototype.alias=function(e){var t=this;if(0!==this.commands.length&&(t=this.commands[this.commands.length-1]),0===arguments.length)return t._alias;if(e===t._name)throw new Error("Command alias can't be the same as its name");return t._alias=e,this},u.prototype.usage=function(e){var t=this._args.map((function(e){return d(e)})),n="[options]"+(this.commands.length?" [command]":"")+(this._args.length?" "+t.join(" "):"");return 0===arguments.length?this._usage||n:(this._usage=e,this)},u.prototype.name=function(e){return 0===arguments.length?this._name:(this._name=e,this)},u.prototype.prepareCommands=function(){return this.commands.filter((function(e){return!e._noHelp})).map((function(e){var t=e._args.map((function(e){return d(e)})).join(" ");return[e._name+(e._alias?"|"+e._alias:"")+(e.options.length?" [options]":"")+(t?" "+t:""),e._description]}))},u.prototype.largestCommandLength=function(){return this.prepareCommands().reduce((function(e,t){return Math.max(e,t[0].length)}),0)},u.prototype.largestOptionLength=function(){var e=[].slice.call(this.options);return e.push({flags:"-h, --help"}),e.reduce((function(e,t){return Math.max(e,t.flags.length)}),0)},u.prototype.largestArgLength=function(){return this._args.reduce((function(e,t){return Math.max(e,t.name.length)}),0)},u.prototype.padWidth=function(){var e=this.largestOptionLength();return this._argsDescription&&this._args.length&&this.largestArgLength()>e&&(e=this.largestArgLength()),this.commands&&this.commands.length&&this.largestCommandLength()>e&&(e=this.largestCommandLength()),e},u.prototype.optionHelp=function(){var e=this.padWidth();return this.options.map((function(t){return h(t.flags,e)+"  "+t.description+(t.bool&&void 0!==t.defaultValue?" (default: "+JSON.stringify(t.defaultValue)+")":"")})).concat([h("-h, --help",e)+"  output usage information"]).join("\n")},u.prototype.commandHelp=function(){if(!this.commands.length)return"";var e=this.prepareCommands(),t=this.padWidth();return["Commands:",e.map((function(e){var n=e[1]?"  "+e[1]:"";return(n?h(e[0],t):e[0])+n})).join("\n").replace(/^/gm,"  "),""].join("\n")},u.prototype.helpInformation=function(){var e=[];if(this._description){e=[this._description,""];var t=this._argsDescription;if(t&&this._args.length){var n=this.padWidth();e.push("Arguments:"),e.push(""),this._args.forEach((function(r){e.push("  "+h(r.name,n)+"  "+t[r.name])})),e.push("")}}var r=this._name;this._alias&&(r=r+"|"+this._alias);var i=["Usage: "+r+" "+this.usage(),""],s=[],o=this.commandHelp();o&&(s=[o]);var a=["Options:",""+this.optionHelp().replace(/^/gm,"  "),""];return i.concat(e).concat(a).concat(s).join("\n")},u.prototype.outputHelp=function(e){e||(e=function(e){return e}),process.stdout.write(e(this.helpInformation())),this.emit("--help")},u.prototype.help=function(e){this.outputHelp(e),process.exit()}},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 E=!1,_=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||(E=!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 _.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,E=void 0!==T&&T;return d?function(t){d[0]=t;var n=h.getChildren(t),i=E?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(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 v(e){for(var n=0;"\\"===t.charAt(--e);)n++;return 1==(1&n)}function O(){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)O(),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&&(O(),g.push({type:"descendant"}),A=!1),b in a){var y=a[b],I=y[0],R=y[1];g.push({type:"attribute",name:I,action:R,value:C(1),namespace:null,ignoreCase:!!n.xmlMode&&null})}else if("["===b){N(1);var k=void 0,L=null;"|"===t.charAt(i)&&(L="",i+=1),t.startsWith("*|",i)&&(L="*",i+=2),k=C(0),null===L&&"|"===t.charAt(i)&&"="!==t.charAt(i+1)&&(L=k,k=C(1)),(null!==(l=n.lowerCaseAttributeNames)&&void 0!==l?l:!n.xmlMode)&&(k=k.toLowerCase()),N(0),R="exists";var M=s.get(t.charAt(i));if(M){if(R=M,"="!==t.charAt(i+1))throw new Error("Expected `=`");N(2)}else"="===t.charAt(i)&&(R="equals",N(1));var x="",P=null;if("exists"!==R){if(d.has(t.charAt(i))){for(var D=t.charAt(i),w=i+1;w<t.length&&(t.charAt(w)!==D||v(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)||v(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(k)),"]"!==t.charAt(i))throw new Error("Attribute selector didn't terminate");i+=1;var U={type:"attribute",name:k,action:R,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=E(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,K=1;K>0&&i<t.length;i++)"("!==t.charAt(i)||v(i)?")"!==t.charAt(i)||v(i)||K--:K++;if(K)throw new Error("Parenthesis not matched");if(G=t.slice(j,i-1),p.has(B)){var q=G.charAt(0);q===G.slice(-1)&&d.has(q)&&(G=G.slice(1,-1)),G=m(G)}}g.push({type:"pseudo",name:B,data:G})}else{L=null;var Y=void 0;if("*"===b)i+=1,Y="*";else{if(!r.test(t.slice(i)))return g.length&&"descendant"===g[g.length-1].type&&g.pop(),_(e,g),i;"|"===t.charAt(i)&&(L="",i+=1),Y=C(0)}"|"===t.charAt(i)&&(L=Y,"*"===t.charAt(i+1)?(Y="*",i+=2):Y=C(1)),"*"===Y?g.push({type:"universal",namespace:L}):((null!==(f=n.lowerCaseTags)&&void 0!==f?f:!n.xmlMode)&&(Y=Y.toLowerCase()),g.push({type:"tag",name:Y,namespace:L}))}}return _(e,g),i}function _(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=E(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(e){return e.type===o.ElementType.CDATA}function _(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))n=new u(e.data);else if(g(e))n=new h(e.data);else if(T(e)){var r=t?v(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(e)){r=t?v(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?v(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 v(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=E,t.isText=_,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(4007)),s=r(n(7802)),o=r(n(2228)),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(4589)),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(2228)).default),s=h(i);t.encodeXML=T(i);var o,a,c=u(r(n(4007)).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}})},4589: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}')},4007: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":"‌"}')},7802: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":"ÿ"}')},2228:e=>{"use strict";e.exports=JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}')},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=E(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",E("link",i));s&&(r.link=s),A(r,"description","subtitle",i),(o=_("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",E("link",n));r&&(t.link=r);var i=_("summary",n)||_("content",n);i&&(t.description=i);var s=_("updated",n);return s&&(t.pubDate=new Date(s)),t.media=m(n),t}))}else{var o;i=null!==(t=null===(e=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=_("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=_("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(e,t){return p.getElementsByTagName(e,t,!0,1)[0]}function _(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=_(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(4007)),o=r(n(7802)),a=r(n(2228));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),E=h("R",35),_=h("I",36),g=h("P",37),A=h("T",38),C=u("R",40,1),N=u("I",41,1),v=u("P",42,1),O=u("T",43,1),b=h("Y",45),S=h("L",46),y=h("E",47),I=u("Y",49,1),R=u("L",50,1),k=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?v(this,e):34===this._state?E(this,e):35===this._state?_(this,e):36===this._state?g(this,e):37===this._state?A(this,e):38===this._state?this.stateBeforeSpecialLast(e,2):42===this._state?O(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?R(this,e):50===this._state?k(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 i.compile(r.parse(e))}},7766:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;var n=/^([+-]?\d*n)?\s*(?:([+-]?)\s*(\d+))?$/;t.parse=function(e){if("even"===(e=e.trim().toLowerCase()))return[2,0];if("odd"===e)return[2,1];var t,r=e.match(n);if(!r)throw new Error("n-th rule couldn't be parsed ('"+e+"')");return r[1]?(t=parseInt(r[1],10),isNaN(t)&&(t=r[1].startsWith("-")?-1:1)):t=0,[t,("-"===r[2]?-1:1)*(r[3]?parseInt(r[3],10):0)]}},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,E=m.NAMESPACES,_=m.ATTRS,g={scriptingEnabled:!0,sourceCodeLocationInfo:!1,onParseError:null,treeAdapter:l},A="hidden",C="INITIAL_MODE",N="BEFORE_HTML_MODE",v="BEFORE_HEAD_MODE",O="IN_HEAD_MODE",b="IN_HEAD_NO_SCRIPT_MODE",S="AFTER_HEAD_MODE",y="IN_BODY_MODE",I="TEXT_MODE",R="IN_TABLE_MODE",k="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",K="AFTER_AFTER_FRAMESET_MODE",q={[T.TR]:P,[T.TBODY]:x,[T.THEAD]:x,[T.TFOOT]:x,[T.CAPTION]:L,[T.COLGROUP]:M,[T.TABLE]:R,[T.BODY]:y,[T.FRAMESET]:B},Y={[T.CAPTION]:R,[T.COLGROUP]:R,[T.TBODY]:R,[T.TFOOT]:R,[T.THEAD]:R,[T.COL]:M,[T.TR]:x,[T.TD]:P,[T.TH]:P},V={[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,E.HTML),e.insertionMode=v):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},[v]:{[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,E.HTML),e.headElement=e.openElements.current,e.insertionMode=O):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},[O]:{[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=O):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,E.HTML),e.framesetOk=!1,e.insertionMode=y):n===T.FRAMESET?(e._insertElement(t,E.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]:ke,[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)}},[R]:{[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},[k]:{[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=R,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=R,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&&ke(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,E.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=R):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,E.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=R,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=R):n===T.TABLE?e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=R,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,E.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&&ke(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=Y[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,E.HTML):n===T.FRAME?(e._appendElement(t,E.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=K)},[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},[K]:{[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):Re(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=X(e,n),r===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(o,r),r=o)}return r}function X(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 $(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===E.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),$(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=v,e._processToken(t)}function ce(e,t){e._insertFakeElement(T.HEAD),e.headElement=e.openElements.current,e.insertionMode=O,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,E.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,E.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,E.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=O,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,E.HTML)}function Ee(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,E.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function _e(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,E.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function ge(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,E.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function Ae(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,E.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function Ce(e,t){e._appendElement(t,E.HTML),t.ackSelfClosing=!0}function Ne(e,t){e._switchToTextParsing(t,r.MODE.RAWTEXT)}function ve(e,t){e.openElements.currentTagName===T.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,E.HTML)}function Oe(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,E.HTML)}function be(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,E.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?_e(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,E.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,E.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,E.HTML)}(e,t):n===T.EM||n===T.TT?_e(e,t):n===T.BR?Ae(e,t):n===T.HR?function(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._appendElement(t,E.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t):n===T.RB?Oe(e,t):n===T.RT||n===T.RP?function(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(T.RTC),e._insertElement(t,E.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?Ee(e,t):n===T.BIG?_e(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,E.SVG):e._insertElement(t,E.SVG),t.ackSelfClosing=!0}(e,t):n===T.RTC?Oe(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,E.HTML),n||(e.formElement=e.openElements.current))}(e,t):n===T.CODE||n===T.FONT?_e(e,t):n===T.NOBR?function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(T.NOBR)&&(Z(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,E.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,E.MATHML):e._insertElement(t,E.MATHML),t.ackSelfClosing=!0}(e,t):n===T.MENU?function(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,E.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?_e(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,E.HTML),e.framesetOk=!1,e.insertionMode=R}(e,t):n===T.EMBED?Ae(e,t):n===T.INPUT?function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,E.HTML);const n=r.getTokenAttr(t,_.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,E.HTML),e.framesetOk=!1}(e,t):n===T.STRIKE||n===T.STRONG?_e(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,E.HTML),e.framesetOk=!1,e.insertionMode===R||e.insertionMode===L||e.insertionMode===x||e.insertionMode===P||e.insertionMode===D?e.insertionMode=H:e.insertionMode=w}(e,t):n===T.OPTION?ve(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?Ee(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,E.HTML),e.insertionMode=B)}(e,t):n===T.FIELDSET?Te(e,t):n===T.TEXTAREA?function(e,t){e._insertElement(t,E.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?ve(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,E.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 Re(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 ke(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):Re(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):Re(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):Re(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):Re(e,t);break;case 5:n===T.ASIDE?ye(e,t):n===T.SMALL?Z(e,t):Re(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):Re(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):Re(e,t);break;case 8:n===T.FIELDSET?ye(e,t):n===T.TEMPLATE?ue(e,t):Re(e,t);break;case 10:n===T.BLOCKQUOTE||n===T.FIGCAPTION?ye(e,t):Re(e,t);break;default:Re(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=k,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,E.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,E.HTML),e.insertionMode=x}(e,t):n===T.INPUT?function(e,t){const n=r.getTokenAttr(t,_.TYPE);n&&n.toLowerCase()===A?e._appendElement(t,E.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,E.HTML),e.insertionMode=L}(e,t):De(e,t);break;case 8:n===T.COLGROUP?function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,E.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=R,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,E.HTML)):n===T.OPTGROUP?(e.openElements.currentTagName===T.OPTION&&e.openElements.pop(),e.openElements.currentTagName===T.OPTGROUP&&e.openElements.pop(),e._insertElement(t,E.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,E.HTML,[]));const n=this.treeAdapter.createElement("documentmock",E.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)!==E.HTML&&!this._isIntegrationPoint(e)}_switchToTextParsing(e,t){this._insertElement(e,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)===E.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,E.HTML,[]);this._attachElementToTree(t),this.openElements.push(t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,E.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,E.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===E.HTML)return!1;if(this.treeAdapter.getTagName(t)===T.ANNOTATION_XML&&n===E.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,E.MATHML)||(e.type===r.START_TAG_TOKEN||i)&&this._isIntegrationPoint(t,E.HTML)||e.type===r.EOF_TOKEN)}_processToken(e){V[this.insertionMode][e.type](this,e)}_processTokenInBodyMode(e){V.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)!==E.HTML&&!e._isIntegrationPoint(e.openElements.current);)e.openElements.pop();e._processToken(t)}else{const n=e._getAdjustedCurrentElement(),r=e.treeAdapter.getNamespaceURI(n);r===E.MATHML?p.adjustTokenMathMLAttrs(t):r===E.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)===E.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=q[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=O;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:v;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===E.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",E="TAG_NAME_STATE",_="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",v="RAWTEXT_END_TAG_NAME_STATE",O="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",R="SCRIPT_DATA_ESCAPED_STATE",k="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",K="AFTER_ATTRIBUTE_NAME_STATE",q="BEFORE_ATTRIBUTE_VALUE_STATE",Y="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE",V="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE",W="ATTRIBUTE_VALUE_UNQUOTED_STATE",Q="AFTER_ATTRIBUTE_VALUE_QUOTED_STATE",z="SELF_CLOSING_START_TAG_STATE",X="BOGUS_COMMENT_STATE",$="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",Ee="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE",_e="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",ve="BOGUS_DOCTYPE_STATE",Oe="CDATA_SECTION_STATE",be="CDATA_SECTION_BRACKET_STATE",Se="CDATA_SECTION_END_STATE",ye="CHARACTER_REFERENCE_STATE",Ie="NAMED_CHARACTER_REFERENCE_STATE",Re="AMBIGUOS_AMPERSAND_STATE",ke="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 Ke(e){return e>=a.LATIN_SMALL_A&&e<=a.LATIN_SMALL_F}function qe(e){return e+32}function Ye(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(e>>>10&1023|55296)+String.fromCharCode(56320|1023&e))}function Ve(e){return String.fromCharCode(qe(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!==qe(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,Ye(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===Y||this.returnState===V||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+=Ye(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===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=O: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=$:e===a.SOLIDUS?this.state=T:Be(e)?(this._createStartTagToken(),this._reconsumeInState(E)):e===a.QUESTION_MARK?(this._err(o.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(),this._reconsumeInState(X)):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)):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(X))}[E](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+=Ve(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+=Ye(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+=Ve(e),this.tempBuff.push(e);else if(Ue(e))this.currentToken.tagName+=Ye(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(v)):(this._emitChars("</"),this._reconsumeInState(p))}[v](e){if(Fe(e))this.currentToken.tagName+=Ve(e),this.tempBuff.push(e);else if(Ue(e))this.currentToken.tagName+=Ye(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)}}[O](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+=Ve(e),this.tempBuff.push(e);else if(Ue(e))this.currentToken.tagName+=Ye(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)}[R](e){e===a.HYPHEN_MINUS?(this.state=k,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)}[k](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=R,this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?(this._err(o.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=R,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=R,this._emitChars(i.REPLACEMENT_CHARACTER)):e===a.EOF?(this._err(o.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=R,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(R))}[x](e){Be(e)?(this._createEndTagToken(),this._reconsumeInState(P)):(this._emitChars("</"),this._reconsumeInState(R))}[P](e){if(Fe(e))this.currentToken.tagName+=Ve(e),this.tempBuff.push(e);else if(Ue(e))this.currentToken.tagName+=Ye(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(R)}}[D](e){we(e)||e===a.SOLIDUS||e===a.GREATER_THAN_SIGN?(this.state=this._isTempBufferEqualToScriptString()?w:R,this._emitCodePoint(e)):Fe(e)?(this.tempBuff.push(qe(e)),this._emitCodePoint(e)):Ue(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(R)}[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()?R:w,this._emitCodePoint(e)):Fe(e)?(this.tempBuff.push(qe(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(K):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(K),this._unconsume()):e===a.EQUALS_SIGN?this._leaveAttrName(q):Fe(e)?this.currentAttr.name+=Ve(e):e===a.QUOTATION_MARK||e===a.APOSTROPHE||e===a.LESS_THAN_SIGN?(this._err(o.unexpectedCharacterInAttributeName),this.currentAttr.name+=Ye(e)):e===a.NULL?(this._err(o.unexpectedNullCharacter),this.currentAttr.name+=i.REPLACEMENT_CHARACTER):this.currentAttr.name+=Ye(e)}[K](e){we(e)||(e===a.SOLIDUS?this.state=z:e===a.EQUALS_SIGN?this.state=q:e===a.GREATER_THAN_SIGN?(this.state=u,this._emitCurrentToken()):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):(this._createAttr(""),this._reconsumeInState(j)))}[q](e){we(e)||(e===a.QUOTATION_MARK?this.state=Y:e===a.APOSTROPHE?this.state=V:e===a.GREATER_THAN_SIGN?(this._err(o.missingAttributeValue),this.state=u,this._emitCurrentToken()):this._reconsumeInState(W))}[Y](e){e===a.QUOTATION_MARK?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+=Ye(e)}[V](e){e===a.APOSTROPHE?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+=Ye(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+=Ye(e)):e===a.EOF?(this._err(o.eofInTag),this._emitEOFToken()):this.currentAttr.value+=Ye(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))}[X](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+=Ye(e)}[$](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=Oe:(this._err(o.cdataInHtmlContent),this._createCommentToken(),this.currentToken.data="[CDATA[",this.state=X):this._ensureHibernation()||(this._err(o.incorrectlyOpenedComment),this._createCommentToken(),this._reconsumeInState(X))}[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+=Ye(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(Ve(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(Ye(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+=Ve(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+=Ye(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=_e:this._ensureHibernation()||(this._err(o.invalidCharacterSequenceAfterDoctypeName),this.currentToken.forceQuirks=!0,this._reconsumeInState(ve)))}[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(ve))}[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(ve)))}[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+=Ye(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+=Ye(e)}[Te](e){we(e)?this.state=Ee: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(ve))}[Ee](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(ve)))}[_e](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(ve))}[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(ve)))}[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+=Ye(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+=Ye(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(ve)))}[ve](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())}[Oe](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(Oe))}[Se](e){e===a.GREATER_THAN_SIGN?this.state=u:e===a.RIGHT_SQUARE_BRACKET?this._emitChars("]"):(this._emitChars("]]"),this._reconsumeInState(Oe))}[ye](e){this.tempBuff=[a.AMPERSAND],e===a.NUMBER_SIGN?(this.tempBuff.push(e),this.state=ke):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=Re}[Re](e){Ge(e)?this._isCharacterReferenceInAttribute()?this.currentAttr.value+=Ye(e):this._emitCodePoint(e):(e===a.SEMICOLON&&this._err(o.unknownNamedCharacterReference),this._reconsumeInState(this.returnState))}[ke](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)||Ke(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:Ke(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},184: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"},3129:e=>{"use strict";e.exports=require("child_process")},8614:e=>{"use strict";e.exports=require("events")},5747:e=>{"use strict";e.exports=require("fs")},5622:e=>{"use strict";e.exports=require("path")},1669:e=>{"use strict";e.exports=require("util")}},r={};function i(e){if(r[e])return r[e].exports;var t=r[e]={exports:{}};return n[e].call(t.exports,t,t.exports,i),t.exports}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})},(()=>{"use strict";var e=i(5747),t=i(5622),n=i(7503),r=i(7911);const s=(...e)=>(...t)=>{let n=t;for(let t=0;t<e.length;t++)n=[e[t].apply(void 0,n)];return n[0]},o=e.promises,a=e=>o.mkdir(e,{recursive:!0}).then((t=>e),(e=>e)),c=e=>async n=>{if(await(e=>t=>Promise.allSettled([o.stat(e),o.stat(t)]).then((([e,t])=>"rejected"===t.status||e.value.atimeMs>t.value.atimeMs)))(e)(n)){const r=t.dirname(n);return await l(r)||await a(r),o.copyFile(e,n).then((e=>n))}return!1},l=t=>o.access(t,e.constants.F_OK).then((e=>!0),(e=>!1)),u=require("url"),h=e.promises,p=e=>("#content",e=>e.find("#content"))(e),d=(e,t)=>(n,r,i,...o)=>{const a=_(t),c=o.map(a),l=i.clone();return s(p,((...e)=>t=>(e.forEach((e=>t.append(e.clone()))),t.end()))(...c),O(e(l.find("#footnotes"))),I(r,t.get("navigation")),b(r),D)(l)},f=e=>{const t=(n,i,s,o,a,c,l)=>{const u=n.depth[c]||n.depth.default,h=l?"index":((e,t,n)=>1===t?`${e}${n}`:2===t?`${e}_sec${n}`:`${e}-${n}`)(a,o,c);if(u===o)return void e(n,h,i,s,l);const p=`div.sect${o+1}`;var d;e(n,h,i,(d=p,e=>e.clone().find(d).remove().end())(s),l);const f=s.find(p);return 0!==f.length?f.each(((e,s)=>t(n,i,new r.Cheerio(s),o+1,h,e+1,!1))):void 0};return t},m=(e,t,n,i,s)=>{const o=i.clone();let a=0,c=0,l=!1,u=!1;o.find("#content").children().each(((i,h)=>{const p=new r.Cheerio(h);if(!p.hasClass("partintro"))return p.hasClass("sect1")?(l||u?u=!1:(u=!0,l=!0),n(s,o,p,1,"chap",++a,u)):p.hasClass("sect0")?(l||u?u=!1:(u=!0,l=!0),t(s,o,p,++c,u)):"preamble"===p.attr("id")?(u=!0,l=!0,e(s,o,p,u)):void 0}))},T=(e,t,n)=>{const i=((e,t)=>{const n=new Map,i={},s=[];let o=0;const a=(e,t)=>{i[t]=o,s[o]=t,o++,e.find("*[id]").each(((e,i)=>{const s=new r.Cheerio(i).attr("id");s.startsWith("_footnotedef_")||n.set(s,`${t}#${s}`)})),e.attr("id")?n.set(e.attr("id"),t):n.set(e.children().first().attr("id"),t)},c=f(((e,t,n,r,i)=>{a(r,i?"index.html":`${t}.html`)}));return m(((e,t,n,r)=>{a(n,r?"index.html":"preamble.html")}),((e,t,n,r,i)=>{a(n,i?"index.html":`part${r}.html`)}),c,e,t),n.set("navigation",{filename2pageNum:i,filenameList:s}),n})(t.root(),n),o=_(i),a=s((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})(n),E,o,M(n.outdir),x(n),(e=>t=>(new r.Cheerio(`<li><a href="index.html">${e.titlePage}</a></li>`).insertBefore(t.find("div#toc > ul > li:first-child")),t))(n))(t),c=C(g(t("#footnotes")));m(((e,t,n)=>(r,i,s,o)=>{const a=o?"index":"preamble";e(a,n(r,a,t,s))})(e,a,d(c,i)),((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,a,d(c,i)),((e,t,n)=>f(((r,i,s,o,a)=>{e(i,n(r,i,t,o))})))(e,a,d(c,i)),t.root(),n)},E=e=>(0===e.find("#toc a[href^=#]").length&&console.log("INFO: Your TOC has no in-document links.\n"),e),_=e=>t=>(t.find("a[href^=#]").each(((t,n)=>{const i=new r.Cheerio(n),s=i.attr("href");if(!s.startsWith("#_footnotedef_")&&!s.startsWith("#_footnoteref_")){const t=s.substring(1);i.attr("href",`${e.get(t)}`)}})),t),g=e=>{const t=new Set;return e.find("div.footnote").each(((e,n)=>{t.add(new r.Cheerio(n).attr("id"))})),t},A=e=>e.find("a.footnote"),C=e=>t=>n=>{if(0===n.length)return t.empty().end(),n;const i=new Set([...e]);return n.each(((e,t)=>{i.delete(new r.Cheerio(t).attr("href").substring(1))})),i.forEach((e=>{t.find(`#${e}`).remove().end()})),n},N=e=>{if(0===e.length)return e;const t=new Set;return e.each(((e,n)=>{const i=new r.Cheerio(n);if(i.attr("id"))return;const s=i.attr("href");if(t.has(s))return;t.add(s);const o=v(s);i.attr("id",o)})),e},v=e=>`_footnoteref${e.substring(e.lastIndexOf("_"))}`,O=e=>t=>(s(p,A,e,N)(t),t),b=e=>t=>(s(S(e),y)(t),t),S=e=>t=>t.find(`#toc a[href^="${e}.html"]`).parent(),y=e=>e.addClass("current"),I=(e,{filename2pageNum:t,filenameList:n})=>i=>{const s=t[`${e}.html`],o=s>0?n[s-1]:null,a=s<n.length-1?n[s+1]:null,c=R(o,a),l=i.find("body > div:last-of-type");return"footer"===l.attr("id")?new r.Cheerio(c).insertBefore(l):new r.Cheerio(c).insertAfter(l),i},R=(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`,k=/^#|https:|http:|file:/,L=(e,n)=>i=>{const s=(e=>n=>{const r=t.dirname(e);return t.join(r,n)})(e);(e=>{const n=[];return e.find("link[href], script[src], img[src]").each(((e,i)=>{const s=new r.Cheerio(i),o=s.attr("href")||s.attr("src");o.match(k)||t.isAbsolute(o)||n.push((e=>{const n=t.basename(e),r=n.indexOf("?");return-1===r?e:t.join(t.dirname(e),n.substring(0,r))})(o))})),n})(i).forEach((e=>{return c(s(e))((r=e,t.join(n,r))).catch((t=>console.log(`    Local file linked from the document is missing: ${s(e)}`)));var r}))},M=e=>n=>(n.find("style").each(((n,i)=>{const s=`style${n}.css`,o=new r.Cheerio(i);h.writeFile(t.join(e,s),new r.Cheerio(i).contents().text()),o.replaceWith(new r.Cheerio(`<link rel='stylesheet' href='${s}' type='text/css' />`))})),n),x=e=>t=>{const{css:n,outdir:r}=e;if(!n||0==n.length)return t;const i=t.find("head");return n.forEach((e=>i.append(P(r,e)))),t},P=(e,n)=>{const r=t.basename(n),s=t.join(e,r);return"asciidoctor-chunker.css"===n?Promise.resolve().then(i.t.bind(i,184,17)).then((e=>h.writeFile(s,e.default))).catch((e=>{const n=t.dirname((0,u.fileURLToPath)("file:///Users/shito/Documents/git-repositories/javascript/asciidoctor-chunker/src/DOM.mjs")),r=t.resolve(n,"css","asciidoctor-chunker.css");c(r)(s)})):c(n)(s),`<link rel="stylesheet" href="${r}" type="text/css" />`},D=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 w=i(8783);const H=(e,t)=>e.split(","),F=(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}},U={depth:1,outdir:"html_chunks",css:["asciidoctor-chunker.css"],strictMode:!0,titlePage:"Titlepage"};console.log();const{singleHTML:B,config:G}=(e=>{const t=w.version("1.0.4").name("node asciidoctor-chunker.js").usage("<single.html> [options]").option("-o, --outdir <directory>","The output directory where the chunked html will be written out to.","html_chunks").option("--depth <depth specifier>","See the description above.","1").option("--css <paths>","The comma seprated list of css file paths to include.  The paths must be accesible from the current directory.",H).option("--no-strictMode","Turns off the strict mode.").option("--titlePage <title string>","Sets title page toc string.","Titlepage").description("Description:\n  Splits an html file generated by Asciidoctor to chunked htmls.\n  The default output directory is 'html_chunks'. You can override\n  it with 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 source single html, asciidoctor-chunker ignores it by\n  default. If you want them to be included into the chunked html,\n  set the option --no-strictMode. The element will be copied to\n  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 at the bottom of every chunked page. You can\n  override this by giving a comma separated list of paths\n  to your custom css files. They are copied into the output\n  directory so the paths must be accessible by\n  asciidoctor-chunker.\n\nThe Depth Specifier:\n  You can list the multiple settings by connecting each\n  specifier with a comma. Each specifier is consisted of\n  either a single number or a collon separated with two\n  numbers.\n\n  The single number sets the default level of extraction.\n  Number 1 is the application's default and it extracts the\n  chapter level. Number 2 for section extraction, 3 for\n  subsection, and so on to 6 which is the maximum section\n  level of Asciidoctor.\n\n  The list of collon 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          The default level 2, all the chapters and\n                     sections will be extracted.\n  --depth 3,1:2,8:5  The default level 3, level 2 for Chap 1,\n                     level 5 for Chap 8.\n  --depth 1,3-8:2    The default level 1, level 2 for Chap 3 to 8.\n  --depth 3-8:3      No default is set so default level is 1, and\n                     level 3 for chap3 to 8.").parse(e),{args:n,depth:r,outdir:i,strictMode:s,titlePage:o,css:a=["asciidoctor-chunker.css"]}=t;1!==n.length&&t.help();const c=(e=>e.split(",").map((e=>{const[t,n]=e.split(":");return n?F(t,n):{default:+t}})).reduce(((e,t)=>({...e,...t})),{default:1}))(r);return{singleHTML:n[0],config:{depth:c,outdir:i,css:a,strictMode:s,titlePage:o}}})(process.argv);(async(r,i=U)=>{const{outdir:s}=i;await l(s)||await a(s);const o=(c=s,(e,n)=>{const r=t.format({dir:c,base:`${e}.html`});h.writeFile(r,n.html()).catch((e=>console.log("File write error:",r)))});var c;const u=(p=r,n.load(e.readFileSync(p)));var p;L(r,s)(u.root()),T(o,u,i),console.log(`Successfully chunked! => ${t.join(s,"index.html")}\n`)})(B,G)})()})();
\ No newline at end of file
diff --git a/registry/vulkan/scripts/cereal/__init__.py b/registry/vulkan/scripts/cereal/__init__.py
new file mode 100644
index 0000000..861cee3
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/__init__.py
@@ -0,0 +1,17 @@
+from .common import *
+from .decoder import *
+from .encoder import *
+from .extensionstructs import *
+from .frontend import *
+from .functable import *
+from .marshaling import *
+from .reservedmarshaling import *
+from .counting import *
+from .testing import *
+from .transform import *
+from .deepcopy import *
+from .handlemap import *
+from .dispatch import *
+from .unbox import *
+from .decodersnapshot import *
+from .subdecode import *
diff --git a/registry/vulkan/scripts/cereal/common/__init__.py b/registry/vulkan/scripts/cereal/common/__init__.py
new file mode 100644
index 0000000..dd6cdc9
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/common/__init__.py
@@ -0,0 +1,2 @@
+from .vulkantypes import *
+from .codegen import *
diff --git a/registry/vulkan/scripts/cereal/common/codegen.py b/registry/vulkan/scripts/cereal/common/codegen.py
new file mode 100644
index 0000000..4838328
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/common/codegen.py
@@ -0,0 +1,1007 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .vulkantypes import VulkanType, VulkanTypeInfo, VulkanCompoundType, VulkanAPI
+from collections import OrderedDict
+from copy import copy
+
+import os
+import sys
+
+# Class capturing a .cpp file and a .h file (a "C++ module")
+class Module(object):
+
+    def __init__(self, directory, basename, customAbsDir = None, suppress = False, implOnly = False):
+        self.directory = directory
+        self.basename = basename
+
+        self.headerPreamble = ""
+        self.implPreamble = ""
+
+        self.headerPostamble = ""
+        self.implPostamble = ""
+
+        self.headerFileHandle = ""
+        self.implFileHandle = ""
+
+        self.customAbsDir = customAbsDir
+
+        self.suppress = suppress
+
+        self.implOnly = implOnly
+
+    def getMakefileSrcEntry(self):
+        if self.customAbsDir:
+            return self.basename + ".cpp \\\n"
+        dirName = self.directory
+        baseName = self.basename
+        joined = os.path.join(dirName, baseName)
+        return "    " + joined + ".cpp \\\n"
+
+    def getCMakeSrcEntry(self):
+        if self.customAbsDir:
+            return "\n" + self.basename + ".cpp "
+        dirName = self.directory
+        baseName = self.basename
+        joined = os.path.join(dirName, baseName)
+        return "\n    " + joined + ".cpp "
+
+    def begin(self, globalDir):
+        if self.suppress:
+            return
+
+        # Create subdirectory, if needed
+        if self.customAbsDir:
+            absDir = self.customAbsDir
+        else:
+            absDir = os.path.join(globalDir, self.directory)
+
+        filename = os.path.join(absDir, self.basename)
+
+        fpHeader = None
+
+        if not self.implOnly:
+            fpHeader = open(filename + ".h", "w", encoding="utf-8")
+
+        fpImpl = open(filename + ".cpp", "w", encoding="utf-8")
+
+        self.headerFileHandle = fpHeader
+        self.implFileHandle = fpImpl
+
+        if not self.implOnly:
+            self.headerFileHandle.write(self.headerPreamble)
+
+        self.implFileHandle.write(self.implPreamble)
+
+    def appendHeader(self, toAppend):
+        if self.suppress:
+            return
+
+        if not self.implOnly:
+            self.headerFileHandle.write(toAppend)
+
+    def appendImpl(self, toAppend):
+        if self.suppress:
+            return
+
+        self.implFileHandle.write(toAppend)
+
+    def end(self):
+        if self.suppress:
+            return
+
+        if not self.implOnly:
+            self.headerFileHandle.write(self.headerPostamble)
+
+        self.implFileHandle.write(self.implPostamble)
+
+        if not self.implOnly:
+            self.headerFileHandle.close()
+
+        self.implFileHandle.close()
+
+# Class capturing a .proto protobuf definition file
+class Proto(object):
+
+    def __init__(self, directory, basename, customAbsDir = None, suppress = False):
+        self.directory = directory
+        self.basename = basename
+        self.customAbsDir = customAbsDir
+
+        self.preamble = ""
+        self.postamble = ""
+
+        self.suppress = suppress
+
+    def getMakefileSrcEntry(self):
+        if self.customAbsDir:
+            return self.basename + ".proto \\\n"
+        dirName = self.directory
+        baseName = self.basename
+        joined = os.path.join(dirName, baseName)
+        return "    " + joined + ".proto \\\n"
+
+    def getCMakeSrcEntry(self):
+        if self.customAbsDir:
+            return "\n" + self.basename + ".proto "
+
+        dirName = self.directory
+        baseName = self.basename
+        joined = os.path.join(dirName, baseName)
+        return "\n    " + joined + ".proto "
+
+    def begin(self, globalDir):
+        if self.suppress:
+            return
+
+        # Create subdirectory, if needed
+        if self.customAbsDir:
+            absDir = self.customAbsDir
+        else:
+            absDir = os.path.join(globalDir, self.directory)
+
+        filename = os.path.join(absDir, self.basename)
+
+        fpProto = open(filename + ".proto", "w", encoding="utf-8")
+        self.protoFileHandle = fpProto
+        self.protoFileHandle.write(self.preamble)
+
+    def append(self, toAppend):
+        if self.suppress:
+            return
+
+        self.protoFileHandle.write(toAppend)
+
+    def end(self):
+        if self.suppress:
+            return
+
+        self.protoFileHandle.write(self.postamble)
+        self.protoFileHandle.close()
+
+class CodeGen(object):
+
+    def __init__(self,):
+        self.code = ""
+        self.indentLevel = 0
+        self.gensymCounter = [-1]
+
+    def var(self, prefix="cgen_var"):
+        self.gensymCounter[-1] += 1
+        res = "%s_%s" % (prefix, '_'.join(str(i) for i in self.gensymCounter if i >= 0))
+        return res
+
+    def swapCode(self,):
+        res = "%s" % self.code
+        self.code = ""
+        return res
+
+    def indent(self,extra=0):
+        return "".join("    " * (self.indentLevel + extra))
+
+    def incrIndent(self,):
+        self.indentLevel += 1
+
+    def decrIndent(self,):
+        if self.indentLevel > 0:
+            self.indentLevel -= 1
+
+    def beginBlock(self, bracketPrint=True):
+        if bracketPrint:
+            self.code += self.indent() + "{\n"
+        self.indentLevel += 1
+        self.gensymCounter.append(-1)
+
+    def endBlock(self,bracketPrint=True):
+        self.indentLevel -= 1
+        if bracketPrint:
+            self.code += self.indent() + "}\n"
+        del self.gensymCounter[-1]
+
+    def beginIf(self, cond):
+        self.code += self.indent() + "if (" + cond + ")\n"
+        self.beginBlock()
+
+    def beginElse(self, cond = None):
+        if cond is not None:
+            self.code += \
+                self.indent() + \
+                "else if (" + cond + ")\n"
+        else:
+            self.code += self.indent() + "else\n"
+        self.beginBlock()
+
+    def endElse(self):
+        self.endBlock()
+
+    def endIf(self):
+        self.endBlock()
+
+    def beginSwitch(self, switchvar):
+        self.code += self.indent() + "switch (" + switchvar + ")\n"
+        self.beginBlock()
+
+    def switchCase(self, switchval, blocked = False):
+        self.code += self.indent() + "case %s:" % switchval
+        self.beginBlock(bracketPrint = blocked)
+
+    def switchCaseBreak(self, switchval, blocked = False):
+        self.code += self.indent() + "case %s:" % switchval
+        self.endBlock(bracketPrint = blocked)
+
+    def switchCaseDefault(self, blocked = False):
+        self.code += self.indent() + "default:" % switchval
+        self.beginBlock(bracketPrint = blocked)
+
+    def endSwitch(self):
+        self.endBlock()
+
+    def beginWhile(self, cond):
+        self.code += self.indent() + "while (" + cond + ")\n"
+        self.beginBlock()
+
+    def endWhile(self):
+        self.endBlock()
+
+    def beginFor(self, initial, condition, increment):
+        self.code += \
+            self.indent() + "for (" + \
+            "; ".join([initial, condition, increment]) + \
+            ")\n"
+        self.beginBlock()
+
+    def endFor(self):
+        self.endBlock()
+
+    def beginLoop(self, loopVarType, loopVar, loopInit, loopBound):
+        self.beginFor(
+            "%s %s = %s" % (loopVarType, loopVar, loopInit),
+            "%s < %s" % (loopVar, loopBound),
+            "++%s" % (loopVar))
+
+    def endLoop(self):
+        self.endBlock()
+
+    def stmt(self, code):
+        self.code += self.indent() + code + ";\n"
+
+    def line(self, code):
+        self.code += self.indent() + code + "\n"
+
+    def leftline(self, code):
+        self.code += code + "\n"
+
+    def makeCallExpr(self, funcName, parameters):
+        return funcName + "(%s)" % (", ".join(parameters))
+
+    def funcCall(self, lhs, funcName, parameters):
+        res = self.indent()
+
+        if lhs is not None:
+            res += lhs + " = "
+
+        res += self.makeCallExpr(funcName, parameters) + ";\n"
+        self.code += res
+
+    def funcCallRet(self, _lhs, funcName, parameters):
+        res = self.indent()
+        res += "return " + self.makeCallExpr(funcName, parameters) + ";\n"
+        self.code += res
+
+    # Given a VulkanType object, generate a C type declaration
+    # with optional parameter name:
+    # [const] [typename][*][const*] [paramName]
+    def makeCTypeDecl(self, vulkanType, useParamName=True):
+        constness = "const " if vulkanType.isConst else ""
+        typeName = vulkanType.typeName
+
+        if vulkanType.pointerIndirectionLevels == 0:
+            ptrSpec = ""
+        elif vulkanType.isPointerToConstPointer:
+            ptrSpec = "* const*" if vulkanType.isConst else "**"
+            if vulkanType.pointerIndirectionLevels > 2:
+                ptrSpec += "*" * (vulkanType.pointerIndirectionLevels - 2)
+        else:
+            ptrSpec = "*" * vulkanType.pointerIndirectionLevels
+
+        if useParamName and (vulkanType.paramName is not None):
+            paramStr = (" " + vulkanType.paramName)
+        else:
+            paramStr = ""
+
+        return "%s%s%s%s" % (constness, typeName, ptrSpec, paramStr)
+
+    def makeRichCTypeDecl(self, vulkanType, useParamName=True):
+        constness = "const " if vulkanType.isConst else ""
+        typeName = vulkanType.typeName
+
+        if vulkanType.pointerIndirectionLevels == 0:
+            ptrSpec = ""
+        elif vulkanType.isPointerToConstPointer:
+            ptrSpec = "* const*" if vulkanType.isConst else "**"
+            if vulkanType.pointerIndirectionLevels > 2:
+                ptrSpec += "*" * (vulkanType.pointerIndirectionLevels - 2)
+        else:
+            ptrSpec = "*" * vulkanType.pointerIndirectionLevels
+
+        if useParamName and (vulkanType.paramName is not None):
+            paramStr = (" " + vulkanType.paramName)
+        else:
+            paramStr = ""
+
+        if vulkanType.staticArrExpr:
+            staticArrInfo = "[%s]" % vulkanType.staticArrExpr
+        else:
+            staticArrInfo = ""
+
+        return "%s%s%s%s%s" % (constness, typeName, ptrSpec, paramStr, staticArrInfo)
+
+    # Given a VulkanAPI object, generate the C function protype:
+    # <returntype> <funcname>(<parameters>)
+    def makeFuncProto(self, vulkanApi, useParamName=True):
+
+        protoBegin = "%s %s" % (self.makeCTypeDecl(
+            vulkanApi.retType, useParamName=False), vulkanApi.name)
+
+        def getFuncArgDecl(param):
+            if param.staticArrExpr:
+                return self.makeCTypeDecl(param, useParamName=useParamName) + ("[%s]" % param.staticArrExpr)
+            else:
+                return self.makeCTypeDecl(param, useParamName=useParamName)
+
+        protoParams = "(\n    %s)" % ((",\n%s" % self.indent(1)).join(
+            list(map(
+                getFuncArgDecl,
+                vulkanApi.parameters))))
+
+        return protoBegin + protoParams
+
+    def makeFuncAlias(self, nameDst, nameSrc):
+        return "DEFINE_ALIAS_FUNCTION({}, {})\n\n".format(nameSrc, nameDst)
+
+    def makeFuncDecl(self, vulkanApi):
+        return self.makeFuncProto(vulkanApi) + ";\n\n"
+
+    def makeFuncImpl(self, vulkanApi, codegenFunc):
+        self.swapCode()
+
+        self.line(self.makeFuncProto(vulkanApi))
+        self.beginBlock()
+        codegenFunc(self)
+        self.endBlock()
+
+        return self.swapCode() + "\n"
+
+    def emitFuncImpl(self, vulkanApi, codegenFunc):
+        self.line(self.makeFuncProto(vulkanApi))
+        self.beginBlock()
+        codegenFunc(self)
+        self.endBlock()
+
+    def makeStructAccess(self,
+                         vulkanType,
+                         structVarName,
+                         asPtr=True,
+                         structAsPtr=True,
+                         accessIndex=None):
+
+        deref = "->" if structAsPtr else "."
+
+        indexExpr = (" + %s" % accessIndex) if accessIndex else ""
+
+        addrOfExpr = "" if vulkanType.accessibleAsPointer() or (
+            not asPtr) else "&"
+
+        return "%s%s%s%s%s" % (addrOfExpr, structVarName, deref,
+                               vulkanType.paramName, indexExpr)
+
+    def makeRawLengthAccess(self, vulkanType):
+        lenExpr = vulkanType.getLengthExpression()
+
+        if not lenExpr:
+            return None, None
+
+        if lenExpr == "null-terminated":
+            return "strlen(%s)" % vulkanType.paramName, None
+
+        return lenExpr, None
+
+    def makeLengthAccessFromStruct(self,
+                                   structInfo,
+                                   vulkanType,
+                                   structVarName,
+                                   asPtr=True):
+        # Handle special cases first
+        # Mostly when latexmath is involved
+        def handleSpecialCases(structInfo, vulkanType, structVarName, asPtr):
+            cases = [
+                {
+                    "structName": "VkShaderModuleCreateInfo",
+                    "field": "pCode",
+                    "lenExprMember": "codeSize",
+                    "postprocess": lambda expr: "(%s / 4)" % expr
+                },
+                {
+                    "structName": "VkPipelineMultisampleStateCreateInfo",
+                    "field": "pSampleMask",
+                    "lenExprMember": "rasterizationSamples",
+                    "postprocess": lambda expr: "(((%s) + 31) / 32)" % expr
+                },
+                {
+                    "structName": "VkAccelerationStructureVersionInfoKHR",
+                    "field": "pVersionData",
+                    "lenExprMember": "",
+                    "postprocess": lambda _: "2*VK_UUID_SIZE"
+                },
+            ]
+
+            for c in cases:
+                if (structInfo.name, vulkanType.paramName) == (c["structName"],
+                                                               c["field"]):
+                    deref = "->" if asPtr else "."
+                    expr = "%s%s%s" % (structVarName, deref,
+                                       c["lenExprMember"])
+                    lenAccessGuardExpr = "%s" % structVarName
+                    return c["postprocess"](expr), lenAccessGuardExpr
+
+            return None, None
+
+        specialCaseAccess = \
+            handleSpecialCases(
+                structInfo, vulkanType, structVarName, asPtr)
+
+        if specialCaseAccess != (None, None):
+            return specialCaseAccess
+
+        lenExpr = vulkanType.getLengthExpression()
+
+        if not lenExpr:
+            return None, None
+
+        deref = "->" if asPtr else "."
+        lenAccessGuardExpr = "%s" % (
+            
+            structVarName) if deref else None
+        if lenExpr == "null-terminated":
+            return "strlen(%s%s%s)" % (structVarName, deref,
+                                       vulkanType.paramName), lenAccessGuardExpr
+
+        if not structInfo.getMember(lenExpr):
+            return self.makeRawLengthAccess(vulkanType)
+
+        return "%s%s%s" % (structVarName, deref, lenExpr), lenAccessGuardExpr
+
+    def makeLengthAccessFromApi(self, api, vulkanType):
+        # Handle special cases first
+        # Mostly when :: is involved
+        def handleSpecialCases(vulkanType):
+            lenExpr = vulkanType.getLengthExpression()
+
+            if lenExpr is None:
+                return None, None
+
+            if "::" in lenExpr:
+                structVarName, memberVarName = lenExpr.split("::")
+                lenAccessGuardExpr = "%s" % (structVarName)
+                return "%s->%s" % (structVarName, memberVarName), lenAccessGuardExpr
+            return None, None
+
+        specialCaseAccess = handleSpecialCases(vulkanType)
+
+        if specialCaseAccess != (None, None):
+            return specialCaseAccess
+
+        lenExpr = vulkanType.getLengthExpression()
+
+        if not lenExpr:
+            return None, None
+
+        lenExprInfo = api.getParameter(lenExpr)
+
+        if not lenExprInfo:
+            return self.makeRawLengthAccess(vulkanType)
+
+        if lenExpr == "null-terminated":
+            return "strlen(%s)" % vulkanType.paramName(), None
+        else:
+            deref = "*" if lenExprInfo.pointerIndirectionLevels > 0 else ""
+            lenAccessGuardExpr = "%s" % lenExpr if deref else None
+            return "(%s(%s))" % (deref, lenExpr), lenAccessGuardExpr
+
+    def accessParameter(self, param, asPtr=True):
+        if asPtr:
+            if param.pointerIndirectionLevels > 0:
+                return param.paramName
+            else:
+                return "&%s" % param.paramName
+        else:
+            return param.paramName
+
+    def sizeofExpr(self, vulkanType):
+        return "sizeof(%s)" % (
+            self.makeCTypeDecl(vulkanType, useParamName=False))
+
+    def generalAccess(self,
+                      vulkanType,
+                      parentVarName=None,
+                      asPtr=True,
+                      structAsPtr=True):
+        if vulkanType.parent is None:
+            if parentVarName is None:
+                return self.accessParameter(vulkanType, asPtr=asPtr)
+            else:
+                return self.accessParameter(vulkanType.withModifiedName(parentVarName), asPtr=asPtr)
+
+        if isinstance(vulkanType.parent, VulkanCompoundType):
+            return self.makeStructAccess(
+                vulkanType, parentVarName, asPtr=asPtr, structAsPtr=structAsPtr)
+
+        if isinstance(vulkanType.parent, VulkanAPI):
+            if parentVarName is None:
+                return self.accessParameter(vulkanType, asPtr=asPtr)
+            else:
+                return self.accessParameter(vulkanType.withModifiedName(parentVarName), asPtr=asPtr)
+
+        os.abort("Could not find a way to access Vulkan type %s" %
+                 vulkanType.name)
+
+    def makeLengthAccess(self, vulkanType, parentVarName="parent"):
+        if vulkanType.parent is None:
+            return self.makeRawLengthAccess(vulkanType)
+
+        if isinstance(vulkanType.parent, VulkanCompoundType):
+            return self.makeLengthAccessFromStruct(
+                vulkanType.parent, vulkanType, parentVarName, asPtr=True)
+
+        if isinstance(vulkanType.parent, VulkanAPI):
+            return self.makeLengthAccessFromApi(vulkanType.parent, vulkanType)
+
+        os.abort("Could not find a way to access length of Vulkan type %s" %
+                 vulkanType.name)
+
+    def generalLengthAccess(self, vulkanType, parentVarName="parent"):
+        return self.makeLengthAccess(vulkanType, parentVarName)[0]
+
+    def generalLengthAccessGuard(self, vulkanType, parentVarName="parent"):
+        return self.makeLengthAccess(vulkanType, parentVarName)[1]
+
+    def vkApiCall(self, api, customPrefix="", customParameters=None, retVarDecl=True):
+        callLhs = None
+
+        retTypeName = api.getRetTypeExpr()
+        retVar = None
+
+        if retTypeName != "void":
+            retVar = api.getRetVarExpr()
+            if retVarDecl:
+                self.stmt("%s %s = (%s)0" % (retTypeName, retVar, retTypeName))
+            callLhs = retVar
+
+        if customParameters is None:
+            self.funcCall(
+            callLhs, customPrefix + api.name, [p.paramName for p in api.parameters])
+        else:
+            self.funcCall(
+                callLhs, customPrefix + api.name, customParameters)
+
+        return (retTypeName, retVar)
+
+    def makeCheckVkSuccess(self, expr):
+        return "((%s) == VK_SUCCESS)" % expr
+
+    def makeReinterpretCast(self, varName, typeName, const=True):
+        return "reinterpret_cast<%s%s*>(%s)" % \
+               ("const " if const else "", typeName, varName)
+
+    def validPrimitive(self, typeInfo, typeName):
+        size = typeInfo.getPrimitiveEncodingSize(typeName)
+        return size != None
+
+    def makePrimitiveStreamMethod(self, typeInfo, typeName, direction="write"):
+        if not self.validPrimitive(typeInfo, typeName):
+            return None
+
+        size = typeInfo.getPrimitiveEncodingSize(typeName)
+        prefix = "put" if direction == "write" else "get"
+        suffix = None
+        if size == 1:
+            suffix = "Byte"
+        elif size == 2:
+            suffix = "Be16"
+        elif size == 4:
+            suffix = "Be32"
+        elif size == 8:
+            suffix = "Be64"
+
+        if suffix:
+            return prefix + suffix
+
+        return None
+
+    def makePrimitiveStreamMethodInPlace(self, typeInfo, typeName, direction="write"):
+        if not self.validPrimitive(typeInfo, typeName):
+            return None
+
+        size = typeInfo.getPrimitiveEncodingSize(typeName)
+        prefix = "to" if direction == "write" else "from"
+        suffix = None
+        if size == 1:
+            suffix = "Byte"
+        elif size == 2:
+            suffix = "Be16"
+        elif size == 4:
+            suffix = "Be32"
+        elif size == 8:
+            suffix = "Be64"
+
+        if suffix:
+            return prefix + suffix
+
+        return None
+
+    def streamPrimitive(self, typeInfo, streamVar, accessExpr, accessType, direction="write"):
+        accessTypeName = accessType.typeName
+
+        if accessType.pointerIndirectionLevels == 0 and not self.validPrimitive(typeInfo, accessTypeName):
+            print("Tried to stream a non-primitive type: %s" % accessTypeName)
+            os.abort()
+
+        needPtrCast = False
+
+        if accessType.pointerIndirectionLevels > 0:
+            streamSize = 8
+            streamStorageVarType = "uint64_t"
+            needPtrCast = True
+            streamMethod = "putBe64" if direction == "write" else "getBe64"
+        else:
+            streamSize = typeInfo.getPrimitiveEncodingSize(accessTypeName)
+            if streamSize == 1:
+                streamStorageVarType = "uint8_t"
+            elif streamSize == 2:
+                streamStorageVarType = "uint16_t"
+            elif streamSize == 4:
+                streamStorageVarType = "uint32_t"
+            elif streamSize == 8:
+                streamStorageVarType = "uint64_t"
+            streamMethod = self.makePrimitiveStreamMethod(
+                typeInfo, accessTypeName, direction=direction)
+
+        streamStorageVar = self.var()
+
+        accessCast = self.makeRichCTypeDecl(accessType, useParamName=False)
+
+        ptrCast = "(uintptr_t)" if needPtrCast else ""
+
+        if direction == "read":
+            self.stmt("%s = (%s)%s%s->%s()" %
+                      (accessExpr,
+                       accessCast,
+                       ptrCast,
+                       streamVar,
+                       streamMethod))
+        else:
+            self.stmt("%s %s = (%s)%s%s" %
+                      (streamStorageVarType, streamStorageVar,
+                       streamStorageVarType, ptrCast, accessExpr))
+            self.stmt("%s->%s(%s)" %
+                      (streamVar, streamMethod, streamStorageVar))
+
+    def memcpyPrimitive(self, typeInfo, streamVar, accessExpr, accessType, direction="write"):
+        accessTypeName = accessType.typeName
+
+        if accessType.pointerIndirectionLevels == 0 and not self.validPrimitive(typeInfo, accessTypeName):
+            print("Tried to stream a non-primitive type: %s" % accessTypeName)
+            os.abort()
+
+        needPtrCast = False
+
+        streamSize = 8
+
+        if accessType.pointerIndirectionLevels > 0:
+            streamSize = 8
+            streamStorageVarType = "uint64_t"
+            needPtrCast = True
+            streamMethod = "toBe64" if direction == "write" else "fromBe64"
+        else:
+            streamSize = typeInfo.getPrimitiveEncodingSize(accessTypeName)
+            if streamSize == 1:
+                streamStorageVarType = "uint8_t"
+            elif streamSize == 2:
+                streamStorageVarType = "uint16_t"
+            elif streamSize == 4:
+                streamStorageVarType = "uint32_t"
+            elif streamSize == 8:
+                streamStorageVarType = "uint64_t"
+            streamMethod = self.makePrimitiveStreamMethodInPlace(
+                typeInfo, accessTypeName, direction=direction)
+
+        streamStorageVar = self.var()
+
+        accessCast = self.makeRichCTypeDecl(accessType, useParamName=False)
+
+        if direction == "read":
+            accessCast = self.makeRichCTypeDecl(
+                accessType.getForNonConstAccess(), useParamName=False)
+
+        ptrCast = "(uintptr_t)" if needPtrCast else ""
+
+        if direction == "read":
+            self.stmt("memcpy((%s*)&%s, %s, %s)" %
+                      (accessCast,
+                       accessExpr,
+                       streamVar,
+                       str(streamSize)))
+            self.stmt("android::base::Stream::%s((uint8_t*)&%s)" % (
+                streamMethod,
+                accessExpr))
+        else:
+            self.stmt("%s %s = (%s)%s%s" %
+                      (streamStorageVarType, streamStorageVar,
+                       streamStorageVarType, ptrCast, accessExpr))
+            self.stmt("memcpy(%s, &%s, %s)" %
+                      (streamVar, streamStorageVar, str(streamSize)))
+            self.stmt("android::base::Stream::%s((uint8_t*)%s)" % (
+                streamMethod,
+                streamVar))
+
+    def countPrimitive(self, typeInfo, accessType):
+        accessTypeName = accessType.typeName
+
+        if accessType.pointerIndirectionLevels == 0 and not self.validPrimitive(typeInfo, accessTypeName):
+            print("Tried to count a non-primitive type: %s" % accessTypeName)
+            os.abort()
+
+        needPtrCast = False
+
+        if accessType.pointerIndirectionLevels > 0:
+            streamSize = 8
+        else:
+            streamSize = typeInfo.getPrimitiveEncodingSize(accessTypeName)
+
+        return streamSize
+
+# Class to wrap a Vulkan API call.
+#
+# The user gives a generic callback, |codegenDef|,
+# that takes a CodeGen object and a VulkanAPI object as arguments.
+# codegenDef uses CodeGen along with the VulkanAPI object
+# to generate the function body.
+class VulkanAPIWrapper(object):
+
+    def __init__(self,
+                 customApiPrefix,
+                 extraParameters=None,
+                 returnTypeOverride=None,
+                 codegenDef=None):
+        self.customApiPrefix = customApiPrefix
+        self.extraParameters = extraParameters
+        self.returnTypeOverride = returnTypeOverride
+
+        self.codegen = CodeGen()
+
+        self.definitionFunc = codegenDef
+
+        # Private function
+
+        def makeApiFunc(self, typeInfo, apiName):
+            customApi = copy(typeInfo.apis[apiName])
+            customApi.name = self.customApiPrefix + customApi.name
+            if self.extraParameters is not None:
+                if isinstance(self.extraParameters, list):
+                    customApi.parameters = \
+                        self.extraParameters + customApi.parameters
+                else:
+                    os.abort(
+                        "Type of extra parameters to custom API not valid. Expected list, got %s" % type(
+                            self.extraParameters))
+
+            if self.returnTypeOverride is not None:
+                customApi.retType = self.returnTypeOverride
+            return customApi
+
+        self.makeApi = makeApiFunc
+
+    def setCodegenDef(self, codegenDefFunc):
+        self.definitionFunc = codegenDefFunc
+
+    def makeDecl(self, typeInfo, apiName):
+        return self.codegen.makeFuncProto(
+            self.makeApi(self, typeInfo, apiName)) + ";\n\n"
+
+    def makeDefinition(self, typeInfo, apiName, isStatic=False):
+        vulkanApi = self.makeApi(self, typeInfo, apiName)
+
+        self.codegen.swapCode()
+        self.codegen.beginBlock()
+
+        if self.definitionFunc is None:
+            print("ERROR: No definition found for (%s, %s)" %
+                  (vulkanApi.name, self.customApiPrefix))
+            sys.exit(1)
+
+        self.definitionFunc(self.codegen, vulkanApi)
+
+        self.codegen.endBlock()
+
+        return ("static " if isStatic else "") + self.codegen.makeFuncProto(
+            vulkanApi) + "\n" + self.codegen.swapCode() + "\n"
+
+# Base class for wrapping all Vulkan API objects.  These work with Vulkan
+# Registry generators and have gen* triggers.  They tend to contain
+# VulkanAPIWrapper objects to make it easier to generate the code.
+class VulkanWrapperGenerator(object):
+
+    def __init__(self, module, typeInfo):
+        self.module = module
+        self.typeInfo = typeInfo
+        self.extensionStructTypes = OrderedDict()
+
+    def onBegin(self):
+        pass
+
+    def onEnd(self):
+        pass
+
+    def onBeginFeature(self, featureName):
+        pass
+
+    def onEndFeature(self):
+        pass
+
+    def onGenType(self, typeInfo, name, alias):
+        category = self.typeInfo.categoryOf(name)
+        if category in ["struct", "union"] and not alias:
+            structInfo = self.typeInfo.structs[name]
+            if structInfo.structExtendsExpr:
+                self.extensionStructTypes[name] = structInfo
+        pass
+
+    def onGenStruct(self, typeInfo, name, alias):
+        pass
+
+    def onGenGroup(self, groupinfo, groupName, alias=None):
+        pass
+
+    def onGenEnum(self, enuminfo, name, alias):
+        pass
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        pass
+
+    # Below Vulkan structure types may correspond to multiple Vulkan structs
+    # due to a conflict between different Vulkan registries. In order to get
+    # the correct Vulkan struct type, we need to check the type of its "root"
+    # struct as well.
+    ROOT_TYPE_MAPPING = {
+        "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT": {
+            "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2": "VkPhysicalDeviceFragmentDensityMapFeaturesEXT",
+            "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO": "VkPhysicalDeviceFragmentDensityMapFeaturesEXT",
+            "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO": "VkImportColorBufferGOOGLE",
+            "default": "VkPhysicalDeviceFragmentDensityMapFeaturesEXT",
+        },
+        "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT": {
+            "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2": "VkPhysicalDeviceFragmentDensityMapPropertiesEXT",
+            "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO": "VkImportPhysicalAddressGOOGLE",
+            "default": "VkPhysicalDeviceFragmentDensityMapPropertiesEXT",
+        },
+        "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT": {
+            "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO": "VkRenderPassFragmentDensityMapCreateInfoEXT",
+            "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2": "VkRenderPassFragmentDensityMapCreateInfoEXT",
+            "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO": "VkImportBufferGOOGLE",
+            "default": "VkRenderPassFragmentDensityMapCreateInfoEXT",
+        },
+    }
+
+    def emitForEachStructExtension(self, cgen, retType, triggerVar, forEachFunc, autoBreak=True, defaultEmit=None, nullEmit=None, rootTypeVar=None):
+        def readStructType(structTypeName, structVarName, cgen):
+            cgen.stmt("uint32_t %s = (uint32_t)%s(%s)" % \
+                (structTypeName, "goldfish_vk_struct_type", structVarName))
+
+        def castAsStruct(varName, typeName, const=True):
+            return "reinterpret_cast<%s%s*>(%s)" % \
+                   ("const " if const else "", typeName, varName)
+
+        def doDefaultReturn(cgen):
+            if retType.typeName == "void":
+                cgen.stmt("return")
+            else:
+                cgen.stmt("return (%s)0" % retType.typeName)
+
+        cgen.beginIf("!%s" % triggerVar.paramName)
+        if nullEmit is None:
+            doDefaultReturn(cgen)
+        else:
+            nullEmit(cgen)
+        cgen.endIf()
+
+        readStructType("structType", triggerVar.paramName, cgen)
+
+        cgen.line("switch(structType)")
+        cgen.beginBlock()
+
+        currFeature = None
+
+        for ext in self.extensionStructTypes.values():
+            if not currFeature:
+                cgen.leftline("#ifdef %s" % ext.feature)
+                currFeature = ext.feature
+
+            if currFeature and ext.feature != currFeature:
+                cgen.leftline("#endif")
+                cgen.leftline("#ifdef %s" % ext.feature)
+                currFeature = ext.feature
+
+            enum = ext.structEnumExpr
+            cgen.line("case %s:" % enum)
+            cgen.beginBlock()
+
+            if rootTypeVar is not None and enum in VulkanWrapperGenerator.ROOT_TYPE_MAPPING:
+                cgen.line("switch(%s)" % rootTypeVar.paramName)
+                cgen.beginBlock()
+                kv = VulkanWrapperGenerator.ROOT_TYPE_MAPPING[enum]
+                for k in kv:
+                    v = self.extensionStructTypes[kv[k]]
+                    if k == "default":
+                        cgen.line("%s:" % k)
+                    else:
+                        cgen.line("case %s:" % k)
+                    cgen.beginBlock()
+                    castedAccess = castAsStruct(
+                        triggerVar.paramName, v.name, const=triggerVar.isConst)
+                    forEachFunc(v, castedAccess, cgen)
+                    cgen.line("break;")
+                    cgen.endBlock()
+                cgen.endBlock()
+            else:
+                castedAccess = castAsStruct(
+                    triggerVar.paramName, ext.name, const=triggerVar.isConst)
+                forEachFunc(ext, castedAccess, cgen)
+
+            if autoBreak:
+                cgen.stmt("break")
+            cgen.endBlock()
+
+        if currFeature:
+            cgen.leftline("#endif")
+
+        cgen.line("default:")
+        cgen.beginBlock()
+        if defaultEmit is None:
+            doDefaultReturn(cgen)
+        else:
+            defaultEmit(cgen)
+        cgen.endBlock()
+
+        cgen.endBlock()
+
+    def emitForEachStructExtensionGeneral(self, cgen, forEachFunc, doFeatureIfdefs=False):
+        currFeature = None
+
+        for (i, ext) in enumerate(self.extensionStructTypes.values()):
+            if doFeatureIfdefs:
+                if not currFeature:
+                    cgen.leftline("#ifdef %s" % ext.feature)
+                    currFeature = ext.feature
+
+                if currFeature and ext.feature != currFeature:
+                    cgen.leftline("#endif")
+                    cgen.leftline("#ifdef %s" % ext.feature)
+                    currFeature = ext.feature
+
+            forEachFunc(i, ext, cgen)
+
+        if doFeatureIfdefs:
+            if currFeature:
+                cgen.leftline("#endif")
diff --git a/registry/vulkan/scripts/cereal/common/vulkantypes.py b/registry/vulkan/scripts/cereal/common/vulkantypes.py
new file mode 100644
index 0000000..6e2c51a
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/common/vulkantypes.py
@@ -0,0 +1,1157 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from generator import noneStr
+
+from copy import copy
+from string import whitespace
+
+# Holds information about core Vulkan objects
+# and the API calls that are used to create/destroy each one.
+class HandleInfo(object):
+    def __init__(self, name, createApis, destroyApis):
+        self.name = name
+        self.createApis = createApis
+        self.destroyApis = destroyApis
+
+    def isCreateApi(self, apiName):
+        return apiName == self.createApis or (apiName in self.createApis)
+
+    def isDestroyApi(self, apiName):
+        if self.destroyApis is None:
+            return False
+        return apiName == self.destroyApis or (apiName in self.destroyApis)
+
+DISPATCHABLE_HANDLE_TYPES = [
+    "VkInstance",
+    "VkPhysicalDevice",
+    "VkDevice",
+    "VkQueue",
+    "VkCommandBuffer",
+]
+
+NON_DISPATCHABLE_HANDLE_TYPES = [
+    "VkDeviceMemory",
+    "VkBuffer",
+    "VkBufferView",
+    "VkImage",
+    "VkImageView",
+    "VkShaderModule",
+    "VkDescriptorPool",
+    "VkDescriptorSetLayout",
+    "VkDescriptorSet",
+    "VkSampler",
+    "VkPipeline",
+    "VkPipelineLayout",
+    "VkRenderPass",
+    "VkFramebuffer",
+    "VkPipelineCache",
+    "VkCommandPool",
+    "VkFence",
+    "VkSemaphore",
+    "VkEvent",
+    "VkQueryPool",
+    "VkSamplerYcbcrConversion",
+    "VkSamplerYcbcrConversionKHR",
+    "VkDescriptorUpdateTemplate",
+    "VkSurfaceKHR",
+    "VkSwapchainKHR",
+    "VkDisplayKHR",
+    "VkDisplayModeKHR",
+    "VkObjectTableNVX",
+    "VkIndirectCommandsLayoutNVX",
+    "VkValidationCacheEXT",
+    "VkDebugReportCallbackEXT",
+    "VkDebugUtilsMessengerEXT",
+    "VkAccelerationStructureNV",
+    "VkIndirectCommandsLayoutNV",
+    "VkAccelerationStructureKHR",
+]
+
+CUSTOM_HANDLE_CREATE_TYPES = [
+    "VkPhysicalDevice",
+    "VkQueue",
+    "VkPipeline",
+    "VkDeviceMemory",
+    "VkDescriptorSet",
+    "VkCommandBuffer",
+]
+
+HANDLE_TYPES = list(sorted(list(set(DISPATCHABLE_HANDLE_TYPES +
+                                    NON_DISPATCHABLE_HANDLE_TYPES + CUSTOM_HANDLE_CREATE_TYPES))))
+
+HANDLE_INFO = {}
+
+for h in HANDLE_TYPES:
+    if h in CUSTOM_HANDLE_CREATE_TYPES:
+        if h == "VkPhysicalDevice":
+            HANDLE_INFO[h] = \
+                HandleInfo(
+                    "VkPhysicalDevice",
+                    "vkEnumeratePhysicalDevices", None)
+        if h == "VkQueue":
+            HANDLE_INFO[h] = \
+                HandleInfo(
+                    "VkQueue",
+                    "vkGetDeviceQueue", None)
+        if h == "VkPipeline":
+            HANDLE_INFO[h] = \
+                HandleInfo(
+                    "VkPipeline",
+                    ["vkCreateGraphicsPipelines", "vkCreateComputePipelines"],
+                    "vkDestroyPipeline")
+        if h == "VkDeviceMemory":
+            HANDLE_INFO[h] = \
+                HandleInfo("VkDeviceMemory",
+                           "vkAllocateMemory", ["vkFreeMemory", "vkFreeMemorySyncGOOGLE"])
+        if h == "VkDescriptorSet":
+            HANDLE_INFO[h] = \
+                HandleInfo("VkDescriptorSet", "vkAllocateDescriptorSets",
+                           "vkFreeDescriptorSets")
+        if h == "VkCommandBuffer":
+            HANDLE_INFO[h] = \
+                HandleInfo("VkCommandBuffer", "vkAllocateCommandBuffers",
+                           "vkFreeCommandBuffers")
+    else:
+        HANDLE_INFO[h] = \
+            HandleInfo(h, "vkCreate" + h[2:], "vkDestroy" + h[2:])
+
+EXCLUDED_APIS = [
+    "vkEnumeratePhysicalDeviceGroups",
+]
+
+EXPLICITLY_ABI_PORTABLE_TYPES = [
+    "VkResult",
+    "VkBool32",
+    "VkSampleMask",
+    "VkFlags",
+    "VkDeviceSize",
+]
+
+EXPLICITLY_ABI_NON_PORTABLE_TYPES = [
+    "size_t"
+]
+
+NON_ABI_PORTABLE_TYPE_CATEGORIES = [
+    "handle",
+    "funcpointer",
+]
+
+DEVICE_MEMORY_INFO_KEYS = [
+    "devicememoryhandle",
+    "devicememoryoffset",
+    "devicememorysize",
+    "devicememorytypeindex",
+    "devicememorytypebits",
+]
+
+TRIVIAL_TRANSFORMED_TYPES = [
+    "VkPhysicalDeviceExternalImageFormatInfo",
+    "VkPhysicalDeviceExternalBufferInfo",
+    "VkExternalMemoryImageCreateInfo",
+    "VkExternalMemoryBufferCreateInfo",
+    "VkExportMemoryAllocateInfo",
+    "VkExternalImageFormatProperties",
+    "VkExternalBufferProperties",
+]
+
+NON_TRIVIAL_TRANSFORMED_TYPES = [
+    "VkExternalMemoryProperties",
+]
+
+TRANSFORMED_TYPES = TRIVIAL_TRANSFORMED_TYPES + NON_TRIVIAL_TRANSFORMED_TYPES
+
+# Holds information about a Vulkan type instance (i.e., not a type definition).
+# Type instances are used as struct field definitions or function parameters,
+# to be later fed to code generation.
+# VulkanType instances can be constructed in two ways:
+# 1. From an XML tag with <type> / <param> tags in vk.xml,
+#    using makeVulkanTypeFromXMLTag
+# 2. User-defined instances with makeVulkanTypeSimple.
+class VulkanType(object):
+
+    def __init__(self):
+        self.parent = None
+        self.typeName = ""
+
+        self.isTransformed = False
+
+        self.paramName = None
+
+        self.lenExpr = None
+        self.isOptional = False
+        self.optionalStr = None
+
+        self.isConst = False
+
+        # "" means it's not a static array, otherwise this is the total size of
+        # all elements. e.g. staticArrExpr of "x[3][2][8]" will be "((3)*(2)*(8))".
+        self.staticArrExpr = ""
+        # "" means it's not a static array, otherwise it's the raw expression
+        # of static array size, which can be one-dimensional or multi-dimensional.
+        self.rawStaticArrExpr = ""
+
+        self.pointerIndirectionLevels = 0  # 0 means not pointer
+        self.isPointerToConstPointer = False
+
+        self.primitiveEncodingSize = None
+
+        self.deviceMemoryInfoParameterIndices = None
+
+        # Annotations
+        # Environment annotation for binding current
+        # variables to sub-structures
+        self.binds = {}
+
+        # Device memory annotations
+
+        # self.deviceMemoryAttrib/Val stores
+        # device memory info attributes from the XML.
+        # devicememoryhandle
+        # devicememoryoffset
+        # devicememorysize
+        # devicememorytypeindex
+        # devicememorytypebits
+        self.deviceMemoryAttrib = None
+        self.deviceMemoryVal = None
+
+        # Filter annotations
+        self.filterVar = None
+        self.filterVals = None
+        self.filterFunc = None
+        self.filterOtherwise = None
+
+        # Stream feature
+        self.streamFeature = None
+
+        # All other annotations
+        self.attribs = {}
+
+    def __str__(self,):
+        return ("(vulkantype %s %s paramName %s len %s optional? %s "
+                "staticArrExpr %s %s)") % (
+            self.typeName + ("*" * self.pointerIndirectionLevels) +
+            ("ptr2constptr" if self.isPointerToConstPointer else ""), "const"
+            if self.isConst else "nonconst", self.paramName, self.lenExpr,
+            self.isOptional, self.staticArrExpr, self.staticArrCount)
+
+    def isString(self,):
+        return self.pointerIndirectionLevels == 1 and (self.typeName == "char")
+
+    def isArrayOfStrings(self,):
+        return self.isPointerToConstPointer and (self.typeName == "char")
+
+    def primEncodingSize(self,):
+        return self.primitiveEncodingSize
+
+    # Utility functions to make codegen life easier.
+    # This method derives the correct "count" expression if possible.
+    # Otherwise, returns None or "null-terminated" if a string.
+    def getLengthExpression(self,):
+        if self.staticArrExpr != "":
+            return self.staticArrExpr
+        if self.lenExpr:
+            return self.lenExpr
+        return None
+
+    # Can we just pass this to functions expecting T*
+    def accessibleAsPointer(self,):
+        if self.staticArrExpr != "":
+            return True
+        if self.pointerIndirectionLevels > 0:
+            return True
+        return False
+
+    # Rough attempt to infer where a type could be an output.
+    # Good for inferring which things need to be marshaled in
+    # versus marshaled out for Vulkan API calls
+    def possiblyOutput(self,):
+        return self.pointerIndirectionLevels > 0 and (not self.isConst)
+
+    def isVoidWithNoSize(self,):
+        return self.typeName == "void" and self.pointerIndirectionLevels == 0
+
+    def getCopy(self,):
+        return copy(self)
+
+    def getTransformed(self, isConstChoice=None, ptrIndirectionChoice=None):
+        res = self.getCopy()
+
+        if isConstChoice is not None:
+            res.isConst = isConstChoice
+        if ptrIndirectionChoice is not None:
+            res.pointerIndirectionLevels = ptrIndirectionChoice
+
+        return res
+
+    def getWithCustomName(self):
+        return self.getTransformed(
+            ptrIndirectionChoice=self.pointerIndirectionLevels + 1)
+
+    def getForAddressAccess(self):
+        return self.getTransformed(
+            ptrIndirectionChoice=self.pointerIndirectionLevels + 1)
+
+    def getForValueAccess(self):
+        if self.typeName == "void" and self.pointerIndirectionLevels == 1:
+            asUint8Type = self.getCopy()
+            asUint8Type.typeName = "uint8_t"
+            return asUint8Type.getForValueAccess()
+        return self.getTransformed(
+            ptrIndirectionChoice=self.pointerIndirectionLevels - 1)
+
+    def getForNonConstAccess(self):
+        return self.getTransformed(isConstChoice=False)
+
+    def withModifiedName(self, newName):
+        res = self.getCopy()
+        res.paramName = newName
+        return res
+
+    def isNextPointer(self):
+        if self.paramName == "pNext":
+            return True
+        return False
+
+    # Only deals with 'core' handle types here.
+    def isDispatchableHandleType(self):
+        return self.typeName in DISPATCHABLE_HANDLE_TYPES
+
+    def isNonDispatchableHandleType(self):
+        return self.typeName in NON_DISPATCHABLE_HANDLE_TYPES
+
+    def isHandleType(self):
+        return self.isDispatchableHandleType() or \
+               self.isNonDispatchableHandleType()
+
+    def isCreatedBy(self, api):
+        if self.typeName in HANDLE_INFO.keys():
+            nonKhrRes = HANDLE_INFO[self.typeName].isCreateApi(api.name)
+            if nonKhrRes:
+                return True
+            if len(api.name) > 3 and "KHR" == api.name[-3:]:
+                return HANDLE_INFO[self.typeName].isCreateApi(api.name[:-3])
+
+        if self.typeName == "VkImage" and api.name == "vkCreateImageWithRequirementsGOOGLE":
+            return True
+
+        if self.typeName == "VkBuffer" and api.name == "vkCreateBufferWithRequirementsGOOGLE":
+            return True
+
+        return False
+
+    def isDestroyedBy(self, api):
+        if self.typeName in HANDLE_INFO.keys():
+            nonKhrRes = HANDLE_INFO[self.typeName].isDestroyApi(api.name)
+            if nonKhrRes:
+                return True
+            if len(api.name) > 3 and "KHR" == api.name[-3:]:
+                return HANDLE_INFO[self.typeName].isDestroyApi(api.name[:-3])
+
+        return False
+
+    def isSimpleValueType(self, typeInfo):
+        if typeInfo.isCompoundType(self.typeName):
+            return False
+        if self.isString() or self.isArrayOfStrings():
+            return False
+        if self.staticArrExpr or self.pointerIndirectionLevels > 0:
+            return False
+        return True
+
+    def getStructEnumExpr(self,):
+        return None
+
+# Is an S-expression w/ the following spec:
+# From https://gist.github.com/pib/240957
+class Atom(object):
+    def __init__(self, name):
+        self.name = name
+    def __repr__(self,):
+        return self.name
+
+def parse_sexp(sexp):
+    atom_end = set('()"\'') | set(whitespace)
+    stack, i, length = [[]], 0, len(sexp)
+    while i < length:
+        c = sexp[i]
+
+        reading = type(stack[-1])
+        if reading == list:
+            if   c == '(': stack.append([])
+            elif c == ')':
+                stack[-2].append(stack.pop())
+                if stack[-1][0] == ('quote',): stack[-2].append(stack.pop())
+            elif c == '"': stack.append('')
+            elif c == "'": stack.append([('quote',)])
+            elif c in whitespace: pass
+            else: stack.append(Atom(c))
+        elif reading == str:
+            if   c == '"':
+                stack[-2].append(stack.pop())
+                if stack[-1][0] == ('quote',): stack[-2].append(stack.pop())
+            elif c == '\\':
+                i += 1
+                stack[-1] += sexp[i]
+            else: stack[-1] += c
+        elif reading == Atom:
+            if c in atom_end:
+                atom = stack.pop()
+                if atom.name[0].isdigit(): stack[-1].append(eval(atom.name))
+                else: stack[-1].append(atom)
+                if stack[-1][0] == ('quote',): stack[-2].append(stack.pop())
+                continue
+            else: stack[-1] = Atom(stack[-1].name + c)
+        i += 1
+
+    return stack.pop()
+
+class FuncExprVal(object):
+    def __init__(self, val):
+        self.val = val
+    def __repr__(self,):
+        return self.val.__repr__()
+
+class FuncExpr(object):
+    def __init__(self, name, args):
+        self.name = name
+        self.args = args
+    def __repr__(self,):
+        if len(self.args) == 0:
+            return "(%s)" % (self.name.__repr__())
+        else:
+            return "(%s %s)" % (self.name.__repr__(), " ".join(map(lambda x: x.__repr__(), self.args)))
+
+class FuncLambda(object):
+    def __init__(self, vs, body):
+        self.vs = vs
+        self.body = body
+    def __repr__(self,):
+        return "(L (%s) %s)" % (" ".join(map(lambda x: x.__repr__(), self.vs)), self.body.__repr__())
+
+class FuncLambdaParam(object):
+    def __init__(self, name, typ):
+        self.name = name
+        self.typ = typ
+    def __repr__(self,):
+        return "%s : %s" % (self.name, self.typ)
+
+def parse_func_expr(parsed_sexp):
+    if len(parsed_sexp) != 1:
+        print("Error: parsed # expressions != 1: %d" % (len(parsed_sexp)))
+        raise
+
+    e = parsed_sexp[0]
+
+    def parse_lambda_param(e):
+        return FuncLambdaParam(e[0].name, e[1].name)
+
+    def parse_one(exp):
+        if list == type(exp):
+            if "lambda" == exp[0].__repr__():
+                return FuncLambda(list(map(parse_lambda_param, exp[1])), parse_one(exp[2]))
+            else:
+                return FuncExpr(exp[0], list(map(parse_one, exp[1:])))
+        else:
+            return FuncExprVal(exp)
+
+    return parse_one(e)
+
+def parseFilterFuncExpr(expr):
+    res = parse_func_expr(parse_sexp(expr))
+    print("parseFilterFuncExpr: parsed %s" % res)
+    return res
+
+def parseLetBodyExpr(expr):
+    res = parse_func_expr(parse_sexp(expr))
+    print("parseLetBodyExpr: parsed %s" % res)
+    return res
+
+def makeVulkanTypeFromXMLTag(typeInfo, tag):
+    res = VulkanType()
+
+    # Process the length expression
+
+    if tag.attrib.get("len") is not None:
+        lengths = tag.attrib.get("len").split(",")
+        res.lenExpr = lengths[0]
+
+    # Calculate static array expression
+
+    nametag = tag.find("name")
+    enumtag = tag.find("enum")
+
+    if enumtag is not None:
+        res.staticArrExpr = enumtag.text
+    elif nametag is not None:
+        res.rawStaticArrExpr = noneStr(nametag.tail)
+
+        dimensions = res.rawStaticArrExpr.count('[')
+        if dimensions == 1:
+            res.staticArrExpr = res.rawStaticArrExpr[1:-1]
+        elif dimensions > 1:
+            arraySizes = res.rawStaticArrExpr[1:-1].split('][')
+            res.staticArrExpr = '(' + \
+                '*'.join(f'({size})' for size in arraySizes) + ')'
+
+    # Determine const
+
+    beforeTypePart = noneStr(tag.text)
+
+    if "const" in beforeTypePart:
+        res.isConst = True
+
+    # Calculate type and pointer info
+
+    for elem in tag:
+        if elem.tag == "name":
+            res.paramName = elem.text
+        if elem.tag == "type":
+            duringTypePart = noneStr(elem.text)
+            afterTypePart = noneStr(elem.tail)
+            # Now we know enough to fill some stuff in
+            res.typeName = duringTypePart
+
+            if res.typeName in TRANSFORMED_TYPES:
+                res.isTransformed = True
+
+            # This only handles pointerIndirectionLevels == 2
+            # along with optional constant pointer for the inner part.
+            for c in afterTypePart:
+                if c == "*":
+                    res.pointerIndirectionLevels += 1
+            if "const" in afterTypePart and res.pointerIndirectionLevels == 2:
+                res.isPointerToConstPointer = True
+
+            # If void*, treat like it's not a pointer
+            # if duringTypePart == "void":
+            # res.pointerIndirectionLevels -= 1
+
+    # Calculate optionality (based on validitygenerator.py)
+    if tag.attrib.get("optional") is not None:
+        res.isOptional = True
+        res.optionalStr = tag.attrib.get("optional")
+
+    # If no validity is being generated, it usually means that
+    # validity is complex and not absolute, so let's say yes.
+    if tag.attrib.get("noautovalidity") is not None:
+        res.isOptional = True
+
+    # If this is a structure extension, it is optional.
+    if tag.attrib.get("structextends") is not None:
+        res.isOptional = True
+
+    # If this is a pNext pointer, it is optional.
+    if res.paramName == "pNext":
+        res.isOptional = True
+
+    res.primitiveEncodingSize = \
+        typeInfo.getPrimitiveEncodingSize(res.typeName)
+
+    # Annotations: Environment binds
+    if tag.attrib.get("binds") is not None:
+        bindPairs = map(lambda x: x.strip(), tag.attrib.get("binds").split(","))
+        bindPairsSplit = map(lambda p: p.split(":"), bindPairs)
+        res.binds = dict(map(lambda sp: (sp[0].strip(), sp[1].strip()), bindPairsSplit))
+
+    # Annotations: Device memory
+    for k in DEVICE_MEMORY_INFO_KEYS:
+        if tag.attrib.get(k) is not None:
+            res.deviceMemoryAttrib = k
+            res.deviceMemoryVal = \
+                tag.attrib.get(k)
+            break;
+
+    # Annotations: Filters
+    if tag.attrib.get("filterVar") is not None:
+        res.filterVar = tag.attrib.get("filterVar").strip()
+
+    if tag.attrib.get("filterVals") is not None:
+        res.filterVals = \
+            list(map(lambda v: v.strip(),
+                    tag.attrib.get("filterVals").strip().split(",")))
+        print("Filtervals: %s" % res.filterVals)
+
+    if tag.attrib.get("filterFunc") is not None:
+        res.filterFunc = parseFilterFuncExpr(tag.attrib.get("filterFunc"))
+
+    if tag.attrib.get("filterOtherwise") is not None:
+        res.Otherwise = tag.attrib.get("filterOtherwise")
+
+    # store all other attribs here
+    res.attribs = dict(tag.attrib)
+
+    return res
+
+
+def makeVulkanTypeSimple(isConst,
+                         typeName,
+                         ptrIndirectionLevels,
+                         paramName=None):
+    res = VulkanType()
+
+    res.typeName = typeName
+    res.isConst = isConst
+    res.pointerIndirectionLevels = ptrIndirectionLevels
+    res.isPointerToConstPointer = False
+    res.paramName = paramName
+    res.primitiveEncodingSize = None
+
+    return res
+
+# A class for holding the parameter indices corresponding to various
+# attributes about a VkDeviceMemory, such as the handle, size, offset, etc.
+class DeviceMemoryInfoParameterIndices(object):
+    def __init__(self, handle, offset, size, typeIndex, typeBits):
+        self.handle = handle
+        self.offset = offset
+        self.size = size
+        self.typeIndex = typeIndex
+        self.typeBits = typeBits
+
+# initializes DeviceMemoryInfoParameterIndices for each
+# abstract VkDeviceMemory encountered over |parameters|
+def initDeviceMemoryInfoParameterIndices(parameters):
+
+    use = False
+    deviceMemoryInfoById = {}
+
+    for (i, p) in enumerate(parameters):
+        a = p.deviceMemoryAttrib
+        if not a:
+            continue
+
+        if a in DEVICE_MEMORY_INFO_KEYS:
+            use = True
+            deviceMemoryInfoById[
+                p.deviceMemoryVal] = \
+                    DeviceMemoryInfoParameterIndices(
+                        None, None, None, None, None)
+
+    for (i, p) in enumerate(parameters):
+        a = p.deviceMemoryAttrib
+        if not a:
+            continue
+
+        info = \
+            deviceMemoryInfoById[p.deviceMemoryVal]
+
+        if a == "devicememoryhandle":
+            info.handle = i
+        if a == "devicememoryoffset":
+            info.offset = i
+        if a == "devicememorysize":
+            info.size = i
+        if a == "devicememorytypeindex":
+            info.typeIndex = i
+        if a == "devicememorytypebits":
+            info.typeBits = i
+
+    if not use:
+        return None
+
+    return deviceMemoryInfoById
+
+# Classes for describing aggregate types (unions, structs) and API calls.
+class VulkanCompoundType(object):
+
+    def __init__(self, name, members, isUnion=False, structEnumExpr=None, structExtendsExpr=None, feature=None, initialEnv={}, optional=None):
+        self.name = name
+        self.typeName = name
+        self.members = members
+        self.environment = initialEnv
+
+        self.isUnion = isUnion
+        self.structEnumExpr = structEnumExpr
+        self.structExtendsExpr = structExtendsExpr
+        self.feature = feature
+
+        self.deviceMemoryInfoParameterIndices = \
+            initDeviceMemoryInfoParameterIndices(self.members)
+
+        self.isTransformed = name in TRANSFORMED_TYPES
+
+        self.copy = None
+
+        self.optionalStr = optional
+
+    def initCopies(self):
+        self.copy = self
+
+        for m in self.members:
+            m.parent = self.copy
+
+    def getMember(self, memberName):
+        for m in self.members:
+            if m.paramName == memberName:
+                return m
+        return None
+
+    def getStructEnumExpr(self,):
+        return self.structEnumExpr
+
+class VulkanAPI(object):
+
+    def __init__(self, name, retType, parameters, origName=None):
+        self.name = name
+        self.origName = name
+        self.retType = retType
+        self.parameters = parameters
+
+        self.deviceMemoryInfoParameterIndices = \
+            initDeviceMemoryInfoParameterIndices(self.parameters)
+
+        self.copy = None
+
+        self.isTransformed = name in TRANSFORMED_TYPES
+
+        if origName:
+            self.origName = origName
+
+    def initCopies(self):
+        self.copy = self
+
+        for m in self.parameters:
+            m.parent = self.copy
+
+    def getCopy(self,):
+        return copy(self)
+
+    def getParameter(self, parameterName):
+        for p in self.parameters:
+            if p.paramName == parameterName:
+                return p
+        return None
+
+    def withModifiedName(self, newName):
+        res = VulkanAPI(newName, self.retType, self.parameters)
+        return res
+
+    def getRetVarExpr(self):
+        if self.retType.typeName == "void":
+            return None
+        return "%s_%s_return" % (self.name, self.retType.typeName)
+
+    def getRetTypeExpr(self):
+        return self.retType.typeName
+
+    def withCustomParameters(self, customParams):
+        res = self.getCopy()
+        res.parameters = customParams
+        return res
+
+    def withCustomReturnType(self, retType):
+        res = self.getCopy()
+        res.retType = retType
+        return res
+
+# Whether or not special handling of virtual elements
+# such as VkDeviceMemory is needed.
+def vulkanTypeNeedsTransform(structOrApi):
+    return structOrApi.deviceMemoryInfoParameterIndices != None
+
+def vulkanTypeGetNeededTransformTypes(structOrApi):
+    res = []
+    if structOrApi.deviceMemoryInfoParameterIndices != None:
+        res.append("devicememory")
+    return res
+
+def vulkanTypeforEachSubType(structOrApi, f):
+    toLoop = None
+    if type(structOrApi) == VulkanCompoundType:
+        toLoop = structOrApi.members
+    if type(structOrApi) == VulkanAPI:
+        toLoop = structOrApi.parameters
+
+    for (i, x) in enumerate(toLoop):
+        f(i, x)
+
+# Parses everything about Vulkan types into a Python readable format.
+class VulkanTypeInfo(object):
+
+    def __init__(self,):
+        self.categories = set([])
+
+        # Tracks what Vulkan type is part of what category.
+        self.typeCategories = {}
+
+        # Tracks the primitve encoding size for each type,
+        # if applicable.
+        self.encodingSizes = {}
+
+        self.structs = {}
+        self.apis = {}
+
+        self.feature = None
+
+    def initType(self, name, category):
+        self.categories.add(category)
+        self.typeCategories[name] = category
+        self.encodingSizes[name] = self.setPrimitiveEncodingSize(name)
+
+    def categoryOf(self, name):
+        return self.typeCategories[name]
+
+    def getPrimitiveEncodingSize(self, name):
+        return self.encodingSizes[name]
+
+    # Queries relating to categories of Vulkan types.
+    def isHandleType(self, name):
+        if name in self.typeCategories:
+            return self.typeCategories[name] == "handle"
+        return False
+
+    def isCompoundType(self, name):
+        if name in self.typeCategories:
+            return self.typeCategories[name] in ["struct", "union"]
+        else:
+            return False
+
+    # Gets the best size in bytes
+    # for encoding/decoding a particular Vulkan type.
+    # If not applicable, returns None.
+    def setPrimitiveEncodingSize(self, name):
+        baseEncodingSizes = {
+            "void" : 8,
+            "char" : 1,
+            "float" : 4,
+            "uint8_t" : 1,
+            "uint16_t" : 2,
+            "uint32_t" : 4,
+            "uint64_t" : 8,
+            "size_t" : 8,
+            "ssize_t" : 8,
+        }
+
+        if name in baseEncodingSizes:
+            return baseEncodingSizes[name]
+
+        category = self.typeCategories[name]
+
+        if category in [None, "api", "bitmask", "include", "define", "struct", "union"]:
+            return None
+
+        # Must be 8---handles are pointers and basetype includes VkDeviceSize
+        # which is 8 bytes
+        if category in ["handle", "basetype", "funcpointer"]:
+            return 8
+
+        # Most of the time, enums are only 4 bytes, but this is
+        # vague enough to be the source of a future headache, and
+        # it's easy to just stream 8 bytes there anyway.
+        if category in ["enum"]:
+            return 8
+
+    def isNonAbiPortableType(self, typeName):
+        if typeName in EXPLICITLY_ABI_PORTABLE_TYPES:
+            return False
+
+        if typeName in EXPLICITLY_ABI_NON_PORTABLE_TYPES:
+            return True
+
+        category = self.typeCategories[typeName]
+        return category in NON_ABI_PORTABLE_TYPE_CATEGORIES
+
+    def onBeginFeature(self, featureName):
+        self.feature = featureName
+
+    def onEndFeature(self):
+        self.feature = None
+
+    def onGenType(self, typeinfo, name, alias):
+        category = typeinfo.elem.get("category")
+        self.initType(name, category)
+
+        if category in ["struct", "union"]:
+            self.onGenStruct(typeinfo, name, alias)
+
+    def onGenStruct(self, typeinfo, typeName, alias):
+        if not alias:
+            members = []
+
+            structExtendsExpr = typeinfo.elem.get("structextends")
+
+            structEnumExpr = None
+
+            initialEnv = {}
+            envStr = typeinfo.elem.get("exists")
+            if envStr != None:
+                comma_separated = envStr.split(",")
+                name_type_pairs = map(lambda cs: tuple(map(lambda t: t.strip(), cs.split(":"))), comma_separated)
+                for (name, typ) in name_type_pairs:
+                    initialEnv[name] = {
+                        "type" : typ,
+                        "binding" : None,
+                        "structmember" : False,
+                        "body" : None,
+                    }
+
+            letenvStr = typeinfo.elem.get("let")
+            if letenvStr != None:
+                comma_separated = letenvStr.split(",")
+                name_body_pairs = map(lambda cs: tuple(map(lambda t: t.strip(), cs.split(":"))), comma_separated)
+                for (name, body) in name_body_pairs:
+                    initialEnv[name] = {
+                        "type" : "uint32_t",
+                        "binding" : name,
+                        "structmember" : False,
+                        "body" : parseLetBodyExpr(body)
+                    }
+
+            for member in typeinfo.elem.findall(".//member"):
+                vulkanType = makeVulkanTypeFromXMLTag(self, member)
+                initialEnv[vulkanType.paramName] = {
+                    "type" : vulkanType.typeName,
+                    "binding" : vulkanType.paramName,
+                    "structmember" : True,
+                    "body" : None,
+                }
+                vulkanType.paramName
+                members.append(vulkanType)
+                if vulkanType.typeName == "VkStructureType" and \
+                   member.get("values"):
+                   structEnumExpr = member.get("values")
+
+            self.structs[typeName] = \
+                VulkanCompoundType( \
+                    typeName,
+                    members,
+                    isUnion = self.categoryOf(typeName) == "union",
+                    structEnumExpr = structEnumExpr,
+                    structExtendsExpr = structExtendsExpr,
+                    feature = self.feature,
+                    initialEnv = initialEnv,
+                    optional = typeinfo.elem.get("optional", None))
+            self.structs[typeName].initCopies()
+
+    def onGenGroup(self, _groupinfo, groupName, _alias=None):
+        self.initType(groupName, "enum")
+
+    def onGenEnum(self, _enuminfo, name, _alias):
+        self.initType(name, "enum")
+
+    def onGenCmd(self, cmdinfo, name, _alias):
+        self.initType(name, "api")
+
+        proto = cmdinfo.elem.find("proto")
+        params = cmdinfo.elem.findall("param")
+
+        self.apis[name] = \
+            VulkanAPI(
+                name,
+                makeVulkanTypeFromXMLTag(self, proto),
+                list(map(lambda p: makeVulkanTypeFromXMLTag(self, p),
+                         params)))
+        self.apis[name].initCopies()
+
+    def onEnd(self,):
+        pass
+
+def hasNullOptionalStringFeature(forEachType):
+    return (hasattr(forEachType, "onCheckWithNullOptionalStringFeature")) and \
+           (hasattr(forEachType, "endCheckWithNullOptionalStringFeature")) and \
+           (hasattr(forEachType, "finalCheckWithNullOptionalStringFeature"))
+
+# General function to iterate over a vulkan type and call code that processes
+# each of its sub-components, if any.
+def iterateVulkanType(typeInfo, vulkanType, forEachType):
+    if not vulkanType.isArrayOfStrings():
+        if vulkanType.isPointerToConstPointer:
+            return False
+
+    forEachType.registerTypeInfo(typeInfo)
+
+    needCheck = \
+        vulkanType.isOptional and \
+        vulkanType.pointerIndirectionLevels > 0 and \
+        (not vulkanType.isNextPointer())
+
+    if typeInfo.isCompoundType(vulkanType.typeName) and not vulkanType.isNextPointer():
+
+        if needCheck:
+            forEachType.onCheck(vulkanType)
+
+        forEachType.onCompoundType(vulkanType)
+
+        if needCheck:
+            forEachType.endCheck(vulkanType)
+
+    else:
+
+        if vulkanType.isString():
+
+            if needCheck and hasNullOptionalStringFeature(forEachType):
+                forEachType.onCheckWithNullOptionalStringFeature(vulkanType)
+                forEachType.onString(vulkanType)
+                forEachType.endCheckWithNullOptionalStringFeature(vulkanType)
+                forEachType.onString(vulkanType)
+                forEachType.finalCheckWithNullOptionalStringFeature(vulkanType)
+            elif needCheck:
+                forEachType.onCheck(vulkanType)
+                forEachType.onString(vulkanType)
+                forEachType.endCheck(vulkanType)
+            else:
+                forEachType.onString(vulkanType)
+
+        elif vulkanType.isArrayOfStrings():
+
+            forEachType.onStringArray(vulkanType)
+
+        elif vulkanType.staticArrExpr:
+
+            forEachType.onStaticArr(vulkanType)
+
+        elif vulkanType.isNextPointer():
+
+            if needCheck:
+                forEachType.onCheck(vulkanType)
+            forEachType.onStructExtension(vulkanType)
+            if needCheck:
+                forEachType.endCheck(vulkanType)
+
+        elif vulkanType.pointerIndirectionLevels > 0:
+            if needCheck:
+                forEachType.onCheck(vulkanType)
+            forEachType.onPointer(vulkanType)
+            if needCheck:
+                forEachType.endCheck(vulkanType)
+        else:
+
+            forEachType.onValue(vulkanType)
+
+    return True
+
+class VulkanTypeIterator(object):
+    def __init__(self,):
+        self.typeInfo = None
+
+    def registerTypeInfo(self, typeInfo):
+        self.typeInfo = typeInfo
+
+def vulkanTypeGetStructFieldLengthInfo(structInfo, vulkanType):
+    def getSpecialCaseVulkanStructFieldLength(structInfo, vulkanType):
+        cases = [
+            {
+                "structName": "VkShaderModuleCreateInfo",
+                "field": "pCode",
+                "lenExpr": "codeSize",
+                "postprocess": lambda expr: "(%s / 4)" % expr
+            },
+            {
+                "structName": "VkPipelineMultisampleStateCreateInfo",
+                "field": "pSampleMask",
+                "lenExpr": "rasterizationSamples",
+                "postprocess": lambda expr: "(((%s) + 31) / 32)" % expr
+            },
+        ]
+
+        for c in cases:
+            if (structInfo.name, vulkanType.paramName) == (c["structName"],
+                                                           c["field"]):
+                return c
+
+        return None
+
+    specialCaseAccess = \
+        getSpecialCaseVulkanStructFieldLength( \
+            structInfo, vulkanType)
+
+    if specialCaseAccess is not None:
+        return specialCaseAccess
+
+    lenExpr = vulkanType.getLengthExpression()
+
+    if lenExpr is None:
+        return lenExpr
+
+    return {
+        "structName" : structInfo.name,
+        "field": vulkanType.typeName,
+        "lenExpr": lenExpr,
+        "postprocess": lambda expr: expr }
+
+class VulkanTypeProtobufInfo(object):
+    def __init__(self, typeInfo, structInfo, vulkanType):
+
+        self.needsMessage = typeInfo.isCompoundType(vulkanType.typeName)
+        self.isRepeatedString = vulkanType.isArrayOfStrings()
+        self.isString = vulkanType.isString() or (
+            vulkanType.typeName == "char" and (vulkanType.staticArrExpr != ""))
+
+        if structInfo is not None:
+            self.lengthInfo = vulkanTypeGetStructFieldLengthInfo(
+                structInfo, vulkanType)
+        else:
+            self.lengthInfo = vulkanType.getLengthExpression()
+
+        self.protobufType = None
+        self.origTypeCategory = typeInfo.categoryOf(vulkanType.typeName)
+
+        self.isExtensionStruct = \
+            vulkanType.typeName == "void" and \
+            vulkanType.pointerIndirectionLevels > 0 and \
+            vulkanType.paramName == "pNext"
+
+        if self.needsMessage:
+            return
+
+        if typeInfo.categoryOf(vulkanType.typeName) in ["enum", "bitmask"]:
+            self.protobufType = "uint32"
+
+        if typeInfo.categoryOf(vulkanType.typeName) in ["funcpointer", "handle", "define"]:
+            self.protobufType = "uint64"
+
+        if typeInfo.categoryOf(vulkanType.typeName) in ["basetype"]:
+            baseTypeMapping = {
+                "VkFlags" : "uint32",
+                "VkBool32" : "uint32",
+                "VkDeviceSize" : "uint64",
+                "VkSampleMask" : "uint32",
+            }
+            self.protobufType = baseTypeMapping[vulkanType.typeName]
+
+        if typeInfo.categoryOf(vulkanType.typeName) == None:
+
+            otherTypeMapping = {
+                "void" : "uint64",
+                "char" : "uint8",
+                "size_t" : "uint64",
+                "float" : "float",
+                "uint8_t" : "uint32",
+                "uint16_t" : "uint32",
+                "int32_t" : "int32",
+                "uint32_t" : "uint32",
+                "uint64_t" : "uint64",
+                "VkDeviceSize" : "uint64",
+                "VkSampleMask" : "uint32",
+            }
+
+            if vulkanType.typeName in otherTypeMapping:
+                self.protobufType = otherTypeMapping[vulkanType.typeName]
+            else:
+                self.protobufType = "uint64"
+
+
+        protobufCTypeMapping = {
+            "uint8" : "uint8_t",
+            "uint32" : "uint32_t",
+            "int32" : "int32_t",
+            "uint64" : "uint64_t",
+            "float" : "float",
+            "string" : "const char*",
+        }
+
+        self.protobufCType = protobufCTypeMapping[self.protobufType]
+
diff --git a/registry/vulkan/scripts/cereal/counting.py b/registry/vulkan/scripts/cereal/counting.py
new file mode 100644
index 0000000..d8df778
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/counting.py
@@ -0,0 +1,696 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from copy import copy
+
+from .common.codegen import CodeGen
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, VulkanTypeIterator, Atom, FuncExpr, FuncExprVal, FuncLambda
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import ROOT_TYPE_VAR_NAME, ROOT_TYPE_PARAM
+from .wrapperdefs import STRUCT_EXTENSION_PARAM, STRUCT_EXTENSION_PARAM_FOR_WRITE, EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME
+
+class VulkanCountingCodegen(VulkanTypeIterator):
+    def __init__(self, cgen, featureBitsVar, toCountVar, countVar, rootTypeVar, prefix, forApiOutput=False, mapHandles=True, handleMapOverwrites=False, doFiltering=True):
+        self.cgen = cgen
+        self.featureBitsVar = featureBitsVar
+        self.toCountVar = toCountVar
+        self.rootTypeVar = rootTypeVar
+        self.countVar = countVar
+        self.prefix = prefix
+        self.forApiOutput = forApiOutput
+
+        self.exprAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.toCountVar, asPtr = True)
+        self.exprValueAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.toCountVar, asPtr = False)
+        self.exprPrimitiveValueAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.toCountVar, asPtr = False)
+
+        self.lenAccessor = lambda t: self.cgen.generalLengthAccess(t, parentVarName = self.toCountVar)
+        self.lenAccessorGuard = lambda t: self.cgen.generalLengthAccessGuard(t, parentVarName = self.toCountVar)
+        self.filterVarAccessor = lambda t: self.cgen.filterVarAccess(t, parentVarName = self.toCountVar)
+
+        self.checked = False
+
+        self.mapHandles = mapHandles
+        self.handleMapOverwrites = handleMapOverwrites
+        self.doFiltering = doFiltering
+
+    def getTypeForStreaming(self, vulkanType):
+        res = copy(vulkanType)
+
+        if not vulkanType.accessibleAsPointer():
+            res = res.getForAddressAccess()
+
+        if vulkanType.staticArrExpr:
+            res = res.getForAddressAccess()
+
+        return res
+
+    def makeCastExpr(self, vulkanType):
+        return "(%s)" % (
+            self.cgen.makeCTypeDecl(vulkanType, useParamName=False))
+
+    def genCount(self, sizeExpr):
+        self.cgen.stmt("*%s += %s" % (self.countVar, sizeExpr))
+
+    def genPrimitiveStreamCall(self, vulkanType):
+        self.genCount(str(self.cgen.countPrimitive(
+            self.typeInfo,
+            vulkanType)))
+
+    def genHandleMappingCall(self, vulkanType, access, lenAccess):
+
+        if lenAccess is None:
+            lenAccess = "1"
+            handle64Bytes = "8"
+        else:
+            handle64Bytes = "%s * 8" % lenAccess
+
+        handle64Var = self.cgen.var()
+        if lenAccess != "1":
+            self.cgen.beginIf(lenAccess)
+            # self.cgen.stmt("uint64_t* %s" % handle64Var)
+            # self.cgen.stmt(
+                # "%s->alloc((void**)&%s, %s * 8)" % \
+                # (self.streamVarName, handle64Var, lenAccess))
+            handle64VarAccess = handle64Var
+            handle64VarType = \
+                makeVulkanTypeSimple(False, "uint64_t", 1, paramName=handle64Var)
+        else:
+            self.cgen.stmt("uint64_t %s" % handle64Var)
+            handle64VarAccess = "&%s" % handle64Var
+            handle64VarType = \
+                makeVulkanTypeSimple(False, "uint64_t", 0, paramName=handle64Var)
+
+        if self.handleMapOverwrites:
+            # self.cgen.stmt(
+                # "static_assert(8 == sizeof(%s), \"handle map overwrite requres %s to be 8 bytes long\")" % \
+                        # (vulkanType.typeName, vulkanType.typeName))
+            # self.cgen.stmt(
+                # "%s->handleMapping()->mapHandles_%s((%s*)%s, %s)" %
+                # (self.streamVarName, vulkanType.typeName, vulkanType.typeName,
+                # access, lenAccess))
+            self.genCount("8 * %s" % lenAccess)
+        else:
+            # self.cgen.stmt(
+                # "%s->handleMapping()->mapHandles_%s_u64(%s, %s, %s)" %
+                # (self.streamVarName, vulkanType.typeName,
+                # access,
+                # handle64VarAccess, lenAccess))
+            self.genCount(handle64Bytes)
+
+        if lenAccess != "1":
+            self.cgen.endIf()
+
+    def doAllocSpace(self, vulkanType):
+        pass
+
+    def getOptionalStringFeatureExpr(self, vulkanType):
+        if vulkanType.optionalStr is not None:
+            if vulkanType.optionalStr.startswith("streamFeature:"):
+                splitted = vulkanType.optionalStr.split(":")
+                featureExpr = "%s & %s" % (self.featureBitsVar, splitted[1])
+                return featureExpr
+        return None
+
+    def onCheck(self, vulkanType):
+
+        if self.forApiOutput:
+            return
+
+        featureExpr = self.getOptionalStringFeatureExpr(vulkanType);
+
+        self.checked = True
+
+        access = self.exprAccessor(vulkanType)
+
+        needConsistencyCheck = False
+
+        self.cgen.line("// WARNING PTR CHECK")
+        checkAccess = self.exprAccessor(vulkanType)
+        addrExpr = "&" + checkAccess
+        sizeExpr = self.cgen.sizeofExpr(vulkanType)
+
+        if featureExpr is not None:
+            self.cgen.beginIf(featureExpr)
+
+        self.genPrimitiveStreamCall(
+            vulkanType)
+
+        if featureExpr is not None:
+            self.cgen.endIf()
+
+        if featureExpr is not None:
+            self.cgen.beginIf("(!(%s) || %s)" % (featureExpr, access))
+        else:
+            self.cgen.beginIf(access)
+
+        if needConsistencyCheck and featureExpr is None:
+            self.cgen.beginIf("!(%s)" % checkName)
+            self.cgen.stmt(
+                "fprintf(stderr, \"fatal: %s inconsistent between guest and host\\n\")" % (access))
+            self.cgen.endIf()
+
+
+    def onCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.cgen.beginIf("%s & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT" % self.featureBitsVar)
+        self.onCheck(vulkanType)
+
+    def endCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.endCheck(vulkanType)
+        self.cgen.endIf()
+        self.cgen.beginElse()
+
+    def finalCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.cgen.endElse()
+
+    def endCheck(self, vulkanType):
+
+        if self.checked:
+            self.cgen.endIf()
+            self.checked = False
+
+    def genFilterFunc(self, filterfunc, env):
+
+        def loop(expr, lambdaEnv={}):
+            def do_func(expr):
+                fnamestr = expr.name.name
+                if "not" == fnamestr:
+                    return "!(%s)" % (loop(expr.args[0], lambdaEnv))
+                if "eq" == fnamestr:
+                    return "(%s == %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "and" == fnamestr:
+                    return "(%s && %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "or" == fnamestr:
+                    return "(%s || %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "getfield" == fnamestr:
+                    ptrlevels = get_ptrlevels(expr.args[0].val.name)
+                    if ptrlevels == 0:
+                        return "%s.%s" % (loop(expr.args[0], lambdaEnv), expr.args[1].val)
+                    else:
+                        return "(%s(%s)).%s" % ("*" * ptrlevels, loop(expr.args[0], lambdaEnv), expr.args[1].val)
+
+                if "if" == fnamestr:
+                    return "((%s) ? (%s) : (%s))" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv), loop(expr.args[2], lambdaEnv))
+
+                return "%s(%s)" % (fnamestr, ", ".join(map(lambda e: loop(e, lambdaEnv), expr.args)))
+
+            def do_expratom(atomname, lambdaEnv= {}):
+                if lambdaEnv.get(atomname, None) is not None:
+                    return atomname
+
+                enventry = env.get(atomname, None)
+                if None != enventry:
+                    return self.getEnvAccessExpr(atomname)
+                return atomname
+
+            def get_ptrlevels(atomname, lambdaEnv= {}):
+                if lambdaEnv.get(atomname, None) is not None:
+                    return 0
+
+                enventry = env.get(atomname, None)
+                if None != enventry:
+                    return self.getPointerIndirectionLevels(atomname)
+
+                return 0
+
+            def do_exprval(expr, lambdaEnv= {}):
+                expratom = expr.val
+
+                if Atom == type(expratom):
+                    return do_expratom(expratom.name, lambdaEnv)
+
+                return "%s" % expratom
+
+            def do_lambda(expr, lambdaEnv= {}):
+                params = expr.vs
+                body = expr.body
+                newEnv = {}
+
+                for (k, v) in lambdaEnv.items():
+                    newEnv[k] = v
+
+                for p in params:
+                    newEnv[p.name] = p.typ
+
+                return "[](%s) { return %s; }" % (", ".join(list(map(lambda p: "%s %s" % (p.typ, p.name), params))), loop(body, lambdaEnv=newEnv))
+
+            if FuncExpr == type(expr):
+                return do_func(expr)
+            if FuncLambda == type(expr):
+                return do_lambda(expr)
+            elif FuncExprVal == type(expr):
+                return do_exprval(expr)
+
+        return loop(filterfunc)
+
+    def beginFilterGuard(self, vulkanType):
+        if vulkanType.filterVar == None:
+            return
+
+        if self.doFiltering == False:
+            return
+
+        filterVarAccess = self.getEnvAccessExpr(vulkanType.filterVar)
+
+        filterValsExpr = None
+        filterFuncExpr = None
+        filterExpr = None
+
+        filterFeature = "%s & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT" % self.featureBitsVar
+
+        if None != vulkanType.filterVals:
+            filterValsExpr = " || ".join(map(lambda filterval: "(%s == %s)" % (filterval, filterVarAccess), vulkanType.filterVals))
+
+        if None != vulkanType.filterFunc:
+            filterFuncExpr = self.genFilterFunc(vulkanType.filterFunc, self.currentStructInfo.environment)
+
+        if None != filterValsExpr and None != filterFuncExpr:
+            filterExpr = "%s || %s" % (filterValsExpr, filterFuncExpr)
+        elif None == filterValsExpr and None == filterFuncExpr:
+            # Assume is bool
+            self.cgen.beginIf(filterVarAccess)
+        elif None != filterValsExpr:
+            self.cgen.beginIf("(!(%s) || (%s))" % (filterFeature, filterValsExpr))
+        elif None != filterFuncExpr:
+            self.cgen.beginIf("(!(%s) || (%s))" % (filterFeature, filterFuncExpr))
+
+    def endFilterGuard(self, vulkanType, cleanupExpr=None):
+        if vulkanType.filterVar == None:
+            return
+
+        if self.doFiltering == False:
+            return
+
+        if cleanupExpr == None:
+            self.cgen.endIf()
+        else:
+            self.cgen.endIf()
+            self.cgen.beginElse()
+            self.cgen.stmt(cleanupExpr)
+            self.cgen.endElse()
+
+    def getEnvAccessExpr(self, varName):
+        parentEnvEntry = self.currentStructInfo.environment.get(varName, None)
+
+        if parentEnvEntry != None:
+            isParentMember = parentEnvEntry["structmember"]
+
+            if isParentMember:
+                envAccess = self.exprValueAccessor(list(filter(lambda member: member.paramName == varName, self.currentStructInfo.members))[0])
+            else:
+                envAccess = varName
+            return envAccess
+
+        return None
+
+    def getPointerIndirectionLevels(self, varName):
+        parentEnvEntry = self.currentStructInfo.environment.get(varName, None)
+
+        if parentEnvEntry != None:
+            isParentMember = parentEnvEntry["structmember"]
+
+            if isParentMember:
+                return list(filter(lambda member: member.paramName == varName, self.currentStructInfo.members))[0].pointerIndirectionLevels
+            else:
+                return 0
+            return 0
+
+        return 0
+
+
+    def onCompoundType(self, vulkanType):
+
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        self.beginFilterGuard(vulkanType)
+
+        if vulkanType.pointerIndirectionLevels > 0:
+            self.doAllocSpace(vulkanType)
+
+        if lenAccess is not None:
+            if lenAccessGuard is not None:
+                self.cgen.beginIf(lenAccessGuard)
+            loopVar = "i"
+            access = "%s + %s" % (access, loopVar)
+            forInit = "uint32_t %s = 0" % loopVar
+            forCond = "%s < (uint32_t)%s" % (loopVar, lenAccess)
+            forIncr = "++%s" % loopVar
+            self.cgen.beginFor(forInit, forCond, forIncr)
+
+        accessWithCast = "%s(%s)" % (self.makeCastExpr(
+            self.getTypeForStreaming(vulkanType)), access)
+
+        callParams = [self.featureBitsVar,
+                      self.rootTypeVar, accessWithCast, self.countVar]
+
+        for (bindName, localName) in vulkanType.binds.items():
+            callParams.append(self.getEnvAccessExpr(localName))
+
+        self.cgen.funcCall(None, self.prefix + vulkanType.typeName,
+                           callParams)
+
+        if lenAccess is not None:
+            self.cgen.endFor()
+            if lenAccessGuard is not None:
+                self.cgen.endIf()
+
+        self.endFilterGuard(vulkanType)
+
+    def onString(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+        self.genCount("sizeof(uint32_t) + (%s ? strlen(%s) : 0)" % (access, access))
+
+    def onStringArray(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        self.genCount("sizeof(uint32_t)")
+        if lenAccessGuard is not None:
+            self.cgen.beginIf(lenAccessGuard)
+        self.cgen.beginFor("uint32_t i = 0", "i < %s" % lenAccess, "++i")
+        self.cgen.stmt("size_t l = %s[i] ? strlen(%s[i]) : 0" % (access, access))
+        self.genCount("sizeof(uint32_t) + (%s[i] ? strlen(%s[i]) : 0)" % (access, access))
+        self.cgen.endFor()
+        if lenAccessGuard is not None:
+            self.cgen.endIf()
+
+    def onStaticArr(self, vulkanType):
+        access = self.exprValueAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        if lenAccessGuard is not None:
+            self.cgen.beginIf(lenAccessGuard)
+        finalLenExpr = "%s * %s" % (lenAccess, self.cgen.sizeofExpr(vulkanType))
+        if lenAccessGuard is not None:
+            self.cgen.endIf()
+        self.genCount(finalLenExpr)
+
+    def onStructExtension(self, vulkanType):
+        sTypeParam = copy(vulkanType)
+        sTypeParam.paramName = "sType"
+
+        access = self.exprAccessor(vulkanType)
+        sizeVar = "%s_size" % vulkanType.paramName
+
+        castedAccessExpr = access
+
+        sTypeAccess = self.exprAccessor(sTypeParam)
+        self.cgen.beginIf("%s == VK_STRUCTURE_TYPE_MAX_ENUM" %
+                          self.rootTypeVar)
+        self.cgen.stmt("%s = %s" % (self.rootTypeVar, sTypeAccess))
+        self.cgen.endIf()
+
+        self.cgen.funcCall(None, self.prefix + "extension_struct",
+                           [self.featureBitsVar, self.rootTypeVar, castedAccessExpr, self.countVar])
+
+
+    def onPointer(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        self.beginFilterGuard(vulkanType)
+        self.doAllocSpace(vulkanType)
+
+        if vulkanType.filterVar != None:
+            print("onPointer Needs filter: %s filterVar %s" % (access, vulkanType.filterVar))
+
+        if vulkanType.isHandleType() and self.mapHandles:
+            self.genHandleMappingCall(vulkanType, access, lenAccess)
+        else:
+            if self.typeInfo.isNonAbiPortableType(vulkanType.typeName):
+                if lenAccess is not None:
+                    if lenAccessGuard is not None:
+                        self.cgen.beginIf(lenAccessGuard)
+                    self.cgen.beginFor("uint32_t i = 0", "i < (uint32_t)%s" % lenAccess, "++i")
+                    self.genPrimitiveStreamCall(vulkanType.getForValueAccess())
+                    self.cgen.endFor()
+                    if lenAccessGuard is not None:
+                        self.cgen.endIf()
+                else:
+                    self.genPrimitiveStreamCall(vulkanType.getForValueAccess())
+            else:
+                if lenAccess is not None:
+                    needLenAccessGuard = True
+                    finalLenExpr = "%s * %s" % (
+                        lenAccess, self.cgen.sizeofExpr(vulkanType.getForValueAccess()))
+                else:
+                    needLenAccessGuard = False
+                    finalLenExpr = "%s" % (
+                        self.cgen.sizeofExpr(vulkanType.getForValueAccess()))
+                if needLenAccessGuard and lenAccessGuard is not None:
+                    self.cgen.beginIf(lenAccessGuard)
+                self.genCount(finalLenExpr)
+                if needLenAccessGuard and lenAccessGuard is not None:
+                    self.cgen.endIf()
+
+        self.endFilterGuard(vulkanType)
+
+    def onValue(self, vulkanType):
+        self.beginFilterGuard(vulkanType)
+
+        if vulkanType.isHandleType() and self.mapHandles:
+            access = self.exprAccessor(vulkanType)
+            if vulkanType.filterVar != None:
+                print("onValue Needs filter: %s filterVar %s" % (access, vulkanType.filterVar))
+            self.genHandleMappingCall(
+                vulkanType.getForAddressAccess(), access, "1")
+        elif self.typeInfo.isNonAbiPortableType(vulkanType.typeName):
+            access = self.exprPrimitiveValueAccessor(vulkanType)
+            self.genPrimitiveStreamCall(vulkanType)
+        else:
+            access = self.exprAccessor(vulkanType)
+            self.genCount(self.cgen.sizeofExpr(vulkanType))
+
+        self.endFilterGuard(vulkanType)
+
+    def streamLetParameter(self, structInfo, letParamInfo):
+        filterFeature = "%s & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT" % (self.featureBitsVar)
+        self.cgen.stmt("%s %s = 1" % (letParamInfo.typeName, letParamInfo.paramName))
+
+        self.cgen.beginIf(filterFeature)
+
+        bodyExpr = self.currentStructInfo.environment[letParamInfo.paramName]["body"]
+        self.cgen.stmt("%s = %s" % (letParamInfo.paramName, self.genFilterFunc(bodyExpr, self.currentStructInfo.environment)))
+
+        self.genPrimitiveStreamCall(letParamInfo)
+
+        self.cgen.endIf()
+
+class VulkanCounting(VulkanWrapperGenerator):
+
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.codegen = CodeGen()
+
+        self.featureBitsVar = "featureBits"
+        self.featureBitsVarType = makeVulkanTypeSimple(False, "uint32_t", 0, self.featureBitsVar)
+        self.countingPrefix = "count_"
+        self.countVars = ["toCount", "count"]
+        self.countVarType = makeVulkanTypeSimple(False, "size_t", 1, self.countVars[1])
+        self.voidType = makeVulkanTypeSimple(False, "void", 0)
+        self.rootTypeVar = ROOT_TYPE_VAR_NAME
+
+        self.countingCodegen = \
+            VulkanCountingCodegen(
+                self.codegen,
+                self.featureBitsVar,
+                self.countVars[0],
+                self.countVars[1],
+                self.rootTypeVar,
+                self.countingPrefix)
+
+        self.knownDefs = {}
+
+        self.extensionCountingPrototype = \
+            VulkanAPI(self.countingPrefix + "extension_struct",
+                      self.voidType,
+                      [self.featureBitsVarType,
+                       ROOT_TYPE_PARAM,
+                       STRUCT_EXTENSION_PARAM,
+                       self.countVarType])
+
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+        self.module.appendImpl(self.codegen.makeFuncDecl(
+            self.extensionCountingPrototype))
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+        if name in self.knownDefs:
+            return
+
+        category = self.typeInfo.categoryOf(name)
+
+        if category in ["struct", "union"] and alias:
+            # TODO(liyl): might not work if freeParams != []
+            self.module.appendHeader(
+                self.codegen.makeFuncAlias(self.countingPrefix + name,
+                                           self.countingPrefix + alias))
+
+        if category in ["struct", "union"] and not alias:
+
+            structInfo = self.typeInfo.structs[name]
+
+            freeParams = []
+            letParams = []
+
+            for (envname, bindingInfo) in list(sorted(structInfo.environment.items(), key = lambda kv: kv[0])):
+                if None == bindingInfo["binding"]:
+                    freeParams.append(makeVulkanTypeSimple(True, bindingInfo["type"], 0, envname))
+                else:
+                    if not bindingInfo["structmember"]:
+                        letParams.append(makeVulkanTypeSimple(True, bindingInfo["type"], 0, envname))
+
+            typeFromName = \
+                lambda varname: \
+                    makeVulkanTypeSimple(True, name, 1, varname)
+
+            countingParams = \
+                [makeVulkanTypeSimple(False, "uint32_t", 0, self.featureBitsVar),
+                 ROOT_TYPE_PARAM,
+                 typeFromName(self.countVars[0]),
+                 makeVulkanTypeSimple(False, "size_t", 1, self.countVars[1])]
+
+            countingPrototype = \
+                VulkanAPI(self.countingPrefix + name,
+                          self.voidType,
+                          countingParams + freeParams)
+
+            countingPrototypeNoFilter = \
+                VulkanAPI(self.countingPrefix + name,
+                          self.voidType,
+                          countingParams)
+
+            def structCountingDef(cgen):
+                self.countingCodegen.cgen = cgen
+                self.countingCodegen.currentStructInfo = structInfo
+                cgen.stmt("(void)%s" % self.featureBitsVar);
+                cgen.stmt("(void)%s" % self.rootTypeVar);
+                cgen.stmt("(void)%s" % self.countVars[0]);
+                cgen.stmt("(void)%s" % self.countVars[1]);
+
+                if category == "struct":
+                    # marshal 'let' parameters first
+                    for letp in letParams:
+                        self.countingCodegen.streamLetParameter(self.typeInfo, letp)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.countingCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.countingCodegen)
+
+            def structCountingDefNoFilter(cgen):
+                self.countingCodegen.cgen = cgen
+                self.countingCodegen.currentStructInfo = structInfo
+                self.countingCodegen.doFiltering = False
+                cgen.stmt("(void)%s" % self.featureBitsVar);
+                cgen.stmt("(void)%s" % self.rootTypeVar);
+                cgen.stmt("(void)%s" % self.countVars[0]);
+                cgen.stmt("(void)%s" % self.countVars[1]);
+
+                if category == "struct":
+                    # marshal 'let' parameters first
+                    for letp in letParams:
+                        self.countingCodegen.streamLetParameter(self.typeInfo, letp)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.countingCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.countingCodegen)
+
+                self.countingCodegen.doFiltering = True
+
+            self.module.appendHeader(
+                self.codegen.makeFuncDecl(countingPrototype))
+            self.module.appendImpl(
+                self.codegen.makeFuncImpl(countingPrototype, structCountingDef))
+
+            if freeParams != []:
+                self.module.appendHeader(
+                    self.cgenHeader.makeFuncDecl(countingPrototypeNoFilter))
+                self.module.appendImpl(
+                    self.cgenImpl.makeFuncImpl(
+                        countingPrototypeNoFilter, structCountingDefNoFilter))
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+    def doExtensionStructCountCodegen(self, cgen, extParam, forEach, funcproto):
+        accessVar = "structAccess"
+        sizeVar = "currExtSize"
+        cgen.stmt("VkInstanceCreateInfo* %s = (VkInstanceCreateInfo*)(%s)" % (accessVar, extParam.paramName))
+        cgen.stmt("size_t %s = %s(%s, %s, %s)" % (sizeVar, EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME,
+                                                  self.featureBitsVar, ROOT_TYPE_VAR_NAME, extParam.paramName))
+
+        cgen.beginIf("!%s && %s" % (sizeVar, extParam.paramName))
+
+        cgen.line("// unknown struct extension; skip and call on its pNext field");
+        cgen.funcCall(None, funcproto.name, [
+                      self.featureBitsVar, ROOT_TYPE_VAR_NAME, "(void*)%s->pNext" % accessVar, self.countVars[1]])
+        cgen.stmt("return")
+
+        cgen.endIf()
+        cgen.beginElse()
+
+        cgen.line("// known or null extension struct")
+
+        cgen.stmt("*%s += sizeof(uint32_t)" % self.countVars[1])
+
+        cgen.beginIf("!%s" % (sizeVar))
+        cgen.line("// exit if this was a null extension struct (size == 0 in this branch)")
+        cgen.stmt("return")
+        cgen.endIf()
+
+        cgen.endIf()
+
+        cgen.stmt("*%s += sizeof(VkStructureType)" % self.countVars[1])
+
+        def fatalDefault(cgen):
+            cgen.line("// fatal; the switch is only taken if the extension struct is known");
+            cgen.stmt("abort()")
+            pass
+
+        self.emitForEachStructExtension(
+            cgen,
+            makeVulkanTypeSimple(False, "void", 0, "void"),
+            extParam,
+            forEach,
+            defaultEmit=fatalDefault,
+            rootTypeVar=ROOT_TYPE_PARAM)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
+
+        def forEachExtensionCounting(ext, castedAccess, cgen):
+            cgen.funcCall(None, self.countingPrefix + ext.name,
+                          [self.featureBitsVar, self.rootTypeVar, castedAccess, self.countVars[1]])
+
+        self.module.appendImpl(
+            self.codegen.makeFuncImpl(
+                self.extensionCountingPrototype,
+                lambda cgen: self.doExtensionStructCountCodegen(
+                    cgen,
+                    STRUCT_EXTENSION_PARAM,
+                    forEachExtensionCounting,
+                    self.extensionCountingPrototype)))
diff --git a/registry/vulkan/scripts/cereal/decoder.py b/registry/vulkan/scripts/cereal/decoder.py
new file mode 100644
index 0000000..21c92ec
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/decoder.py
@@ -0,0 +1,810 @@
+from .common.codegen import CodeGen, VulkanWrapperGenerator, VulkanAPIWrapper
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, DISPATCHABLE_HANDLE_TYPES, NON_DISPATCHABLE_HANDLE_TYPES
+
+from .marshaling import VulkanMarshalingCodegen
+from .reservedmarshaling import VulkanReservedMarshalingCodegen
+from .transform import TransformCodegen, genTransformsForVulkanType
+
+from .wrapperdefs import API_PREFIX_MARSHAL
+from .wrapperdefs import API_PREFIX_UNMARSHAL, API_PREFIX_RESERVEDUNMARSHAL
+from .wrapperdefs import VULKAN_STREAM_TYPE
+from .wrapperdefs import ROOT_TYPE_DEFAULT_VALUE
+from .wrapperdefs import RELAXED_APIS
+
+from copy import copy
+
+SKIPPED_DECODER_DELETES = [
+    "vkFreeDescriptorSets",
+]
+
+DELAYED_DECODER_DELETES = [
+    "vkDestroyPipelineLayout",
+]
+
+decoder_decl_preamble = """
+
+class IOStream;
+
+class VkDecoder {
+public:
+    VkDecoder();
+    ~VkDecoder();
+    void setForSnapshotLoad(bool forSnapshotLoad);
+    void onThreadTeardown();
+    size_t decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr);
+private:
+    class Impl;
+    std::unique_ptr<Impl> mImpl;
+};
+"""
+
+decoder_impl_preamble ="""
+using emugl::vkDispatch;
+
+using namespace goldfish_vk;
+
+using android::base::System;
+
+class VkDecoder::Impl {
+public:
+    Impl() : m_logCalls(System::get()->envGet("ANDROID_EMU_VK_LOG_CALLS") == "1"),
+             m_vk(vkDispatch()),
+             m_state(VkDecoderGlobalState::get()),
+             m_boxedHandleUnwrapMapping(m_state),
+             m_boxedHandleCreateMapping(m_state),
+             m_boxedHandleDestroyMapping(m_state),
+             m_boxedHandleUnwrapAndDeleteMapping(m_state),
+             m_boxedHandleUnwrapAndDeletePreserveBoxedMapping(m_state) { }
+    %s* stream() { return &m_vkStream; }
+    VulkanMemReadingStream* readStream() { return &m_vkMemReadingStream; }
+
+    void setForSnapshotLoad(bool forSnapshotLoad) {
+        m_forSnapshotLoad = forSnapshotLoad;
+    }
+
+    void onThreadTeardown() {
+        m_threadTeardown = true;
+    }
+
+    size_t decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr);
+
+private:
+    bool m_logCalls;
+    bool m_forSnapshotLoad = false;
+    bool m_threadTeardown = false;
+    VulkanDispatch* m_vk;
+    VkDecoderGlobalState* m_state;
+    %s m_vkStream { nullptr };
+    VulkanMemReadingStream m_vkMemReadingStream { nullptr };
+    BoxedHandleUnwrapMapping m_boxedHandleUnwrapMapping;
+    BoxedHandleCreateMapping m_boxedHandleCreateMapping;
+    BoxedHandleDestroyMapping m_boxedHandleDestroyMapping;
+    BoxedHandleUnwrapAndDeleteMapping m_boxedHandleUnwrapAndDeleteMapping;
+    android::base::BumpPool m_pool;
+    BoxedHandleUnwrapAndDeletePreserveBoxedMapping m_boxedHandleUnwrapAndDeletePreserveBoxedMapping;
+};
+
+VkDecoder::VkDecoder() :
+    mImpl(new VkDecoder::Impl()) { }
+
+VkDecoder::~VkDecoder() = default;
+
+void VkDecoder::setForSnapshotLoad(bool forSnapshotLoad) {
+    mImpl->setForSnapshotLoad(forSnapshotLoad);
+}
+
+void VkDecoder::onThreadTeardown() {
+    mImpl->onThreadTeardown();
+}
+
+size_t VkDecoder::decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr) {
+    return mImpl->decode(buf, bufsize, stream, seqnoPtr);
+}
+
+// VkDecoder::Impl::decode to follow
+""" % (VULKAN_STREAM_TYPE, VULKAN_STREAM_TYPE)
+
+READ_STREAM = "vkReadStream"
+WRITE_STREAM = "vkStream"
+
+# Driver workarounds for APIs that don't work well multithreaded
+driver_workarounds_global_lock_apis = [ \
+    "vkCreatePipelineLayout",
+    "vkDestroyPipelineLayout",
+]
+
+def emit_param_decl_for_reading(param, cgen):
+    if param.staticArrExpr:
+        cgen.stmt(
+            cgen.makeRichCTypeDecl(param.getForNonConstAccess()))
+    else:
+        cgen.stmt(
+            cgen.makeRichCTypeDecl(param))
+
+def emit_unmarshal(typeInfo, param, cgen, output = False, destroy = False, noUnbox = False):
+    if destroy:
+        iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+            cgen,
+            READ_STREAM,
+            ROOT_TYPE_DEFAULT_VALUE,
+            param.paramName,
+            "readStreamPtrPtr",
+            API_PREFIX_RESERVEDUNMARSHAL,
+            "",
+            direction="read",
+            dynAlloc=True))
+        lenAccess = cgen.generalLengthAccess(param)
+        lenAccessGuard = cgen.generalLengthAccessGuard(param)
+        if None == lenAccess or "1" == lenAccess:
+            cgen.stmt("boxed_%s_preserve = %s" % (param.paramName, param.paramName))
+            cgen.stmt("%s = unbox_%s(%s)" % (param.paramName, param.typeName, param.paramName))
+        else:
+            if lenAccessGuard is not None:
+                cgen.beginIf(lenAccessGuard)
+            cgen.beginFor("uint32_t i = 0", "i < %s" % lenAccess, "++i")
+            cgen.stmt("boxed_%s_preserve[i] = %s[i]" % (param.paramName, param.paramName))
+            cgen.stmt("((%s*)(%s))[i] = unbox_%s(%s[i])" % (param.typeName, param.paramName, param.typeName, param.paramName))
+            cgen.endFor()
+            if lenAccessGuard is not None:
+                cgen.endIf()
+    else:
+        if noUnbox:
+            cgen.line("// No unbox for %s" % (param.paramName))
+        iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+            cgen,
+            READ_STREAM,
+            ROOT_TYPE_DEFAULT_VALUE,
+            param.paramName,
+            "readStreamPtrPtr",
+            API_PREFIX_RESERVEDUNMARSHAL,
+            "" if (output or noUnbox) else "unbox_",
+            direction="read",
+            dynAlloc=True))
+
+def emit_dispatch_unmarshal(typeInfo, param, cgen, globalWrapped):
+    if globalWrapped:
+        cgen.stmt("// Begin global wrapped dispatchable handle unboxing for %s" % param.paramName)
+        iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+            cgen,
+            READ_STREAM,
+            ROOT_TYPE_DEFAULT_VALUE,
+            param.paramName,
+            "readStreamPtrPtr",
+            API_PREFIX_RESERVEDUNMARSHAL,
+            "",
+            direction="read",
+            dynAlloc=True))
+    else:
+        cgen.stmt("// Begin non wrapped dispatchable handle unboxing for %s" % param.paramName)
+        # cgen.stmt("%s->unsetHandleMapping()" % READ_STREAM)
+        iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+            cgen,
+            READ_STREAM,
+            ROOT_TYPE_DEFAULT_VALUE,
+            param.paramName,
+            "readStreamPtrPtr",
+            API_PREFIX_RESERVEDUNMARSHAL,
+            "",
+            direction="read",
+            dynAlloc=True))
+        cgen.stmt("auto unboxed_%s = unbox_%s(%s)" %
+                  (param.paramName, param.typeName, param.paramName))
+        cgen.stmt("auto vk = dispatch_%s(%s)" %
+                  (param.typeName, param.paramName))
+        cgen.stmt("// End manual dispatchable handle unboxing for %s" % param.paramName)
+
+def emit_transform(typeInfo, param, cgen, variant="tohost"):
+    res = \
+        iterateVulkanType(typeInfo, param, TransformCodegen( \
+            cgen, param.paramName, "m_state", "transform_%s_" % variant, variant))
+    if not res:
+        cgen.stmt("(void)%s" % param.paramName)
+
+def emit_marshal(typeInfo, param, cgen, handleMapOverwrites=False):
+    iterateVulkanType(typeInfo, param, VulkanMarshalingCodegen(
+        cgen,
+        WRITE_STREAM,
+        ROOT_TYPE_DEFAULT_VALUE,
+        param.paramName,
+        API_PREFIX_MARSHAL,
+        direction="write",
+        handleMapOverwrites=handleMapOverwrites))
+
+class DecodingParameters(object):
+    def __init__(self, api):
+        self.params = []
+        self.toRead = []
+        self.toWrite = []
+
+        i = 0
+
+        for param in api.parameters:
+            param.nonDispatchableHandleCreate = False
+            param.nonDispatchableHandleDestroy = False
+            param.dispatchHandle = False
+            param.dispatchableHandleCreate = False
+            param.dispatchableHandleDestroy = False
+
+            if i == 0 and param.isDispatchableHandleType():
+                param.dispatchHandle = True
+
+            if param.isNonDispatchableHandleType() and param.isCreatedBy(api):
+                param.nonDispatchableHandleCreate = True
+
+            if param.isNonDispatchableHandleType() and param.isDestroyedBy(api):
+                param.nonDispatchableHandleDestroy = True
+
+            if param.isDispatchableHandleType() and param.isCreatedBy(api):
+                param.dispatchableHandleCreate = True
+
+            if param.isDispatchableHandleType() and param.isDestroyedBy(api):
+                param.dispatchableHandleDestroy = True
+
+            self.toRead.append(param)
+
+            if param.possiblyOutput():
+                self.toWrite.append(param)
+
+            self.params.append(param)
+
+            i += 1
+
+def emit_call_log(api, cgen):
+    decodingParams = DecodingParameters(api)
+    paramsToRead = decodingParams.toRead
+
+    cgen.beginIf("m_logCalls")
+    paramLogFormat = ""
+    paramLogArgs = []
+    for p in paramsToRead:
+        paramLogFormat += "0x%llx "
+    for p in paramsToRead:
+        paramLogArgs.append("(unsigned long long)%s" % (p.paramName))
+    cgen.stmt("fprintf(stderr, \"stream %%p: call %s %s\\n\", ioStream, %s)" % (api.name, paramLogFormat, ", ".join(paramLogArgs)))
+    cgen.endIf()
+
+def emit_decode_parameters(typeInfo, api, cgen, globalWrapped=False):
+
+    decodingParams = DecodingParameters(api)
+
+    paramsToRead = decodingParams.toRead
+
+    for p in paramsToRead:
+        emit_param_decl_for_reading(p, cgen)
+
+    i = 0
+    for p in paramsToRead:
+        lenAccess =  cgen.generalLengthAccess(p)
+
+        if p.dispatchHandle:
+            emit_dispatch_unmarshal(typeInfo, p, cgen, globalWrapped)
+        else:
+            destroy = p.nonDispatchableHandleDestroy or p.dispatchableHandleDestroy
+            noUnbox = api.name == "vkQueueFlushCommandsGOOGLE" and p.paramName == "commandBuffer"
+
+            if p.nonDispatchableHandleDestroy or p.dispatchableHandleDestroy:
+                destroy = True
+                cgen.stmt("// Begin manual non dispatchable handle destroy unboxing for %s" % p.paramName)
+                if None == lenAccess or "1" == lenAccess:
+                    cgen.stmt("%s boxed_%s_preserve" % (p.typeName, p.paramName))
+                else:
+                    cgen.stmt("%s* boxed_%s_preserve; %s->alloc((void**)&boxed_%s_preserve, %s * sizeof(%s))" % (p.typeName, p.paramName, READ_STREAM, p.paramName, lenAccess, p.typeName))
+
+            if p.possiblyOutput():
+                cgen.stmt("// Begin manual dispatchable handle unboxing for %s" % p.paramName)
+                cgen.stmt("%s->unsetHandleMapping()" % READ_STREAM)
+
+            emit_unmarshal(typeInfo, p, cgen, output = p.possiblyOutput(), destroy = destroy, noUnbox = noUnbox)
+        i += 1
+
+    for p in paramsToRead:
+        emit_transform(typeInfo, p, cgen, variant="tohost");
+
+    emit_call_log(api, cgen)
+
+def emit_dispatch_call(api, cgen):
+
+    decodingParams = DecodingParameters(api)
+
+    customParams = []
+
+    delay = api.name in DELAYED_DECODER_DELETES
+
+    for (i, p) in enumerate(api.parameters):
+        customParam = p.paramName
+        if decodingParams.params[i].dispatchHandle:
+            customParam = "unboxed_%s" % p.paramName
+        customParams.append(customParam)
+
+    if delay:
+        cgen.line("std::function<void()> delayed_remove_callback = [vk, %s]() {" % ", ".join(customParams))
+
+    if api.name in driver_workarounds_global_lock_apis:
+        if delay:
+            cgen.stmt("auto state = VkDecoderGlobalState::get()")
+            cgen.stmt("// state already locked")
+        else:
+            cgen.stmt("m_state->lock()")
+
+    cgen.vkApiCall(api, customPrefix="vk->", customParameters=customParams)
+
+    if api.name in driver_workarounds_global_lock_apis:
+        if not delay:
+            cgen.stmt("m_state->unlock()")
+        # for delayed remove, state is already locked, so we do not need to
+        # unlock
+
+    if delay:
+        cgen.line("};")
+
+def emit_global_state_wrapped_call(api, cgen):
+    if api.name in DELAYED_DECODER_DELETES:
+        print("Error: Cannot generate a global state wrapped call that is also a delayed delete (yet)");
+        raise
+
+    customParams = ["&m_pool"] + list(map(lambda p: p.paramName, api.parameters))
+    cgen.vkApiCall(api, customPrefix="m_state->on_", \
+        customParameters=customParams)
+
+def emit_decode_parameters_writeback(typeInfo, api, cgen, autobox=True):
+    decodingParams = DecodingParameters(api)
+
+    paramsToWrite = decodingParams.toWrite
+
+    cgen.stmt("%s->unsetHandleMapping()" % WRITE_STREAM)
+
+    handleMapOverwrites = False
+
+    for p in paramsToWrite:
+        emit_transform(typeInfo, p, cgen, variant="fromhost")
+
+        handleMapOverwrites = False
+
+        if p.nonDispatchableHandleCreate or p.dispatchableHandleCreate:
+            handleMapOverwrites = True
+
+        if autobox and p.nonDispatchableHandleCreate:
+            cgen.stmt("// Begin auto non dispatchable handle create for %s" % p.paramName)
+            cgen.stmt("if (%s == VK_SUCCESS) %s->setHandleMapping(&m_boxedHandleCreateMapping)" % \
+                      (api.getRetVarExpr(), WRITE_STREAM))
+
+        if (not autobox) and p.nonDispatchableHandleCreate:
+            cgen.stmt("// Begin manual non dispatchable handle create for %s" % p.paramName)
+            cgen.stmt("%s->unsetHandleMapping()" % WRITE_STREAM)
+
+        emit_marshal(typeInfo, p, cgen, handleMapOverwrites=handleMapOverwrites)
+
+        if autobox and p.nonDispatchableHandleCreate:
+            cgen.stmt("// Begin auto non dispatchable handle create for %s" % p.paramName)
+            cgen.stmt("%s->setHandleMapping(&m_boxedHandleUnwrapMapping)" % WRITE_STREAM)
+
+        if (not autobox) and p.nonDispatchableHandleCreate:
+            cgen.stmt("// Begin manual non dispatchable handle create for %s" % p.paramName)
+            cgen.stmt("%s->setHandleMapping(&m_boxedHandleUnwrapMapping)" % WRITE_STREAM)
+
+def emit_decode_return_writeback(api, cgen):
+    retTypeName = api.getRetTypeExpr()
+    if retTypeName != "void":
+        retVar = api.getRetVarExpr()
+        cgen.stmt("%s->write(&%s, %s)" %
+            (WRITE_STREAM, retVar, cgen.sizeofExpr(api.retType)))
+
+def emit_decode_finish(api, cgen):
+    decodingParams = DecodingParameters(api)
+    retTypeName = api.getRetTypeExpr()
+    paramsToWrite = decodingParams.toWrite
+
+    if retTypeName != "void" or len(paramsToWrite) != 0:
+        cgen.stmt("%s->commitWrite()" % WRITE_STREAM)
+
+def emit_destroyed_handle_cleanup(api, cgen):
+    decodingParams = DecodingParameters(api)
+    paramsToRead = decodingParams.toRead
+
+    skipDelete = api.name in SKIPPED_DECODER_DELETES
+
+    if skipDelete:
+        cgen.line("// Skipping handle cleanup for %s" % api.name)
+        return
+
+    for p in paramsToRead:
+        if p.dispatchHandle:
+            pass
+        else:
+            lenAccess = cgen.generalLengthAccess(p)
+            lenAccessGuard = cgen.generalLengthAccess(p)
+            destroy = p.nonDispatchableHandleDestroy or p.dispatchableHandleDestroy
+            if destroy:
+                if None == lenAccess or "1" == lenAccess:
+                    if api.name in DELAYED_DECODER_DELETES:
+                        cgen.stmt("delayed_delete_%s(boxed_%s_preserve, unboxed_device, delayed_remove_callback)" % (p.typeName, p.paramName))
+                    else:
+                        cgen.stmt("delete_%s(boxed_%s_preserve)" % (p.typeName, p.paramName))
+                else:
+                    if lenAccessGuard is not None:
+                        cgen.beginIf(lenAccessGuard)
+                    cgen.beginFor("uint32_t i = 0", "i < %s" % lenAccess, "++i")
+                    if api.name in DELAYED_DECODER_DELETES:
+                        cgen.stmt("delayed_delete_%s(boxed_%s_preserve[i], unboxed_device, delayed_remove_callback)" % (p.typeName, p.paramName))
+                    else:
+                        cgen.stmt("delete_%s(boxed_%s_preserve[i])" % (p.typeName, p.paramName))
+                    cgen.endFor()
+                    if lenAccessGuard is not None:
+                        cgen.endIf()
+
+def emit_pool_free(cgen):
+    cgen.stmt("%s->clearPool()" % READ_STREAM)
+
+def emit_seqno_incr(api, cgen):
+    cgen.stmt("if (queueSubmitWithCommandsEnabled) __atomic_fetch_add(seqnoPtr, 1, __ATOMIC_SEQ_CST)")
+
+def emit_snapshot(typeInfo, api, cgen):
+
+    cgen.stmt("%s->setReadPos((uintptr_t)(*readStreamPtrPtr) - (uintptr_t)snapshotTraceBegin)" % READ_STREAM)
+    cgen.stmt("size_t snapshotTraceBytes = %s->endTrace()" % READ_STREAM)
+
+    additionalParams = [ \
+        makeVulkanTypeSimple(True, "uint8_t", 1, "snapshotTraceBegin"),
+        makeVulkanTypeSimple(False, "size_t", 0, "snapshotTraceBytes"),
+        makeVulkanTypeSimple(False, "android::base::BumpPool", 1, "&m_pool"),
+    ]
+
+    retTypeName = api.getRetTypeExpr()
+    if retTypeName != "void":
+        retVar = api.getRetVarExpr()
+        additionalParams.append(makeVulkanTypeSimple(False, retTypeName, 0, retVar))
+
+    paramsForSnapshot = []
+
+    decodingParams = DecodingParameters(api)
+
+    for p in decodingParams.toRead:
+        if p.nonDispatchableHandleDestroy or (not p.dispatchHandle and p.dispatchableHandleDestroy):
+            paramsForSnapshot.append(p.withModifiedName("boxed_%s_preserve" % p.paramName))
+        else:
+            paramsForSnapshot.append(p)
+
+    customParams = additionalParams + paramsForSnapshot
+
+    apiForSnapshot = \
+        api.withCustomReturnType(makeVulkanTypeSimple(False, "void", 0, "void")). \
+            withCustomParameters(customParams)
+
+    cgen.beginIf("m_state->snapshotsEnabled()")
+    cgen.vkApiCall(apiForSnapshot, customPrefix="m_state->snapshot()->")
+    cgen.endIf()
+
+def emit_default_decoding(typeInfo, api, cgen):
+    isAcquire = api.name in RELAXED_APIS
+    emit_decode_parameters(typeInfo, api, cgen)
+
+    if isAcquire:
+        emit_seqno_incr(api, cgen)
+
+    emit_dispatch_call(api, cgen)
+    emit_decode_parameters_writeback(typeInfo, api, cgen)
+    emit_decode_return_writeback(api, cgen)
+    emit_decode_finish(api, cgen)
+    emit_snapshot(typeInfo, api, cgen)
+    emit_destroyed_handle_cleanup(api, cgen)
+    emit_pool_free(cgen)
+
+    if not isAcquire:
+        emit_seqno_incr(api, cgen)
+
+def emit_global_state_wrapped_decoding(typeInfo, api, cgen):
+    isAcquire = api.name in RELAXED_APIS
+
+    emit_decode_parameters(typeInfo, api, cgen, globalWrapped=True)
+
+    if isAcquire:
+        emit_seqno_incr(api, cgen)
+
+    emit_global_state_wrapped_call(api, cgen)
+    emit_decode_parameters_writeback(typeInfo, api, cgen, autobox=False)
+    emit_decode_return_writeback(api, cgen)
+    emit_decode_finish(api, cgen)
+    emit_snapshot(typeInfo, api, cgen)
+    emit_destroyed_handle_cleanup(api, cgen)
+    emit_pool_free(cgen)
+    if not isAcquire:
+        emit_seqno_incr(api, cgen)
+
+## Custom decoding definitions##################################################
+def decode_vkFlushMappedMemoryRanges(typeInfo, api, cgen):
+    emit_decode_parameters(typeInfo, api, cgen)
+
+    cgen.beginIf("!m_state->usingDirectMapping()")
+    cgen.beginFor("uint32_t i = 0", "i < memoryRangeCount", "++i")
+    cgen.stmt("auto range = pMemoryRanges[i]")
+    cgen.stmt("auto memory = pMemoryRanges[i].memory")
+    cgen.stmt("auto size = pMemoryRanges[i].size")
+    cgen.stmt("auto offset = pMemoryRanges[i].offset")
+    cgen.stmt("uint64_t readStream = 0")
+    cgen.stmt("memcpy(&readStream, *readStreamPtrPtr, sizeof(uint64_t)); *readStreamPtrPtr += sizeof(uint64_t)")
+    cgen.stmt("auto hostPtr = m_state->getMappedHostPointer(memory)")
+    cgen.stmt("if (!hostPtr && readStream > 0) GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER))")
+    cgen.stmt("if (!hostPtr) continue")
+    cgen.stmt("uint8_t* targetRange = hostPtr + offset")
+    cgen.stmt("memcpy(targetRange, *readStreamPtrPtr, readStream); *readStreamPtrPtr += readStream")
+    cgen.endFor()
+    cgen.endIf()
+
+    emit_dispatch_call(api, cgen)
+    emit_decode_parameters_writeback(typeInfo, api, cgen)
+    emit_decode_return_writeback(api, cgen)
+    emit_decode_finish(api, cgen)
+    emit_snapshot(typeInfo, api, cgen);
+    emit_pool_free(cgen)
+    emit_seqno_incr(api, cgen)
+
+def decode_vkInvalidateMappedMemoryRanges(typeInfo, api, cgen):
+    emit_decode_parameters(typeInfo, api, cgen)
+    emit_dispatch_call(api, cgen)
+    emit_decode_parameters_writeback(typeInfo, api, cgen)
+    emit_decode_return_writeback(api, cgen)
+
+    cgen.beginIf("!m_state->usingDirectMapping()")
+    cgen.beginFor("uint32_t i = 0", "i < memoryRangeCount", "++i")
+    cgen.stmt("auto range = pMemoryRanges[i]")
+    cgen.stmt("auto memory = range.memory")
+    cgen.stmt("auto size = range.size")
+    cgen.stmt("auto offset = range.offset")
+    cgen.stmt("auto hostPtr = m_state->getMappedHostPointer(memory)")
+    cgen.stmt("auto actualSize = size == VK_WHOLE_SIZE ? m_state->getDeviceMemorySize(memory) : size")
+    cgen.stmt("uint64_t writeStream = 0")
+    cgen.stmt("if (!hostPtr) { %s->write(&writeStream, sizeof(uint64_t)); continue; }" % WRITE_STREAM)
+    cgen.stmt("uint8_t* targetRange = hostPtr + offset")
+    cgen.stmt("writeStream = actualSize")
+    cgen.stmt("%s->write(&writeStream, sizeof(uint64_t))" % WRITE_STREAM)
+    cgen.stmt("%s->write(targetRange, actualSize)" % WRITE_STREAM)
+    cgen.endFor()
+    cgen.endIf()
+
+    emit_decode_finish(api, cgen)
+    emit_snapshot(typeInfo, api, cgen);
+    emit_pool_free(cgen)
+    emit_seqno_incr(api, cgen)
+
+def decode_unsupported_api(typeInfo, api, cgen):
+    cgen.line(f"// Decoding {api.name} is not supported. This should not run.")
+    cgen.stmt(f"fprintf(stderr, \"stream %p: fatal: decoding unsupported API {api.name}\\n\", ioStream)");
+    cgen.stmt("__builtin_trap()")
+
+custom_decodes = {
+    "vkEnumerateInstanceVersion" : emit_global_state_wrapped_decoding,
+    "vkCreateInstance" : emit_global_state_wrapped_decoding,
+    "vkDestroyInstance" : emit_global_state_wrapped_decoding,
+    "vkEnumeratePhysicalDevices" : emit_global_state_wrapped_decoding,
+
+    "vkGetPhysicalDeviceFeatures" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceFeatures2" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceFeatures2KHR" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceFormatProperties" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceFormatProperties2" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceFormatProperties2KHR" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceImageFormatProperties" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceImageFormatProperties2" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceImageFormatProperties2KHR" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceProperties" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceProperties2" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceProperties2KHR" : emit_global_state_wrapped_decoding,
+
+    "vkGetPhysicalDeviceMemoryProperties" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceMemoryProperties2" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceMemoryProperties2KHR" : emit_global_state_wrapped_decoding,
+
+    "vkGetPhysicalDeviceExternalSemaphoreProperties" : emit_global_state_wrapped_decoding,
+    "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR" : emit_global_state_wrapped_decoding,
+
+    "vkEnumerateDeviceExtensionProperties" : emit_global_state_wrapped_decoding,
+
+    "vkCreateBuffer" : emit_global_state_wrapped_decoding,
+    "vkDestroyBuffer" : emit_global_state_wrapped_decoding,
+
+    "vkBindBufferMemory" : emit_global_state_wrapped_decoding,
+    "vkBindBufferMemory2" : emit_global_state_wrapped_decoding,
+    "vkBindBufferMemory2KHR" : emit_global_state_wrapped_decoding,
+
+    "vkCreateDevice" : emit_global_state_wrapped_decoding,
+    "vkGetDeviceQueue" : emit_global_state_wrapped_decoding,
+    "vkDestroyDevice" : emit_global_state_wrapped_decoding,
+
+    "vkBindImageMemory" : emit_global_state_wrapped_decoding,
+    "vkCreateImage" : emit_global_state_wrapped_decoding,
+    "vkCreateImageView" : emit_global_state_wrapped_decoding,
+    "vkCreateSampler" : emit_global_state_wrapped_decoding,
+    "vkDestroyImage" : emit_global_state_wrapped_decoding,
+    "vkDestroyImageView" : emit_global_state_wrapped_decoding,
+    "vkDestroySampler" : emit_global_state_wrapped_decoding,
+    "vkCmdCopyBufferToImage" : emit_global_state_wrapped_decoding,
+    "vkCmdCopyImage" : emit_global_state_wrapped_decoding,
+    "vkCmdCopyImageToBuffer" : emit_global_state_wrapped_decoding,
+    "vkGetImageMemoryRequirements" : emit_global_state_wrapped_decoding,
+    "vkGetImageMemoryRequirements2" : emit_global_state_wrapped_decoding,
+    "vkGetImageMemoryRequirements2KHR" : emit_global_state_wrapped_decoding,
+
+    "vkCreateDescriptorSetLayout" : emit_global_state_wrapped_decoding,
+    "vkDestroyDescriptorSetLayout" : emit_global_state_wrapped_decoding,
+    "vkCreateDescriptorPool" : emit_global_state_wrapped_decoding,
+    "vkDestroyDescriptorPool" : emit_global_state_wrapped_decoding,
+    "vkResetDescriptorPool" : emit_global_state_wrapped_decoding,
+    "vkAllocateDescriptorSets" : emit_global_state_wrapped_decoding,
+    "vkFreeDescriptorSets" : emit_global_state_wrapped_decoding,
+
+    "vkUpdateDescriptorSets" : emit_global_state_wrapped_decoding,
+
+    "vkAllocateMemory" : emit_global_state_wrapped_decoding,
+    "vkFreeMemory" : emit_global_state_wrapped_decoding,
+    "vkMapMemory" : emit_global_state_wrapped_decoding,
+    "vkUnmapMemory" : emit_global_state_wrapped_decoding,
+    "vkFlushMappedMemoryRanges" : decode_vkFlushMappedMemoryRanges,
+    "vkInvalidateMappedMemoryRanges" : decode_vkInvalidateMappedMemoryRanges,
+
+    "vkAllocateCommandBuffers" : emit_global_state_wrapped_decoding,
+    "vkCmdExecuteCommands" : emit_global_state_wrapped_decoding,
+    "vkQueueSubmit" : emit_global_state_wrapped_decoding,
+    "vkQueueWaitIdle" : emit_global_state_wrapped_decoding,
+    "vkBeginCommandBuffer" : emit_global_state_wrapped_decoding,
+    "vkResetCommandBuffer" : emit_global_state_wrapped_decoding,
+    "vkFreeCommandBuffers" : emit_global_state_wrapped_decoding,
+    "vkCreateCommandPool" : emit_global_state_wrapped_decoding,
+    "vkDestroyCommandPool" : emit_global_state_wrapped_decoding,
+    "vkResetCommandPool" : emit_global_state_wrapped_decoding,
+    "vkCmdPipelineBarrier" : emit_global_state_wrapped_decoding,
+    "vkCmdBindPipeline" : emit_global_state_wrapped_decoding,
+    "vkCmdBindDescriptorSets" : emit_global_state_wrapped_decoding,
+
+    "vkCreateRenderPass" : emit_global_state_wrapped_decoding,
+
+    # VK_ANDROID_native_buffer
+    "vkGetSwapchainGrallocUsageANDROID" : emit_global_state_wrapped_decoding,
+    "vkGetSwapchainGrallocUsage2ANDROID" : emit_global_state_wrapped_decoding,
+    "vkAcquireImageANDROID" : emit_global_state_wrapped_decoding,
+    "vkQueueSignalReleaseImageANDROID" : emit_global_state_wrapped_decoding,
+
+    "vkCreateSemaphore" : emit_global_state_wrapped_decoding,
+    "vkGetSemaphoreFdKHR" : emit_global_state_wrapped_decoding,
+    "vkImportSemaphoreFdKHR" : emit_global_state_wrapped_decoding,
+    "vkDestroySemaphore" : emit_global_state_wrapped_decoding,
+
+    "vkCreateFence" : emit_global_state_wrapped_decoding,
+    "vkResetFences" : emit_global_state_wrapped_decoding,
+    "vkDestroyFence" : emit_global_state_wrapped_decoding,
+
+    # VK_GOOGLE_gfxstream
+    "vkFreeMemorySyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkMapMemoryIntoAddressSpaceGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkGetMemoryHostAddressInfoGOOGLE" : emit_global_state_wrapped_decoding,
+
+    # VK_GOOGLE_color_buffer
+    "vkRegisterImageColorBufferGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkRegisterBufferColorBufferGOOGLE" : emit_global_state_wrapped_decoding,
+
+    # Descriptor update templates
+    "vkCreateDescriptorUpdateTemplate" : emit_global_state_wrapped_decoding,
+    "vkCreateDescriptorUpdateTemplateKHR" : emit_global_state_wrapped_decoding,
+    "vkDestroyDescriptorUpdateTemplate" : emit_global_state_wrapped_decoding,
+    "vkDestroyDescriptorUpdateTemplateKHR" : emit_global_state_wrapped_decoding,
+    "vkUpdateDescriptorSetWithTemplateSizedGOOGLE" : emit_global_state_wrapped_decoding,
+
+    # VK_GOOGLE_gfxstream
+    "vkBeginCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkEndCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkResetCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkCommandBufferHostSyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkCreateImageWithRequirementsGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkCreateBufferWithRequirementsGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkQueueHostSyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkQueueSubmitAsyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkQueueWaitIdleAsyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkQueueBindSparseAsyncGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkGetLinearImageLayoutGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkQueueFlushCommandsGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkQueueCommitDescriptorSetUpdatesGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkCollectDescriptorPoolIdsGOOGLE" : emit_global_state_wrapped_decoding,
+    "vkQueueSignalReleaseImageANDROIDAsyncGOOGLE" : emit_global_state_wrapped_decoding,
+
+    "vkQueueBindSparse" : emit_global_state_wrapped_decoding,
+
+    # VK_KHR_xcb_surface
+    "vkCreateXcbSurfaceKHR": decode_unsupported_api,
+    "vkGetPhysicalDeviceXcbPresentationSupportKHR": decode_unsupported_api,
+
+    # VK_EXT_metal_surface
+    "vkCreateMetalSurfaceEXT": decode_unsupported_api,
+}
+
+class VulkanDecoder(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+        self.typeInfo = typeInfo
+        self.cgen = CodeGen()
+
+    def onBegin(self,):
+        self.module.appendHeader(decoder_decl_preamble)
+        self.module.appendImpl(decoder_impl_preamble)
+
+        self.module.appendImpl(
+            "size_t VkDecoder::Impl::decode(void* buf, size_t len, IOStream* ioStream, uint32_t* seqnoPtr)\n")
+
+        self.cgen.beginBlock() # function body
+
+        self.cgen.stmt("if (len < 8) return 0;")
+        self.cgen.stmt("bool queueSubmitWithCommandsEnabled = emugl::emugl_feature_is_enabled(android::featurecontrol::VulkanQueueSubmitWithCommands)")
+        self.cgen.stmt("unsigned char *ptr = (unsigned char *)buf")
+        self.cgen.stmt("const unsigned char* const end = (const unsigned char*)buf + len")
+
+        self.cgen.beginIf("m_forSnapshotLoad")
+        self.cgen.stmt("ptr += m_state->setCreatedHandlesForSnapshotLoad(ptr)");
+        self.cgen.endIf()
+
+        self.cgen.line("while (end - ptr >= 8)")
+        self.cgen.beginBlock() # while loop
+
+        self.cgen.stmt("uint32_t opcode = *(uint32_t *)ptr")
+        self.cgen.stmt("int32_t packetLen = *(int32_t *)(ptr + 4)")
+        self.cgen.stmt("if (end - ptr < packetLen) return ptr - (unsigned char*)buf")
+
+        self.cgen.stmt("stream()->setStream(ioStream)")
+        self.cgen.stmt("VulkanStream* %s = stream()" % WRITE_STREAM)
+        self.cgen.stmt("VulkanMemReadingStream* %s = readStream()" % READ_STREAM)
+        self.cgen.stmt("%s->setBuf((uint8_t*)(ptr + 8))" % READ_STREAM)
+        self.cgen.stmt("uint8_t* readStreamPtr = %s->getBuf(); uint8_t** readStreamPtrPtr = &readStreamPtr" % READ_STREAM)
+        self.cgen.stmt("uint8_t* snapshotTraceBegin = %s->beginTrace()" % READ_STREAM)
+        self.cgen.stmt("%s->setHandleMapping(&m_boxedHandleUnwrapMapping)" % READ_STREAM)
+        self.cgen.line("""
+        if (queueSubmitWithCommandsEnabled && ((opcode >= OP_vkFirst && opcode < OP_vkLast) || (opcode >= OP_vkFirst_old && opcode < OP_vkLast_old))) {
+            uint32_t seqno; memcpy(&seqno, *readStreamPtrPtr, sizeof(uint32_t)); *readStreamPtrPtr += sizeof(uint32_t);
+            if (seqnoPtr && !m_forSnapshotLoad) {
+                while (!m_threadTeardown && (seqno - __atomic_load_n(seqnoPtr, __ATOMIC_SEQ_CST) != 1));
+            }
+        }
+        """)
+        self.cgen.stmt("auto vk = m_vk")
+
+        self.cgen.line("switch (opcode)")
+        self.cgen.beginBlock() # switch stmt
+
+        self.module.appendImpl(self.cgen.swapCode())
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        typeInfo = self.typeInfo
+        cgen = self.cgen
+        api = typeInfo.apis[name]
+
+        cgen.line("case OP_%s:" % name)
+        cgen.beginBlock()
+        cgen.stmt("android::base::beginTrace(\"%s decode\")" % name)
+
+        if api.name in custom_decodes.keys():
+            custom_decodes[api.name](typeInfo, api, cgen)
+        else:
+            emit_default_decoding(typeInfo, api, cgen)
+
+        cgen.stmt("android::base::endTrace()")
+        cgen.stmt("break")
+        cgen.endBlock()
+        self.module.appendImpl(self.cgen.swapCode())
+
+    def onEnd(self,):
+        self.cgen.line("default:")
+        self.cgen.beginBlock()
+        self.cgen.stmt("m_pool.freeAll()")
+        self.cgen.stmt("return ptr - (unsigned char *)buf")
+        self.cgen.endBlock()
+
+        self.cgen.endBlock() # switch stmt
+
+        self.cgen.stmt("ptr += packetLen")
+        self.cgen.endBlock() # while loop
+
+        self.cgen.beginIf("m_forSnapshotLoad")
+        self.cgen.stmt("m_state->clearCreatedHandlesForSnapshotLoad()");
+        self.cgen.endIf()
+
+        self.cgen.stmt("m_pool.freeAll()")
+        self.cgen.stmt("return ptr - (unsigned char*)buf;")
+        self.cgen.endBlock() # function body
+        self.module.appendImpl(self.cgen.swapCode())
diff --git a/registry/vulkan/scripts/cereal/decodersnapshot.py b/registry/vulkan/scripts/cereal/decodersnapshot.py
new file mode 100644
index 0000000..fa38e57
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/decodersnapshot.py
@@ -0,0 +1,262 @@
+from .common.codegen import CodeGen, VulkanWrapperGenerator, VulkanAPIWrapper
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, DISPATCHABLE_HANDLE_TYPES, NON_DISPATCHABLE_HANDLE_TYPES
+
+from .transform import TransformCodegen, genTransformsForVulkanType
+
+from .wrapperdefs import API_PREFIX_MARSHAL
+from .wrapperdefs import API_PREFIX_UNMARSHAL
+from .wrapperdefs import VULKAN_STREAM_TYPE
+
+from copy import copy
+
+decoder_snapshot_decl_preamble = """
+
+namespace android {
+namespace base {
+class BumpPool;
+class Stream;
+} // namespace base {
+} // namespace android {
+
+class VkDecoderSnapshot {
+public:
+    VkDecoderSnapshot();
+    ~VkDecoderSnapshot();
+
+    void save(android::base::Stream* stream);
+    void load(android::base::Stream* stream);
+"""
+
+decoder_snapshot_decl_postamble = """
+private:
+    class Impl;
+    std::unique_ptr<Impl> mImpl;
+
+};
+"""
+
+decoder_snapshot_impl_preamble ="""
+
+using namespace goldfish_vk;
+
+class VkDecoderSnapshot::Impl {
+public:
+    Impl() { }
+
+    void save(android::base::Stream* stream) {
+        mReconstruction.save(stream);
+    }
+
+    void load(android::base::Stream* stream) {
+        mReconstruction.load(stream);
+    }
+
+"""
+
+decoder_snapshot_impl_postamble = """
+private:
+    android::base::Lock mLock;
+    VkReconstruction mReconstruction;
+};
+
+VkDecoderSnapshot::VkDecoderSnapshot() :
+    mImpl(new VkDecoderSnapshot::Impl()) { }
+
+void VkDecoderSnapshot::save(android::base::Stream* stream) {
+    mImpl->save(stream);
+}
+
+void VkDecoderSnapshot::load(android::base::Stream* stream) {
+    mImpl->load(stream);
+}
+
+VkDecoderSnapshot::~VkDecoderSnapshot() = default;
+"""
+
+AUXILIARY_SNAPSHOT_API_BASE_PARAM_COUNT = 3
+
+AUXILIARY_SNAPSHOT_API_PARAM_NAMES = [
+    "input_result",
+]
+
+# Vulkan handle dependencies.
+# (a, b): a depends on b
+SNAPSHOT_HANDLE_DEPENDENCIES = [
+    # Dispatchable handle types
+    ("VkCommandBuffer", "VkCommandPool"),
+    ("VkCommandPool", "VkDevice"),
+    ("VkQueue", "VkDevice"),
+    ("VkDevice", "VkPhysicalDevice"),
+    ("VkPhysicalDevice", "VkInstance")] + \
+    list(map(lambda handleType : (handleType, "VkDevice"), NON_DISPATCHABLE_HANDLE_TYPES))
+
+handleDependenciesDict = dict(SNAPSHOT_HANDLE_DEPENDENCIES)
+
+def extract_deps_vkAllocateCommandBuffers(param, access, lenExpr, api, cgen):
+    cgen.stmt("mReconstruction.addHandleDependency((const uint64_t*)%s, %s, (uint64_t)(uintptr_t)%s)" % \
+              (access, lenExpr, "unboxed_to_boxed_non_dispatchable_VkCommandPool(pAllocateInfo->commandPool)"))
+
+specialCaseDependencyExtractors = {
+    "vkAllocateCommandBuffers" : extract_deps_vkAllocateCommandBuffers,
+}
+
+apiSequences = {
+    "vkAllocateMemory" : ["vkAllocateMemory", "vkMapMemoryIntoAddressSpaceGOOGLE"]
+}
+
+apiModifies = {
+    "vkMapMemoryIntoAddressSpaceGOOGLE" : ["memory"],
+}
+
+def is_modify_operation(api, param):
+    if api.name in apiModifies:
+        if param.paramName in apiModifies[api.name]:
+            return True
+    return False
+
+def emit_impl(typeInfo, api, cgen):
+
+    cgen.line("// TODO: Implement")
+
+    for p in api.parameters:
+        if not (p.isHandleType):
+            continue
+
+        lenExpr = cgen.generalLengthAccess(p)
+        lenAccessGuard = cgen.generalLengthAccessGuard(p)
+
+        if lenExpr is None:
+            lenExpr = "1"
+
+        if p.pointerIndirectionLevels > 0:
+            access = p.paramName
+        else:
+            access = "(&%s)" % p.paramName
+
+        if p.isCreatedBy(api):
+            cgen.stmt("android::base::AutoLock lock(mLock)")
+            cgen.line("// %s create" % p.paramName)
+            cgen.stmt("mReconstruction.addHandles((const uint64_t*)%s, %s)" % (access, lenExpr));
+
+            if p.typeName in handleDependenciesDict:
+                dependsOnType = handleDependenciesDict[p.typeName];
+                for p2 in api.parameters:
+                    if p2.typeName == dependsOnType:
+                        cgen.stmt("mReconstruction.addHandleDependency((const uint64_t*)%s, %s, (uint64_t)(uintptr_t)%s)" % (access, lenExpr, p2.paramName))
+                if api.name in specialCaseDependencyExtractors:
+                    specialCaseDependencyExtractors[api.name](p, access, lenExpr, api, cgen)
+
+            cgen.stmt("if (!%s) return" % access)
+            cgen.stmt("auto apiHandle = mReconstruction.createApiInfo()")
+            cgen.stmt("auto apiInfo = mReconstruction.getApiInfo(apiHandle)")
+            cgen.stmt("mReconstruction.setApiTrace(apiInfo, OP_%s, snapshotTraceBegin, snapshotTraceBytes)" % api.name)
+            if lenAccessGuard is not None:
+                cgen.beginIf(lenAccessGuard)
+            cgen.stmt("mReconstruction.forEachHandleAddApi((const uint64_t*)%s, %s, apiHandle)" % (access, lenExpr))
+            cgen.stmt("mReconstruction.setCreatedHandlesForApi(apiHandle, (const uint64_t*)%s, %s)" % (access, lenExpr))
+            if lenAccessGuard is not None:
+                cgen.endIf()
+
+        if p.isDestroyedBy(api):
+            cgen.stmt("android::base::AutoLock lock(mLock)")
+            cgen.line("// %s destroy" % p.paramName)
+            if lenAccessGuard is not None:
+                cgen.beginIf(lenAccessGuard)
+            cgen.stmt("mReconstruction.removeHandles((const uint64_t*)%s, %s)" % (access, lenExpr));
+            if lenAccessGuard is not None:
+                cgen.endIf()
+
+        if is_modify_operation(api, p):
+            cgen.stmt("android::base::AutoLock lock(mLock)")
+            cgen.line("// %s modify" % p.paramName)
+            cgen.stmt("auto apiHandle = mReconstruction.createApiInfo()")
+            cgen.stmt("auto apiInfo = mReconstruction.getApiInfo(apiHandle)")
+            cgen.stmt("mReconstruction.setApiTrace(apiInfo, OP_%s, snapshotTraceBegin, snapshotTraceBytes)" % api.name)
+            if lenAccessGuard is not None:
+                cgen.beginIf(lenAccessGuard)
+            cgen.beginFor("uint32_t i = 0", "i < %s" % lenExpr, "++i")
+            if p.isNonDispatchableHandleType():
+                cgen.stmt("%s boxed = unboxed_to_boxed_non_dispatchable_%s(%s[i])" % (p.typeName, p.typeName, access))
+            else:
+                cgen.stmt("%s boxed = unboxed_to_boxed_%s(%s[i])" % (p.typeName, p.typeName, access))
+            cgen.stmt("mReconstruction.forEachHandleAddModifyApi((const uint64_t*)(&boxed), 1, apiHandle)")
+            cgen.endFor()
+            if lenAccessGuard is not None:
+                cgen.endIf()
+
+def emit_passthrough_to_impl(typeInfo, api, cgen):
+    cgen.vkApiCall(api, customPrefix = "mImpl->")
+
+class VulkanDecoderSnapshot(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.typeInfo = typeInfo
+
+        self.cgenHeader = CodeGen()
+        self.cgenHeader.incrIndent()
+
+        self.cgenImpl = CodeGen()
+
+        self.currentFeature = None
+
+        self.feature_apis = []
+
+    def onBegin(self,):
+        self.module.appendHeader(decoder_snapshot_decl_preamble)
+        self.module.appendImpl(decoder_snapshot_impl_preamble)
+
+    def onBeginFeature(self, featureName):
+        VulkanWrapperGenerator.onBeginFeature(self, featureName)
+        self.currentFeature = featureName
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+        api = self.typeInfo.apis[name]
+
+        additionalParams = [ \
+            makeVulkanTypeSimple(True, "uint8_t", 1, "snapshotTraceBegin"),
+            makeVulkanTypeSimple(False, "size_t", 0, "snapshotTraceBytes"),
+            makeVulkanTypeSimple(False, "android::base::BumpPool", 1, "pool"),]
+
+        if api.retType.typeName != "void":
+            additionalParams.append( \
+                makeVulkanTypeSimple(False, api.retType.typeName, 0, "input_result"))
+
+        apiForSnapshot = \
+            api.withCustomParameters( \
+                additionalParams + \
+                api.parameters).withCustomReturnType( \
+                    makeVulkanTypeSimple(False, "void", 0, "void"))
+
+        self.feature_apis.append((self.currentFeature, apiForSnapshot))
+
+        self.cgenHeader.stmt(self.cgenHeader.makeFuncProto(apiForSnapshot))
+        self.module.appendHeader(self.cgenHeader.swapCode())
+
+        self.cgenImpl.emitFuncImpl( \
+            apiForSnapshot, lambda cgen: emit_impl(self.typeInfo, apiForSnapshot, cgen))
+        self.module.appendImpl(self.cgenImpl.swapCode())
+
+    def onEnd(self,):
+        self.module.appendHeader(decoder_snapshot_decl_postamble)
+        self.module.appendImpl(decoder_snapshot_impl_postamble)
+        self.cgenHeader.decrIndent()
+
+        for feature, api in self.feature_apis:
+            if feature is not None:
+                self.cgenImpl.line("#ifdef %s" % feature)
+
+            apiImplShell = \
+                api.withModifiedName("VkDecoderSnapshot::" + api.name)
+
+            self.cgenImpl.emitFuncImpl( \
+                apiImplShell, lambda cgen: emit_passthrough_to_impl(self.typeInfo, api, cgen))
+
+            if feature is not None:
+                self.cgenImpl.line("#endif")
+
+        self.module.appendImpl(self.cgenImpl.swapCode())
+
diff --git a/registry/vulkan/scripts/cereal/deepcopy.py b/registry/vulkan/scripts/cereal/deepcopy.py
new file mode 100644
index 0000000..52842e9
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/deepcopy.py
@@ -0,0 +1,383 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .common.codegen import CodeGen
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, VulkanTypeIterator
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import STRUCT_EXTENSION_PARAM, STRUCT_EXTENSION_PARAM_FOR_WRITE, EXTENSION_SIZE_API_NAME
+
+class DeepcopyCodegen(VulkanTypeIterator):
+    def __init__(self, cgen, inputVars, poolVarName, rootVarName, prefix, skipValues=False):
+        self.cgen = cgen
+        self.inputVars = inputVars
+        self.prefix = prefix
+        self.poolVarName = poolVarName
+        self.rootVarName = rootVarName
+        self.skipValues = skipValues
+
+        def makeAccess(varName, asPtr = True):
+            return lambda t: self.cgen.generalAccess(t, parentVarName = varName, asPtr = asPtr)
+
+        def makeLengthAccess(varName):
+            return lambda t: self.cgen.generalLengthAccess(t, parentVarName = varName)
+
+        def makeLengthAccessGuard(varName):
+            return lambda t: self.cgen.generalLengthAccessGuard(t, parentVarName=varName)
+
+        self.exprAccessorLhs = makeAccess(self.inputVars[0])
+        self.exprAccessorRhs = makeAccess(self.inputVars[1])
+
+        self.exprAccessorValueLhs = makeAccess(self.inputVars[0], asPtr = False)
+        self.exprAccessorValueRhs = makeAccess(self.inputVars[1], asPtr = False)
+
+        self.lenAccessorLhs = makeLengthAccess(self.inputVars[0])
+        self.lenAccessorRhs = makeLengthAccess(self.inputVars[1])
+
+        self.lenAccessorGuardLhs = makeLengthAccessGuard(self.inputVars[0])
+        self.lenAccessorGuardRhs = makeLengthAccessGuard(self.inputVars[1])
+
+        self.checked = False
+
+    def needSkip(self, vulkanType):
+        return False
+
+    def makeCastExpr(self, vulkanType):
+        return "(%s)" % (
+            self.cgen.makeCTypeDecl(vulkanType, useParamName=False))
+
+    def makeNonConstCastForCopy(self, access, vulkanType):
+        if vulkanType.staticArrExpr:
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForAddressAccess().getForNonConstAccess()), access)
+        elif vulkanType.accessibleAsPointer():
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForNonConstAccess()), access)
+        else:
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForAddressAccess().getForNonConstAccess()), access)
+        return casted
+
+    def makeAllocBytesExpr(self, lenAccess, vulkanType):
+        sizeof = self.cgen.sizeofExpr( \
+                     vulkanType.getForValueAccess())
+        if lenAccess:
+            bytesExpr = "%s * %s" % (lenAccess, sizeof)
+        else:
+            bytesExpr = sizeof
+
+        return bytesExpr
+
+    def onCheck(self, vulkanType):
+        pass
+
+    def endCheck(self, vulkanType):
+        pass
+
+    def onCompoundType(self, vulkanType):
+
+        if self.needSkip(vulkanType):
+            self.cgen.line("// TODO: Unsupported : %s" %
+                           self.cgen.makeCTypeDecl(vulkanType))
+            return
+
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        lenAccessLhs = self.lenAccessorLhs(vulkanType)
+        lenAccessRhs = self.lenAccessorRhs(vulkanType)
+
+        lenAccessorGuardLhs = self.lenAccessorGuardLhs(vulkanType)
+        lenAccessorGuardRhs = self.lenAccessorGuardRhs(vulkanType)
+
+        isPtr = vulkanType.pointerIndirectionLevels > 0
+
+        if lenAccessorGuardLhs is not None:
+            self.cgen.beginIf(lenAccessorGuardLhs)
+
+        if isPtr:
+            self.cgen.stmt("%s = nullptr" % accessRhs)
+            self.cgen.beginIf(accessLhs)
+
+            self.cgen.stmt( \
+                "%s = %s%s->alloc(%s)" % \
+                (accessRhs, self.makeCastExpr(vulkanType.getForNonConstAccess()),
+                 self.poolVarName, self.makeAllocBytesExpr(lenAccessLhs, vulkanType)))
+
+        if lenAccessLhs is not None:
+
+            loopVar = "i"
+            accessLhs = "%s + %s" % (accessLhs, loopVar)
+            forInit = "uint32_t %s = 0" % loopVar
+            forCond = "%s < (uint32_t)%s" % (loopVar, lenAccessLhs)
+            forIncr = "++%s" % loopVar
+
+            if isPtr:
+                # Avoid generating a self-assign.
+                if lenAccessRhs != lenAccessLhs:
+                    self.cgen.stmt("%s = %s" % (lenAccessRhs, lenAccessLhs))
+
+            accessRhs = "%s + %s" % (accessRhs, loopVar)
+            self.cgen.beginFor(forInit, forCond, forIncr)
+
+
+        accessRhsCasted = self.makeNonConstCastForCopy(accessRhs, vulkanType)
+
+        self.cgen.funcCall(None, self.prefix + vulkanType.typeName,
+                           [self.poolVarName, self.rootVarName, accessLhs, accessRhsCasted])
+
+        if lenAccessLhs is not None:
+            self.cgen.endFor()
+
+        if isPtr:
+            self.cgen.endIf()
+
+        if lenAccessorGuardLhs is not None:
+            self.cgen.endIf()
+
+    def onString(self, vulkanType):
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        self.cgen.stmt("%s = nullptr" % accessRhs)
+        self.cgen.beginIf(accessLhs)
+
+        self.cgen.stmt( \
+            "%s = %s->strDup(%s)" % \
+            (accessRhs,
+             self.poolVarName,
+             accessLhs))
+
+        self.cgen.endIf()
+
+    def onStringArray(self, vulkanType):
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        lenAccessLhs = self.lenAccessorLhs(vulkanType)
+
+        self.cgen.stmt("%s = nullptr" % accessRhs)
+        self.cgen.beginIf("%s && %s" % (accessLhs, lenAccessLhs))
+
+        self.cgen.stmt( \
+            "%s = %s->strDupArray(%s, %s)" % \
+            (accessRhs,
+             self.poolVarName,
+             accessLhs,
+             lenAccessLhs))
+
+        self.cgen.endIf()
+
+    def onStaticArr(self, vulkanType):
+        accessLhs = self.exprAccessorValueLhs(vulkanType)
+        accessRhs = self.exprAccessorValueRhs(vulkanType)
+
+        lenAccessLhs = self.lenAccessorLhs(vulkanType)
+
+        bytesExpr = self.makeAllocBytesExpr(lenAccessLhs, vulkanType)
+        self.cgen.stmt("memcpy(%s, %s, %s)" % (accessRhs, accessLhs, bytesExpr))
+
+    def onStructExtension(self, vulkanType):
+
+        lhs = self.exprAccessorLhs(vulkanType)
+        rhs = self.exprAccessorRhs(vulkanType)
+
+        rhsExpr = "(%s)(%s)" % ("void*", rhs)
+
+        nextVar = "from_%s" % vulkanType.paramName
+        sizeVar = "%s_size" % vulkanType.paramName
+
+        self.cgen.beginIf("%s == VK_STRUCTURE_TYPE_MAX_ENUM" %
+                          self.rootVarName)
+        self.cgen.stmt("%s = from->sType" % self.rootVarName)
+        self.cgen.endIf()
+
+        self.cgen.stmt("const void* %s = %s" % (nextVar, self.inputVars[0]))
+        self.cgen.stmt("size_t %s = 0u" % sizeVar)
+        self.cgen.beginWhile("!%s && %s" % (sizeVar, nextVar))
+        self.cgen.stmt("%s = static_cast<const vk_struct_common*>(%s)->%s" % (
+            nextVar, nextVar, vulkanType.paramName
+        ))
+        self.cgen.stmt("%s = %s(%s, %s)" % (
+            sizeVar, EXTENSION_SIZE_API_NAME, self.rootVarName, nextVar))
+        self.cgen.endWhile()
+        
+        self.cgen.stmt("%s = nullptr" % rhs)
+
+        self.cgen.beginIf(sizeVar)
+
+        self.cgen.stmt( \
+            "%s = %s%s->alloc(%s)" % \
+            (rhs, self.makeCastExpr(vulkanType.getForNonConstAccess()), self.poolVarName, sizeVar))
+
+        self.cgen.funcCall(None, self.prefix + "extension_struct",
+                           [self.poolVarName, self.rootVarName, nextVar, rhsExpr])
+
+        self.cgen.endIf()
+
+    def onPointer(self, vulkanType):
+
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        if self.needSkip(vulkanType):
+            self.cgen.stmt("%s = nullptr" % accessRhs)
+            return
+
+        lenAccessLhs = self.lenAccessorLhs(vulkanType)
+
+        self.cgen.stmt("%s = nullptr" % accessRhs)
+        self.cgen.beginIf(accessLhs)
+
+        bytesExpr = self.makeAllocBytesExpr(lenAccessLhs, vulkanType)
+
+        self.cgen.stmt( \
+            "%s = %s%s->dupArray(%s, %s)" % \
+            (accessRhs,
+             self.makeCastExpr(vulkanType.getForNonConstAccess()),
+             self.poolVarName,
+             accessLhs,
+             bytesExpr))
+
+        self.cgen.endIf()
+
+    def onValue(self, vulkanType):
+        if self.skipValues:
+            return
+
+        accessLhs = self.exprAccessorValueLhs(vulkanType)
+        accessRhs = self.exprAccessorValueRhs(vulkanType)
+
+        self.cgen.stmt("%s = %s" % (accessRhs, accessLhs))
+
+class VulkanDeepcopy(VulkanWrapperGenerator):
+
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.codegen = CodeGen()
+
+        self.deepcopyPrefix = "deepcopy_"
+        self.deepcopyVars = ["from", "to"]
+        self.deepcopyAllocatorVarName = "alloc"
+        self.deepcopyAllocatorParam = \
+            makeVulkanTypeSimple(False, "Allocator", 1,
+                                 self.deepcopyAllocatorVarName)
+        self.deepcopyRootVarName = "rootType"
+        self.deepcopyRootParam = \
+            makeVulkanTypeSimple(False, "VkStructureType",
+                                 0, self.deepcopyRootVarName)
+        self.voidType = makeVulkanTypeSimple(False, "void", 0)
+
+        self.deepcopyCodegen = \
+            DeepcopyCodegen(
+                None,
+                self.deepcopyVars,
+                self.deepcopyAllocatorVarName,
+                self.deepcopyRootVarName,
+                self.deepcopyPrefix,
+                skipValues=True)
+
+        self.knownDefs = {}
+
+        self.extensionDeepcopyPrototype = \
+            VulkanAPI(self.deepcopyPrefix + "extension_struct",
+                      self.voidType,
+                      [self.deepcopyAllocatorParam,
+                       self.deepcopyRootParam,
+                       STRUCT_EXTENSION_PARAM,
+                       STRUCT_EXTENSION_PARAM_FOR_WRITE])
+
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+        self.module.appendImpl(self.codegen.makeFuncDecl(
+            self.extensionDeepcopyPrototype))
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+        if name in self.knownDefs:
+            return
+
+        category = self.typeInfo.categoryOf(name)
+
+        if category in ["struct", "union"] and alias:
+            self.module.appendHeader(
+                self.codegen.makeFuncAlias(self.deepcopyPrefix + name,
+                                           self.deepcopyPrefix + alias))
+
+        if category in ["struct", "union"] and not alias:
+
+            structInfo = self.typeInfo.structs[name]
+
+            typeFromName = \
+                lambda varname: \
+                    makeVulkanTypeSimple(varname == "from", name, 1, varname)
+
+            deepcopyParams = \
+                [self.deepcopyAllocatorParam, self.deepcopyRootParam] + \
+                 list(map(typeFromName, self.deepcopyVars))
+
+            deepcopyPrototype = \
+                VulkanAPI(self.deepcopyPrefix + name,
+                          self.voidType,
+                          deepcopyParams)
+
+            def structDeepcopyDef(cgen):
+                self.deepcopyCodegen.cgen = cgen
+                canSimplyAssign = True
+                for member in structInfo.members:
+                    if not member.isSimpleValueType(self.typeInfo):
+                        canSimplyAssign = False
+
+                cgen.stmt("(void)%s" % self.deepcopyAllocatorVarName)
+                cgen.stmt("(void)%s" % self.deepcopyRootVarName)
+                cgen.stmt("*to = *from")
+                if canSimplyAssign:
+                    pass
+                else:
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member,
+                                          self.deepcopyCodegen)
+
+            self.module.appendHeader(
+                self.codegen.makeFuncDecl(deepcopyPrototype))
+            self.module.appendImpl(
+                self.codegen.makeFuncImpl(deepcopyPrototype, structDeepcopyDef))
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
+
+        def deepcopyDstExpr(cgen, typeName):
+            return cgen.makeReinterpretCast( \
+                       STRUCT_EXTENSION_PARAM_FOR_WRITE.paramName,
+                       typeName, const=False)
+
+        def forEachExtensionDeepcopy(ext, castedAccess, cgen):
+            cgen.funcCall(None, self.deepcopyPrefix + ext.name,
+                          [self.deepcopyAllocatorVarName,
+                           self.deepcopyRootVarName,
+                           castedAccess, deepcopyDstExpr(cgen, ext.name)])
+
+        self.module.appendImpl(
+            self.codegen.makeFuncImpl(
+                self.extensionDeepcopyPrototype,
+                lambda cgen: self.emitForEachStructExtension(
+                    cgen,
+                    self.voidType,
+                    STRUCT_EXTENSION_PARAM,
+                    forEachExtensionDeepcopy,
+                    rootTypeVar=self.deepcopyRootParam)))
diff --git a/registry/vulkan/scripts/cereal/dispatch.py b/registry/vulkan/scripts/cereal/dispatch.py
new file mode 100644
index 0000000..1f65834
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/dispatch.py
@@ -0,0 +1,499 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .common.codegen import CodeGen
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType
+
+from .wrapperdefs import VulkanWrapperGenerator
+
+# No real good way to automatically infer the most important Vulkan API
+# functions as it relates to which getProcAddress function to use, plus
+# we might want to control which function to use depending on our
+# performance needs.
+
+# This is based on the minimum set of functions needed to be directly
+# queried with dlsym and not returning null.
+getProcAddrFuncs = [
+    "vkGetInstanceProcAddr",
+    "vkDestroyInstance",
+    "vkEnumeratePhysicalDevices",
+    "vkGetPhysicalDeviceFeatures",
+    "vkGetPhysicalDeviceFormatProperties",
+    "vkGetPhysicalDeviceImageFormatProperties",
+    "vkGetPhysicalDeviceProperties",
+    "vkGetPhysicalDeviceQueueFamilyProperties",
+    "vkGetPhysicalDeviceMemoryProperties",
+    "vkCreateDevice",
+    "vkDestroyDevice",
+    "vkEnumerateDeviceExtensionProperties",
+    "vkEnumerateDeviceLayerProperties",
+]
+
+# Some methods can only be found using dlsym() while we cannot get the function
+# address using vkGetInstProcAddr() or vkGetDeviceProcAddr(). These function
+# pointers should only be initialized when setting up the dispatch from system
+# loader.
+getProcAddrOnlyFuncs = [
+    "vkGetMTLDeviceMVK",
+    "vkSetMTLTextureMVK",
+    "vkGetMTLTextureMVK",
+    "vkGetMTLBufferMVK",
+    "vkUseIOSurfaceMVK",
+    "vkGetIOSurfaceMVK",
+]
+
+getInstanceProcAddrNoInstanceFuncs = [
+    "vkCreateInstance",
+    "vkEnumerateInstanceExtensionProperties",
+    "vkEnumerateInstanceLayerProperties",
+]
+
+getInstanceProcAddrFuncs = [
+    "vkGetDeviceProcAddr",
+    "vkCreateSwapchainKHR",
+    "vkDestroySwapchainKHR",
+    "vkGetSwapchainImagesKHR",
+    "vkAcquireNextImageKHR",
+    "vkQueuePresentKHR",
+    "vkCreateMacOSSurfaceMVK",
+    "vkCreateWin32SurfaceKHR",
+    "vkGetPhysicalDeviceWin32PresentationSupportKHR",
+    "vkCreateXlibSurfaceKHR",
+    "vkGetPhysicalDeviceXlibPresentationSupportKHR",
+    "vkCreateXcbSurfaceKHR",
+    "vkGetPhysicalDeviceXcbPresentationSupportKHR",
+    "vkGetPhysicalDeviceSparseImageFormatProperties",
+    "vkEnumerateInstanceVersion",
+    "vkEnumeratePhysicalDeviceGroups",
+    "vkGetPhysicalDeviceFeatures2",
+    "vkGetPhysicalDeviceProperties2",
+    "vkGetPhysicalDeviceFormatProperties2",
+    "vkGetPhysicalDeviceImageFormatProperties2",
+    "vkGetPhysicalDeviceQueueFamilyProperties2",
+    "vkGetPhysicalDeviceMemoryProperties2",
+    "vkGetPhysicalDeviceSparseImageFormatProperties2",
+    "vkGetPhysicalDeviceExternalBufferProperties",
+    "vkGetPhysicalDeviceExternalFenceProperties",
+    "vkGetPhysicalDeviceExternalSemaphoreProperties",
+]
+
+# Implicitly, everything else is going to be obtained
+# with vkGetDeviceProcAddr,
+# unless it has instance in the arg.
+
+def isGetProcAddressAPI(vulkanApi):
+    return vulkanApi.name in getProcAddrFuncs
+
+def isGetProcAddressOnlyAPI(vulkanApi):
+    return vulkanApi.name in getProcAddrOnlyFuncs
+
+def isGetInstanceProcAddressNoInstanceAPI(vulkanApi):
+    return vulkanApi.name in getInstanceProcAddrNoInstanceFuncs
+
+def isGetInstanceProcAddressAPI(vulkanApi):
+    if vulkanApi.name in getInstanceProcAddrFuncs:
+        return True
+
+    if vulkanApi.parameters[0].typeName == "VkInstance":
+        return True
+
+    return False
+
+def isGetDeviceProcAddressAPI(vulkanApi):
+    if isGetProcAddressAPI(vulkanApi):
+        return False
+
+    if isGetProcAddressOnlyAPI(vulkanApi):
+        return False
+
+    if isGetInstanceProcAddressAPI(vulkanApi):
+        return False
+
+    return True
+
+def inferProcAddressFuncType(vulkanApi):
+    if isGetProcAddressAPI(vulkanApi):
+        return "global"
+    if isGetProcAddressOnlyAPI(vulkanApi):
+        return "global-only"
+    if isGetInstanceProcAddressNoInstanceAPI(vulkanApi):
+        return "global-instance"
+    if isGetInstanceProcAddressAPI(vulkanApi):
+        return "instance"
+    return "device"
+
+# VulkanDispatch defines a struct, VulkanDispatch,
+# that is populated by function pointers from the Vulkan
+# loader. No attempt is made to do something different
+# for instance vs device functions.
+class VulkanDispatch(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.apisToGet = {}
+
+        self.cgenHeader = CodeGen()
+        self.cgenImpl = CodeGen()
+        self.typeInfo = typeInfo
+
+        self.currentFeature = ""
+        self.featureForCodegen = ""
+
+    def onBegin(self):
+
+        # The first way is to use just the loader to get symbols. This doesn't
+        # necessarily work with extensions because at that point the dispatch
+        # table needs to be specific to a particular Vulkan instance or device.
+
+        self.cgenHeader.line("""
+void init_vulkan_dispatch_from_system_loader(
+    DlOpenFunc dlOpenFunc,
+    DlSymFunc dlSymFunc,
+    VulkanDispatch* dispatch_out);
+""")
+
+        # The second way is to initialize the table from a given Vulkan
+        # instance or device. Provided the instance or device was created with
+        # the right extensions, we can obtain function pointers to extension
+        # functions this way.
+
+        self.cgenHeader.line("""
+void init_vulkan_dispatch_from_instance(
+    VulkanDispatch* vk,
+    VkInstance instance,
+    VulkanDispatch* dispatch_out);
+""")
+        self.cgenHeader.line("""
+void init_vulkan_dispatch_from_device(
+    VulkanDispatch* vk,
+    VkDevice device,
+    VulkanDispatch* dispatch_out);
+""")
+
+        # After populating a VulkanDispatch with the above methods,
+        # it can be useful to check whether the Vulkan 1.0 or 1.1 methods
+        # are all there.
+        def emit_feature_check_decl(cgen, tag, featureToCheck):
+            cgen.line("""
+bool vulkan_dispatch_check_%s_%s(
+    const VulkanDispatch* vk);
+""" % (tag, featureToCheck))
+
+        emit_feature_check_decl(self.cgenHeader, "instance", "VK_VERSION_1_0")
+        emit_feature_check_decl(self.cgenHeader, "instance", "VK_VERSION_1_1")
+        emit_feature_check_decl(self.cgenHeader, "device", "VK_VERSION_1_0")
+        emit_feature_check_decl(self.cgenHeader, "device", "VK_VERSION_1_1")
+
+        self.cgenHeader.line("struct VulkanDispatch {")
+        self.module.appendHeader(self.cgenHeader.swapCode())
+
+    def syncFeatureQuiet(self, cgen, feature):
+        if self.featureForCodegen != feature:
+            if feature == "":
+                self.featureForCodegen = feature
+                return
+
+            self.featureForCodegen = feature
+
+    def syncFeature(self, cgen, feature):
+        if self.featureForCodegen != feature:
+            if feature == "":
+                cgen.leftline("#endif")
+                self.featureForCodegen = feature
+                return
+
+            if self.featureForCodegen != "":
+                cgen.leftline("#endif")
+
+            cgen.leftline("#ifdef %s" % feature)
+            self.featureForCodegen = feature
+
+    def makeDlsymCall(self, cgen, apiname, typedecl):
+        cgen.stmt( \
+            "out->%s = (%s)dlSymFunc(lib, \"%s\")" % \
+            (apiname, typedecl, apiname))
+
+    def makeGetInstanceProcAddrCall(self, cgen, dispatch, instance, apiname, typedecl):
+        cgen.stmt( \
+            "out->%s = (%s)%s->vkGetInstanceProcAddr(%s, \"%s\")" % \
+            (apiname, typedecl, dispatch, instance, apiname))
+
+    def makeGetDeviceProcAddrCall(self, cgen, dispatch, device, apiname, typedecl):
+        cgen.stmt( \
+            "out->%s = (%s)%s->vkGetDeviceProcAddr(%s, \"%s\")" % \
+            (apiname, typedecl, dispatch, device, apiname))
+
+    def onEnd(self):
+        self.cgenHeader.line("};")
+        self.module.appendHeader(self.cgenHeader.swapCode())
+
+        # Getting dispatch tables from the loader
+        self.cgenImpl.line("""
+void init_vulkan_dispatch_from_system_loader(
+    DlOpenFunc dlOpenFunc,
+    DlSymFunc dlSymFunc,
+    VulkanDispatch* out)""")
+
+        self.cgenImpl.beginBlock()
+
+        self.cgenImpl.stmt("memset(out, 0x0, sizeof(VulkanDispatch))")
+
+        self.cgenImpl.stmt("void* lib = dlOpenFunc()")
+        self.cgenImpl.stmt("if (!lib) return")
+
+        apis = \
+            self.apisToGet["global"] + \
+            self.apisToGet["global-instance"] + \
+            self.apisToGet["instance"] + \
+            self.apisToGet["device"] + \
+            self.apisToGet["global-only"]
+
+        for vulkanApi, typeDecl, feature in apis:
+            self.syncFeature(self.cgenImpl, feature)
+            self.makeDlsymCall(self.cgenImpl, vulkanApi.name, typeDecl)
+
+        self.syncFeature(self.cgenImpl, "")
+        self.cgenImpl.endBlock()
+
+        # Getting instance dispatch tables
+        self.cgenImpl.line("""
+void init_vulkan_dispatch_from_instance(
+    VulkanDispatch* vk,
+    VkInstance instance,
+    VulkanDispatch* out)""")
+
+        self.cgenImpl.beginBlock()
+
+        self.cgenImpl.stmt("memset(out, 0x0, sizeof(VulkanDispatch))")
+
+        apis = \
+            self.apisToGet["global"] + \
+            self.apisToGet["global-instance"] + \
+            self.apisToGet["instance"] + \
+            self.apisToGet["device"]
+
+        for vulkanApi, typeDecl, feature in apis:
+            self.syncFeature(self.cgenImpl, feature)
+            self.makeGetInstanceProcAddrCall(
+                self.cgenImpl, "vk", "instance", vulkanApi.name, typeDecl)
+
+        self.syncFeature(self.cgenImpl, "")
+        self.cgenImpl.endBlock()
+
+        # Getting device dispatch tables
+        self.cgenImpl.line("""
+void init_vulkan_dispatch_from_device(
+    VulkanDispatch* vk,
+    VkDevice device,
+    VulkanDispatch* out)""")
+
+        self.cgenImpl.beginBlock()
+
+        self.cgenImpl.stmt("memset(out, 0x0, sizeof(VulkanDispatch))")
+
+        apis = \
+            self.apisToGet["global"] + \
+            self.apisToGet["global-instance"] + \
+            self.apisToGet["instance"] + \
+            self.apisToGet["device"]
+
+        for vulkanApi, typeDecl, feature in apis:
+            self.syncFeature(self.cgenImpl, feature)
+            self.makeGetDeviceProcAddrCall(
+                self.cgenImpl, "vk", "device", vulkanApi.name, typeDecl)
+
+        self.syncFeature(self.cgenImpl, "")
+        self.cgenImpl.endBlock()
+
+        # Check Vulkan 1.0 / 1.1 functions
+
+        def emit_check_impl(cgen, dispatchVar, feature, featureToCheck, apiName):
+            if feature == featureToCheck:
+                cgen.beginIf("!%s->%s" % (dispatchVar, apiName))
+                cgen.stmt("fprintf(stderr, \"%s check failed: %s not found\\n\")" % (featureToCheck, apiName))
+                cgen.stmt("good = false")
+                cgen.endIf()
+
+        def emit_feature_check_impl(context, cgen, tag, featureToCheck, apis):
+            cgen.line("""
+bool vulkan_dispatch_check_%s_%s(
+    const VulkanDispatch* vk)
+""" % (tag, featureToCheck))
+
+            cgen.beginBlock()
+
+            cgen.stmt("bool good = true")
+
+            for vulkanApi, typeDecl, feature in apis:
+                context.syncFeatureQuiet(self.cgenImpl, feature)
+                emit_check_impl(cgen, "vk", feature, featureToCheck, vulkanApi.name)
+
+            context.syncFeatureQuiet(self.cgenImpl, "")
+
+            cgen.stmt("return good")
+            cgen.endBlock()
+
+        instanceApis = self.apisToGet["global-instance"] + self.apisToGet["instance"]
+
+        emit_feature_check_impl(self, self.cgenImpl, "instance", "VK_VERSION_1_0", instanceApis)
+        emit_feature_check_impl(self, self.cgenImpl, "instance", "VK_VERSION_1_1", instanceApis)
+        emit_feature_check_impl(self, self.cgenImpl, "device", "VK_VERSION_1_0", self.apisToGet["device"])
+        emit_feature_check_impl(self, self.cgenImpl, "device", "VK_VERSION_1_1", self.apisToGet["device"])
+
+        self.module.appendImpl(self.cgenImpl.swapCode())
+
+    def onBeginFeature(self, featureName):
+        self.currentFeature = featureName
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+        vulkanApi = self.typeInfo.apis[name]
+
+        typeDecl = "PFN_%s" % name
+
+        procAddressType = inferProcAddressFuncType(vulkanApi)
+
+        self.cgenHeader.stmt("%s %s" % (typeDecl, name));
+        self.module.appendHeader(self.cgenHeader.swapCode())
+
+        current = self.apisToGet.get(procAddressType, [])
+        if current == []:
+            self.apisToGet[procAddressType] = current
+        current.append((vulkanApi, typeDecl, self.currentFeature))
+
+# VulkanDispatchFast allows one to get the optimal function pointers
+# for a given Vulkan API call, in order to improve performance.
+#
+# We can optionally query VkDevices to get function pointers that are
+# closer to the ICD and have fewer levels of indirection from the loader
+# to get there.
+# See
+# https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/LoaderAndLayerInterface.md
+# for more info.
+#
+# This requires the calling C++ code to provide functions to
+# generate the desired instances and devices, otherwise we won't know
+# which instance or device to pass to vkGet(Instance|Device)ProcAddr,
+# so it does push more complexity to the user.
+class VulkanDispatchFast(VulkanDispatch):
+
+    def __init__(self, module, typeInfo):
+        VulkanDispatch.__init__(self, module, typeInfo)
+
+    def onBegin(self):
+        self.cgenHeader.line("""
+void init_vulkan_dispatch_from_system_loader(
+    DlOpenFunc dlOpenFunc,
+    DlSymFunc dlSymFunc,
+    InstanceGetter instanceGetter,
+    DeviceGetter deviceGetter,
+    VulkanDispatch* dispatch_out);
+""")
+
+        self.cgenHeader.line("struct VulkanDispatch {")
+        self.cgenHeader.line("VkInstance instance;")
+        self.cgenHeader.line("VkPhysicalDevice physicalDevice;")
+        self.cgenHeader.line("uint32_t physicalDeviceQueueFamilyInfoCount;")
+        self.cgenHeader.line("VkQueueFamilyProperties* physicalDeviceQueueFamilyInfos;")
+        self.cgenHeader.line("VkDevice device;")
+        self.cgenHeader.line("bool presentCapable;")
+        self.module.appendHeader(self.cgenHeader.swapCode())
+
+    def makeGetProcAddr(self, cgen, dispatchLevel, dispatch, apiname, typedecl):
+        if dispatchLevel == "instance":
+            funcname = "vkGetInstanceProcAddr"
+        elif dispatchLevel == "device":
+            funcname = "vkGetDeviceProcAddr"
+        else:
+            raise
+
+        cgen.stmt( \
+            "out->%s = (%s)out->%s(%s, \"%s\")" % \
+            (apiname, typedecl, funcname, dispatch, apiname))
+
+    def onEnd(self):
+        self.cgenHeader.line("};")
+        self.module.appendHeader(self.cgenHeader.swapCode())
+
+        self.cgenImpl.line("""
+void init_vulkan_dispatch_from_system_loader(
+    DlOpenFunc dlOpenFunc,
+    DlSymFunc dlSymFunc,
+    InstanceGetter instanceGetter,
+    DeviceGetter deviceGetter,
+    VulkanDispatch* out)""")
+
+        self.cgenImpl.beginBlock()
+
+        self.cgenImpl.stmt("out->instance = nullptr")
+        self.cgenImpl.stmt("out->physicalDevice = nullptr")
+        self.cgenImpl.stmt("out->physicalDeviceQueueFamilyInfoCount = 0")
+        self.cgenImpl.stmt("out->physicalDeviceQueueFamilyInfos = nullptr")
+        self.cgenImpl.stmt("out->device = nullptr")
+        self.cgenImpl.stmt("out->presentCapable = false")
+
+        self.cgenImpl.stmt("void* lib = dlOpenFunc()")
+        self.cgenImpl.stmt("if (!lib) return")
+
+        for vulkanApi, typeDecl, feature in self.apisToGet["global"]:
+            self.syncFeature(self.cgenImpl, feature)
+            self.makeDlsymCall(self.cgenImpl, vulkanApi.name, typeDecl)
+
+        self.syncFeature(self.cgenImpl, "")
+        self.cgenImpl.stmt("if (!out->vkGetInstanceProcAddr) return")
+
+        for vulkanApi, typeDecl, feature in self.apisToGet["global-instance"]:
+            self.syncFeature(self.cgenImpl, feature)
+            self.makeGetProcAddr( \
+                self.cgenImpl, "instance", "nullptr", vulkanApi.name, typeDecl);
+
+        self.syncFeature(self.cgenImpl, "")
+        self.cgenImpl.stmt("if (!instanceGetter(out, &out->instance)) return")
+
+        for vulkanApi, typeDecl, feature in self.apisToGet["instance"]:
+            self.syncFeature(self.cgenImpl, feature)
+            self.makeGetProcAddr( \
+                self.cgenImpl, "instance", "out->instance", vulkanApi.name, typeDecl);
+
+        self.syncFeature(self.cgenImpl, "")
+
+        self.cgenImpl.stmt("if (!deviceGetter(out, out->instance, &out->physicalDevice, &out->physicalDeviceQueueFamilyInfoCount, nullptr, &out->device, &out->presentCapable)) return")
+        self.cgenImpl.stmt("out->physicalDeviceQueueFamilyInfos = (VkQueueFamilyProperties*)malloc(out->physicalDeviceQueueFamilyInfoCount * sizeof(VkQueueFamilyProperties))");
+        self.cgenImpl.stmt("if (!deviceGetter(out, out->instance, &out->physicalDevice, &out->physicalDeviceQueueFamilyInfoCount, out->physicalDeviceQueueFamilyInfos, &out->device, &out->presentCapable)) return")
+
+        for vulkanApi, typeDecl, feature in self.apisToGet["device"]:
+            self.syncFeature(self.cgenImpl, feature)
+            self.makeGetProcAddr( \
+                self.cgenImpl, "device", "out->device", vulkanApi.name, typeDecl);
+
+        self.syncFeature(self.cgenImpl, "")
+
+        self.cgenImpl.endBlock()
+
+        self.module.appendImpl(self.cgenImpl.swapCode())
+
+    def onBeginFeature(self, featureName):
+        VulkanDispatch.onBeginFeature(self, featureName);
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanDispatch.onGenType(self, typeXml, name, alias);
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanDispatch.onGenCmd(self, cmdinfo, name, alias);
diff --git a/registry/vulkan/scripts/cereal/encoder.py b/registry/vulkan/scripts/cereal/encoder.py
new file mode 100644
index 0000000..e56dbd1
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/encoder.py
@@ -0,0 +1,661 @@
+import copy
+
+from .common.codegen import CodeGen, VulkanWrapperGenerator
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType
+
+from .marshaling import VulkanMarshalingCodegen
+from .reservedmarshaling import VulkanReservedMarshalingCodegen
+from .counting import VulkanCountingCodegen
+from .handlemap import HandleMapCodegen
+from .deepcopy import DeepcopyCodegen
+from .transform import TransformCodegen, genTransformsForVulkanType
+
+from .wrapperdefs import API_PREFIX_RESERVEDMARSHAL
+from .wrapperdefs import API_PREFIX_MARSHAL
+from .wrapperdefs import API_PREFIX_UNMARSHAL
+from .wrapperdefs import ROOT_TYPE_DEFAULT_VALUE
+from .wrapperdefs import VULKAN_STREAM_TYPE_GUEST
+
+encoder_decl_preamble = """
+class VkEncoder {
+public:
+    VkEncoder(IOStream* stream);
+    ~VkEncoder();
+
+#include "VkEncoder.h.inl"
+"""
+
+encoder_decl_postamble = """
+private:
+    class Impl;
+    std::unique_ptr<Impl> mImpl;
+};
+"""
+
+encoder_impl_preamble ="""
+
+using namespace goldfish_vk;
+
+using android::aligned_buf_alloc;
+using android::aligned_buf_free;
+using android::base::guest::AutoLock;
+using android::base::guest::Lock;
+using android::base::BumpPool;
+
+#include "VkEncoder.cpp.inl"
+
+#define VALIDATE_RET(retType, success, validate) \\
+    retType goldfish_vk_validateResult = validate; \\
+    if (goldfish_vk_validateResult != success) return goldfish_vk_validateResult; \\
+
+#define VALIDATE_VOID(validate) \\
+    VkResult goldfish_vk_validateResult = validate; \\
+    if (goldfish_vk_validateResult != VK_SUCCESS) return; \\
+
+"""
+
+STREAM = "stream"
+RESOURCES = "sResourceTracker"
+POOL = "pool"
+
+ENCODER_PREVALIDATED_APIS = [
+    "vkFlushMappedMemoryRanges",
+    "vkInvalidateMappedMemoryRanges",
+]
+
+ENCODER_CUSTOM_RESOURCE_PREPROCESS = [
+    "vkMapMemoryIntoAddressSpaceGOOGLE",
+    "vkDestroyDevice",
+]
+
+ENCODER_CUSTOM_RESOURCE_POSTPROCESS = [
+    "vkCreateInstance",
+    "vkCreateDevice",
+    "vkMapMemoryIntoAddressSpaceGOOGLE",
+    "vkGetPhysicalDeviceProperties",
+    "vkGetPhysicalDeviceProperties2",
+    "vkGetPhysicalDeviceProperties2KHR",
+    "vkGetPhysicalDeviceMemoryProperties",
+    "vkGetPhysicalDeviceMemoryProperties2",
+    "vkGetPhysicalDeviceMemoryProperties2KHR",
+    "vkCreateDescriptorUpdateTemplate",
+    "vkCreateDescriptorUpdateTemplateKHR",
+    "vkGetPhysicalDeviceExternalSemaphoreProperties",
+    "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR",
+    "vkGetDeviceQueue",
+    "vkGetDeviceQueue2",
+]
+
+ENCODER_EXPLICIT_FLUSHED_APIS = [
+    "vkEndCommandBufferAsyncGOOGLE",
+    "vkQueueSubmitAsyncGOOGLE",
+    "vkQueueBindSparseAsyncGOOGLE",
+    "vkQueueWaitIdleAsyncGOOGLE",
+    "vkQueueSignalReleaseImageANDROID",
+    "vkDestroyDevice",
+]
+
+SUCCESS_RET_TYPES = {
+    "VkResult" : "VK_SUCCESS",
+    "void" : None,
+    # TODO: Put up success results for other return types here.
+}
+
+ENCODER_THIS_PARAM = makeVulkanTypeSimple(False, "VkEncoder", 1, "this")
+
+# Common components of encoding a Vulkan API call
+def make_event_handler_call(
+    handler_access,
+    api,
+    context_param,
+    input_result_param,
+    cgen,
+    suffix=""):
+    extraParams = [context_param.paramName]
+    if input_result_param:
+        extraParams.append(input_result_param)
+    return cgen.makeCallExpr( \
+               "%s->on_%s%s" % (handler_access, api.name, suffix),
+               extraParams + \
+                       [p.paramName for p in api.parameters[:-1]])
+
+def emit_custom_pre_validate(typeInfo, api, cgen):
+    if api.name in ENCODER_PREVALIDATED_APIS:
+        callExpr = \
+            make_event_handler_call( \
+                "mImpl->validation()", api,
+                ENCODER_THIS_PARAM,
+                SUCCESS_RET_TYPES[api.getRetTypeExpr()],
+                cgen)
+
+        if api.getRetTypeExpr() == "void":
+            cgen.stmt("VALIDATE_VOID(%s)" % callExpr)
+        else:
+            cgen.stmt("VALIDATE_RET(%s, %s, %s)" % \
+                (api.getRetTypeExpr(),
+                 SUCCESS_RET_TYPES[api.getRetTypeExpr()],
+                 callExpr))
+
+def emit_custom_resource_preprocess(typeInfo, api, cgen):
+    if api.name in ENCODER_CUSTOM_RESOURCE_PREPROCESS:
+        cgen.stmt( \
+            make_event_handler_call( \
+                "sResourceTracker", api,
+                ENCODER_THIS_PARAM,
+                SUCCESS_RET_TYPES[api.getRetTypeExpr()],
+                cgen, suffix="_pre"))
+
+def emit_custom_resource_postprocess(typeInfo, api, cgen):
+    if api.name in ENCODER_CUSTOM_RESOURCE_POSTPROCESS:
+        cgen.stmt(make_event_handler_call( \
+            "sResourceTracker",
+            api,
+            ENCODER_THIS_PARAM,
+            api.getRetVarExpr(),
+            cgen))
+
+def emit_count_marshal(typeInfo, param, cgen):
+    res = \
+        iterateVulkanType(
+            typeInfo, param,
+            VulkanCountingCodegen( \
+                cgen, "sFeatureBits", param.paramName, "countPtr", ROOT_TYPE_DEFAULT_VALUE,
+               "count_"))
+    if not res:
+        cgen.stmt("(void)%s" % param.paramName)
+
+def emit_marshal(typeInfo, param, cgen):
+    forOutput = param.isHandleType() and ("out" in param.inout)
+    if forOutput:
+        cgen.stmt("/* is handle, possibly out */")
+
+    res = \
+        iterateVulkanType(
+            typeInfo, param,
+            VulkanReservedMarshalingCodegen( \
+                cgen, STREAM, ROOT_TYPE_DEFAULT_VALUE, param.paramName, "streamPtrPtr",
+               API_PREFIX_RESERVEDMARSHAL,
+               "" if forOutput else "get_host_u64_",
+               direction="write"))
+    if not res:
+        cgen.stmt("(void)%s" % param.paramName)
+
+    if forOutput:
+        cgen.stmt("/* is handle, possibly out */")
+
+def emit_unmarshal(typeInfo, param, cgen):
+    iterateVulkanType(
+        typeInfo, param,
+        VulkanMarshalingCodegen( \
+            cgen, STREAM, ROOT_TYPE_DEFAULT_VALUE, param.paramName,
+           API_PREFIX_UNMARSHAL, direction="read"))
+
+def emit_deepcopy(typeInfo, param, cgen):
+    res = \
+        iterateVulkanType(typeInfo, param, DeepcopyCodegen(
+            cgen, [param.paramName, "local_" + param.paramName], "pool", ROOT_TYPE_DEFAULT_VALUE, "deepcopy_"))
+    if not res:
+        cgen.stmt("(void)%s" % param.paramName)
+
+def emit_transform(typeInfo, param, cgen, variant="tohost"):
+    res = \
+        iterateVulkanType(typeInfo, param, TransformCodegen( \
+            cgen, param.paramName, "sResourceTracker", "transform_%s_" % variant, variant))
+    if not res:
+        cgen.stmt("(void)%s" % param.paramName)
+
+def emit_handlemap_create(typeInfo, param, cgen):
+    iterateVulkanType(typeInfo, param, HandleMapCodegen(
+        cgen, None, "sResourceTracker", "handlemap_",
+        lambda vtype: typeInfo.isHandleType(vtype.typeName)
+    ))
+
+def custom_encoder_args(api):
+    params = ["this"]
+    if api.getRetVarExpr() is not None:
+        params.append(api.getRetVarExpr())
+    return params
+
+def emit_handlemap_destroy(typeInfo, param, cgen):
+    iterateVulkanType(typeInfo, param, HandleMapCodegen(
+        cgen, None, "sResourceTracker->destroyMapping()", "handlemap_",
+        lambda vtype: typeInfo.isHandleType(vtype.typeName)
+    ))
+
+class EncodingParameters(object):
+    def __init__(self, api):
+        self.localCopied = []
+        self.toWrite = []
+        self.toRead = []
+        self.toCreate = []
+        self.toDestroy = []
+
+        for param in api.parameters:
+            param.action = None
+            param.inout = "in"
+
+            if param.paramName == "doLock":
+                continue
+
+            if param.possiblyOutput():
+                param.inout += "out"
+                self.toWrite.append(param)
+                self.toRead.append(param)
+                if param.isCreatedBy(api):
+                    self.toCreate.append(param)
+                    param.action = "create"
+            else:
+
+                if param.paramName == "doLock":
+                    continue
+
+                if param.isDestroyedBy(api):
+                    self.toDestroy.append(param)
+                    param.action = "destroy"
+                localCopyParam = \
+                    param.getForNonConstAccess().withModifiedName( \
+                        "local_" + param.paramName)
+                self.localCopied.append((param, localCopyParam))
+                self.toWrite.append(localCopyParam)
+
+def emit_parameter_encode_preamble_write(typeInfo, api, cgen):
+    emit_custom_pre_validate(typeInfo, api, cgen);
+    emit_custom_resource_preprocess(typeInfo, api, cgen);
+
+    cgen.stmt("auto %s = mImpl->stream()" % STREAM)
+    cgen.stmt("auto %s = mImpl->pool()" % POOL)
+    # cgen.stmt("%s->setHandleMapping(%s->unwrapMapping())" % (STREAM, RESOURCES))
+
+    encodingParams = EncodingParameters(api)
+    for (_, localCopyParam) in encodingParams.localCopied:
+        cgen.stmt(cgen.makeRichCTypeDecl(localCopyParam))
+
+def emit_parameter_encode_copy_unwrap_count(typeInfo, api, cgen, customUnwrap=None):
+    encodingParams = EncodingParameters(api)
+
+    for (origParam, localCopyParam) in encodingParams.localCopied:
+        shouldCustomCopy = \
+            customUnwrap and \
+            origParam.paramName in customUnwrap and \
+            "copyOp" in customUnwrap[origParam.paramName]
+
+        shouldCustomMap = \
+            customUnwrap and \
+            origParam.paramName in customUnwrap and \
+            "mapOp" in customUnwrap[origParam.paramName]
+
+        if shouldCustomCopy:
+            customUnwrap[origParam.paramName]["copyOp"](cgen, origParam, localCopyParam)
+        else:
+            # if this is a pointer type and we don't do custom copy nor unwrap,
+            # and the transform doesn't end up doing anything,
+            # don't deepcopy, just cast it.
+           
+            avoidDeepcopy = False
+
+            if origParam.pointerIndirectionLevels > 0:
+                testCgen = CodeGen()
+                genTransformsForVulkanType("sResourceTracker", origParam, lambda p: testCgen.generalAccess(p, parentVarName = None, asPtr = True), lambda p: testCgen.generalLengthAccess(p, parentVarName = None), testCgen)
+                emit_transform(typeInfo, origParam, testCgen, variant="tohost")
+                if "" == testCgen.swapCode():
+                    avoidDeepcopy = True
+            if avoidDeepcopy:
+                cgen.line("// Avoiding deepcopy for %s" % origParam.paramName)
+                cgen.stmt("%s = (%s%s)%s" % (localCopyParam.paramName, localCopyParam.typeName, "*" * origParam.pointerIndirectionLevels, origParam.paramName))
+            else:
+                emit_deepcopy(typeInfo, origParam, cgen)
+
+    for (origParam, localCopyParam) in encodingParams.localCopied:
+        shouldCustomMap = \
+            customUnwrap and \
+            origParam.paramName in customUnwrap and \
+            "mapOp" in customUnwrap[origParam.paramName]
+
+        if shouldCustomMap:
+            customUnwrap[origParam.paramName]["mapOp"](cgen, origParam, localCopyParam)
+        else:
+            if localCopyParam.typeName == "VkAllocationCallbacks":
+                cgen.stmt("%s = nullptr" % localCopyParam.paramName)
+
+    apiForTransform = \
+        api.withCustomParameters( \
+            map(lambda p: p[1], \
+                encodingParams.localCopied))
+
+    # Apply transforms if applicable.
+    # Apply transform to API itself:
+    genTransformsForVulkanType(
+        "sResourceTracker",
+        apiForTransform,
+        lambda p: cgen.generalAccess(p, parentVarName = None, asPtr = True),
+        lambda p: cgen.generalLengthAccess(p, parentVarName = None),
+        cgen)
+
+    # For all local copied parameters, run the transforms
+    for localParam in apiForTransform.parameters:
+        if "doLock" in localParam.paramName:
+            continue
+        emit_transform(typeInfo, localParam, cgen, variant="tohost")
+
+    cgen.stmt("size_t count = 0")
+    cgen.stmt("size_t* countPtr = &count")
+    cgen.beginBlock()
+
+    # Use counting stream to calculate the packet size.
+    for p in encodingParams.toWrite:
+        emit_count_marshal(typeInfo, p, cgen)
+
+    cgen.endBlock()
+
+def is_cmdbuf_dispatch(api):
+    return "VkCommandBuffer" == api.parameters[0].typeName
+
+def emit_parameter_encode_write_packet_info(typeInfo, api, cgen):
+    # Seqno and skipping dispatch serialize are for use with VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT
+    doSeqno = True
+    doDispatchSerialize = True
+
+    if is_cmdbuf_dispatch(api):
+        doSeqno = False
+        doDispatchSerialize = False
+
+    if doSeqno:
+        cgen.stmt("uint32_t packetSize_%s = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count" % (api.name))
+    else:
+        cgen.stmt("uint32_t packetSize_%s = 4 + 4 + count" % (api.name))
+
+    if not doDispatchSerialize:
+        cgen.stmt("if (queueSubmitWithCommandsEnabled) packetSize_%s -= 8" % api.name)
+
+    cgen.stmt("uint8_t* streamPtr = %s->reserve(packetSize_%s)" % (STREAM, api.name))
+    cgen.stmt("uint8_t** streamPtrPtr = &streamPtr")
+    cgen.stmt("uint32_t opcode_%s = OP_%s" % (api.name, api.name))
+
+    if doSeqno:
+        cgen.stmt("uint32_t seqno; if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno()")
+
+    cgen.stmt("memcpy(streamPtr, &opcode_%s, sizeof(uint32_t)); streamPtr += sizeof(uint32_t)" % api.name)
+    cgen.stmt("memcpy(streamPtr, &packetSize_%s, sizeof(uint32_t)); streamPtr += sizeof(uint32_t)" % api.name)
+
+    if doSeqno:
+        cgen.line("if (queueSubmitWithCommandsEnabled) { memcpy(streamPtr, &seqno, sizeof(uint32_t)); streamPtr += sizeof(uint32_t); }")
+
+def emit_parameter_encode_do_parameter_write(typeInfo, api, cgen):
+    encodingParams = EncodingParameters(api)
+
+    dispatchDone = False
+
+    for p in encodingParams.toWrite:
+        if is_cmdbuf_dispatch(api) and not dispatchDone:
+            cgen.beginIf("!queueSubmitWithCommandsEnabled")
+            emit_marshal(typeInfo, p, cgen)
+            cgen.endIf()
+        else:
+            emit_marshal(typeInfo, p, cgen)
+
+        dispatchDone = True
+
+def emit_parameter_encode_read(typeInfo, api, cgen):
+    encodingParams = EncodingParameters(api)
+
+    for p in encodingParams.toRead:
+        if p.action == "create":
+            cgen.stmt(
+                "%s->setHandleMapping(%s->createMapping())" % \
+                (STREAM, RESOURCES))
+        emit_unmarshal(typeInfo, p, cgen)
+        if p.action == "create":
+            cgen.stmt(
+                "%s->unsetHandleMapping()" % STREAM)
+        emit_transform(typeInfo, p, cgen, variant="fromhost")
+
+def emit_post(typeInfo, api, cgen):
+    encodingParams = EncodingParameters(api)
+
+    emit_custom_resource_postprocess(typeInfo, api, cgen)
+
+    for p in encodingParams.toDestroy:
+        emit_handlemap_destroy(typeInfo, p, cgen)
+
+    doSeqno = True
+    if is_cmdbuf_dispatch(api):
+        doSeqno = False
+
+    retType = api.getRetTypeExpr()
+
+    if api.name in ENCODER_EXPLICIT_FLUSHED_APIS:
+        cgen.stmt("stream->flush()");
+        return
+
+    if doSeqno:
+        if retType == "void":
+            encodingParams = EncodingParameters(api)
+            if 0 == len(encodingParams.toRead):
+                cgen.stmt("stream->flush()");
+
+def emit_pool_free(cgen):
+    cgen.stmt("++encodeCount;")
+    cgen.beginIf("0 == encodeCount % POOL_CLEAR_INTERVAL")
+    cgen.stmt("pool->freeAll()")
+    cgen.stmt("%s->clearPool()" % STREAM)
+    cgen.endIf()
+
+def emit_return_unmarshal(typeInfo, api, cgen):
+
+    retType = api.getRetTypeExpr()
+
+    if retType == "void":
+        return
+
+    retVar = api.getRetVarExpr()
+    cgen.stmt("%s %s = (%s)0" % (retType, retVar, retType))
+    cgen.stmt("%s->read(&%s, %s)" % \
+              (STREAM, retVar, cgen.sizeofExpr(api.retType)))
+
+def emit_return(typeInfo, api, cgen):
+    if api.getRetTypeExpr() == "void":
+        return
+
+    retVar = api.getRetVarExpr()
+    cgen.stmt("return %s" % retVar)
+
+def emit_lock(cgen):
+    cgen.stmt("(void)doLock");
+    cgen.stmt("bool queueSubmitWithCommandsEnabled = sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT")
+    cgen.stmt("if (!queueSubmitWithCommandsEnabled && doLock) this->lock()")
+
+def emit_unlock(cgen):
+    cgen.stmt("if (!queueSubmitWithCommandsEnabled && doLock) this->unlock()")
+
+def emit_default_encoding(typeInfo, api, cgen):
+    emit_lock(cgen)
+    emit_parameter_encode_preamble_write(typeInfo, api, cgen)
+    emit_parameter_encode_copy_unwrap_count(typeInfo, api, cgen)
+    emit_parameter_encode_write_packet_info(typeInfo, api, cgen)
+    emit_parameter_encode_do_parameter_write(typeInfo, api, cgen)
+    emit_parameter_encode_read(typeInfo, api, cgen)
+    emit_return_unmarshal(typeInfo, api, cgen)
+    emit_post(typeInfo, api, cgen)
+    emit_pool_free(cgen)
+    emit_unlock(cgen)
+    emit_return(typeInfo, api, cgen)
+
+## Custom encoding definitions##################################################
+
+def emit_only_goldfish_custom(typeInfo, api, cgen):
+    emit_lock(cgen)
+    cgen.vkApiCall( \
+        api,
+        customPrefix="sResourceTracker->on_",
+        customParameters=custom_encoder_args(api) + \
+                [p.paramName for p in api.parameters[:-1]])
+    emit_unlock(cgen)
+    emit_return(typeInfo, api, cgen)
+
+def emit_only_resource_event(typeInfo, api, cgen):
+    cgen.stmt("(void)doLock");
+    input_result = None
+    retExpr = api.getRetVarExpr()
+
+    if retExpr:
+        retType = api.getRetTypeExpr()
+        input_result = SUCCESS_RET_TYPES[retType]
+        cgen.stmt("%s %s = (%s)0" % (retType, retExpr, retType))
+
+    cgen.stmt(
+        (("%s = " % retExpr) if retExpr else "") +
+        make_event_handler_call(
+            "sResourceTracker",
+            api,
+            ENCODER_THIS_PARAM,
+            input_result, cgen))
+
+    if retExpr:
+        emit_return(typeInfo, api, cgen)
+
+def emit_with_custom_unwrap(custom):
+    def call(typeInfo, api, cgen):
+        emit_lock(cgen)
+        emit_parameter_encode_preamble_write(typeInfo, api, cgen)
+        emit_parameter_encode_copy_unwrap_count(
+            typeInfo, api, cgen, customUnwrap=custom)
+        emit_parameter_encode_write_packet_info(typeInfo, api, cgen)
+        emit_parameter_encode_do_parameter_write(typeInfo, api, cgen)
+        emit_parameter_encode_read(typeInfo, api, cgen)
+        emit_return_unmarshal(typeInfo, api, cgen)
+        emit_pool_free(cgen)
+        emit_unlock(cgen)
+        emit_return(typeInfo, api, cgen)
+    return call
+
+def encode_vkFlushMappedMemoryRanges(typeInfo, api, cgen):
+    emit_lock(cgen)
+    emit_parameter_encode_preamble_write(typeInfo, api, cgen)
+    emit_parameter_encode_copy_unwrap_count(typeInfo, api, cgen)
+
+    def emit_flush_ranges(streamVar):
+        cgen.beginIf("!sResourceTracker->usingDirectMapping()")
+        cgen.beginFor("uint32_t i = 0", "i < memoryRangeCount", "++i")
+        cgen.stmt("auto range = pMemoryRanges[i]")
+        cgen.stmt("auto memory = pMemoryRanges[i].memory")
+        cgen.stmt("auto size = pMemoryRanges[i].size")
+        cgen.stmt("auto offset = pMemoryRanges[i].offset")
+        cgen.stmt("uint64_t streamSize = 0")
+        cgen.stmt("if (!memory) { %s->write(&streamSize, sizeof(uint64_t)); continue; }" % streamVar)
+        cgen.stmt("auto hostPtr = sResourceTracker->getMappedPointer(memory)")
+        cgen.stmt("auto actualSize = size == VK_WHOLE_SIZE ? sResourceTracker->getMappedSize(memory) : size")
+        cgen.stmt("if (!hostPtr) { %s->write(&streamSize, sizeof(uint64_t)); continue; }" % streamVar)
+        cgen.stmt("streamSize = actualSize")
+        cgen.stmt("%s->write(&streamSize, sizeof(uint64_t))" % streamVar)
+        cgen.stmt("uint8_t* targetRange = hostPtr + offset")
+        cgen.stmt("%s->write(targetRange, actualSize)" % streamVar)
+        cgen.endFor()
+        cgen.endIf()
+
+    emit_parameter_encode_write_packet_info(typeInfo, api, cgen)
+    emit_parameter_encode_do_parameter_write(typeInfo, api, cgen)
+
+    emit_flush_ranges(STREAM)
+
+    emit_parameter_encode_read(typeInfo, api, cgen)
+    emit_return_unmarshal(typeInfo, api, cgen)
+    emit_pool_free(cgen)
+    emit_unlock(cgen)
+    emit_return(typeInfo, api, cgen)
+
+def encode_vkInvalidateMappedMemoryRanges(typeInfo, api, cgen):
+    emit_lock(cgen)
+    emit_parameter_encode_preamble_write(typeInfo, api, cgen)
+    emit_parameter_encode_copy_unwrap_count(typeInfo, api, cgen)
+    emit_parameter_encode_write_packet_info(typeInfo, api, cgen)
+    emit_parameter_encode_do_parameter_write(typeInfo, api, cgen)
+    emit_parameter_encode_read(typeInfo, api, cgen)
+    emit_return_unmarshal(typeInfo, api, cgen)
+
+    def emit_invalidate_ranges(streamVar):
+        cgen.beginIf("!sResourceTracker->usingDirectMapping()")
+        cgen.beginFor("uint32_t i = 0", "i < memoryRangeCount", "++i")
+        cgen.stmt("auto range = pMemoryRanges[i]")
+        cgen.stmt("auto memory = pMemoryRanges[i].memory")
+        cgen.stmt("auto size = pMemoryRanges[i].size")
+        cgen.stmt("auto offset = pMemoryRanges[i].offset")
+        cgen.stmt("uint64_t streamSize = 0")
+        cgen.stmt("if (!memory) { %s->read(&streamSize, sizeof(uint64_t)); continue; }" % streamVar)
+        cgen.stmt("auto hostPtr = sResourceTracker->getMappedPointer(memory)")
+        cgen.stmt("auto actualSize = size == VK_WHOLE_SIZE ? sResourceTracker->getMappedSize(memory) : size")
+        cgen.stmt("if (!hostPtr) { %s->read(&streamSize, sizeof(uint64_t)); continue; }" % streamVar)
+        cgen.stmt("streamSize = actualSize")
+        cgen.stmt("%s->read(&streamSize, sizeof(uint64_t))" % streamVar)
+        cgen.stmt("uint8_t* targetRange = hostPtr + offset")
+        cgen.stmt("%s->read(targetRange, actualSize)" % streamVar)
+        cgen.endFor()
+        cgen.endIf()
+
+    emit_invalidate_ranges(STREAM)
+    emit_pool_free(cgen)
+    emit_unlock(cgen)
+    emit_return(typeInfo, api, cgen)
+
+def emit_manual_inline(typeInfo, api, cgen):
+    cgen.line("#include \"%s_encode_impl.cpp.inl\"" % api.name)
+
+def unwrap_VkNativeBufferANDROID():
+    def mapOp(cgen, orig, local):
+        cgen.stmt("sResourceTracker->unwrap_VkNativeBufferANDROID(%s, %s)" %
+                  (orig.paramName, local.paramName))
+    return { "pCreateInfo" : { "mapOp" : mapOp } }
+
+def unwrap_vkAcquireImageANDROID_nativeFenceFd():
+    def mapOp(cgen, orig, local):
+        cgen.stmt("sResourceTracker->unwrap_vkAcquireImageANDROID_nativeFenceFd(%s, &%s)" %
+                  (orig.paramName, local.paramName))
+    return { "nativeFenceFd" : { "mapOp" : mapOp } }
+
+custom_encodes = {
+    "vkMapMemory" : emit_only_resource_event,
+    "vkUnmapMemory" : emit_only_resource_event,
+    "vkFlushMappedMemoryRanges" : encode_vkFlushMappedMemoryRanges,
+    "vkInvalidateMappedMemoryRanges" : encode_vkInvalidateMappedMemoryRanges,
+    "vkCreateImage" : emit_with_custom_unwrap(unwrap_VkNativeBufferANDROID()),
+    "vkCreateImageWithRequirementsGOOGLE" : emit_with_custom_unwrap(unwrap_VkNativeBufferANDROID()),
+    "vkAcquireImageANDROID" : emit_with_custom_unwrap(unwrap_vkAcquireImageANDROID_nativeFenceFd()),
+    "vkQueueFlushCommandsGOOGLE" : emit_manual_inline,
+}
+
+class VulkanEncoder(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.typeInfo = typeInfo
+
+        self.cgenHeader = CodeGen()
+        self.cgenHeader.incrIndent()
+
+        self.cgenImpl = CodeGen()
+
+    def onBegin(self,):
+        self.module.appendHeader(encoder_decl_preamble)
+        self.module.appendImpl(encoder_impl_preamble)
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+        api = copy.deepcopy(self.typeInfo.apis[name])
+        api.parameters.append(makeVulkanTypeSimple(False, "uint32_t", 0, "doLock"))
+
+        self.cgenHeader.stmt(self.cgenHeader.makeFuncProto(api))
+        apiImpl = api.withModifiedName("VkEncoder::" + api.name)
+
+        self.module.appendHeader(self.cgenHeader.swapCode())
+
+        if api.name in custom_encodes.keys():
+            self.module.appendImpl(self.cgenImpl.makeFuncImpl(
+                apiImpl, lambda cgen: custom_encodes[api.name](self.typeInfo, api, cgen)))
+        else:
+            self.module.appendImpl(self.cgenImpl.makeFuncImpl(apiImpl,
+                lambda cgen: emit_default_encoding(self.typeInfo, api, cgen)))
+
+    def onEnd(self,):
+        self.module.appendHeader(encoder_decl_postamble)
+        self.cgenHeader.decrIndent()
diff --git a/registry/vulkan/scripts/cereal/extensionstructs.py b/registry/vulkan/scripts/cereal/extensionstructs.py
new file mode 100644
index 0000000..95c9523
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/extensionstructs.py
@@ -0,0 +1,125 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .common.codegen import CodeGen
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import STRUCT_EXTENSION_PARAM
+from .wrapperdefs import STRUCT_EXTENSION_PARAM_FOR_WRITE
+from .wrapperdefs import EXTENSION_SIZE_API_NAME
+from .wrapperdefs import EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME
+from .wrapperdefs import STRUCT_TYPE_API_NAME
+
+class VulkanExtensionStructs(VulkanWrapperGenerator):
+
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.codegen = CodeGen()
+
+        self.structTypeRetType = \
+            makeVulkanTypeSimple(False, "uint32_t", 0)
+
+        self.rootTypeVarName = "rootType"
+        self.rootTypeParam = \
+            makeVulkanTypeSimple(False, "VkStructureType",
+                                 0, self.rootTypeVarName)
+        self.structTypePrototype = \
+            VulkanAPI(STRUCT_TYPE_API_NAME,
+                      self.structTypeRetType,
+                      [STRUCT_EXTENSION_PARAM])
+
+        self.extensionStructSizeRetType = \
+            makeVulkanTypeSimple(False, "size_t", 0)
+        self.extensionStructSizePrototype = \
+            VulkanAPI(EXTENSION_SIZE_API_NAME,
+                      self.extensionStructSizeRetType,
+                      [self.rootTypeParam, STRUCT_EXTENSION_PARAM])
+
+        self.streamFeaturesType = makeVulkanTypeSimple(False, "uint32_t", 0, "streamFeatures")
+
+        self.extensionStructSizeWithStreamFeaturesPrototype = \
+            VulkanAPI(EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME,
+                      self.extensionStructSizeRetType,
+                      [self.streamFeaturesType, self.rootTypeParam, STRUCT_EXTENSION_PARAM])
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+        self.module.appendHeader(self.codegen.makeFuncDecl(
+            self.structTypePrototype))
+        self.module.appendHeader(self.codegen.makeFuncDecl(
+            self.extensionStructSizePrototype))
+        self.module.appendHeader(self.codegen.makeFuncDecl(
+            self.extensionStructSizeWithStreamFeaturesPrototype))
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
+
+        def castAsStruct(varName, typeName, const=True):
+            return "reinterpret_cast<%s%s*>(%s)" % \
+                   ("const " if const else "", typeName, varName)
+
+        def structTypeImpl(cgen):
+            cgen.stmt(
+                "const uint32_t asStructType = *(%s)" %
+                (castAsStruct(STRUCT_EXTENSION_PARAM.paramName, "uint32_t")))
+            cgen.stmt("return asStructType")
+
+        self.module.appendImpl(
+            self.codegen.makeFuncImpl(
+                self.structTypePrototype, structTypeImpl))
+
+        def forEachExtensionReturnSize(ext, _, cgen):
+            cgen.stmt("return sizeof(%s)" % ext.name)
+
+        def forEachExtensionReturnSizeProtectedByFeature(ext, _, cgen):
+            featureProtected = (ext.optionalStr is not None) and (ext.optionalStr.startswith("streamFeature:"))
+            if featureProtected:
+                splitted = ext.optionalStr.split(":")
+                cgen.beginIf("%s & %s" % ("streamFeatures", splitted[1]))
+                cgen.stmt("return sizeof(%s)" % ext.name)
+                cgen.endIf()
+                cgen.beginElse()
+                cgen.stmt("return 0")
+                cgen.endIf()
+            else:
+                cgen.stmt("return sizeof(%s)" % ext.name)
+
+        self.module.appendImpl(
+            self.codegen.makeFuncImpl(
+                self.extensionStructSizePrototype,
+                lambda cgen: self.emitForEachStructExtension(
+                    cgen,
+                    self.extensionStructSizeRetType,
+                    STRUCT_EXTENSION_PARAM,
+                    forEachExtensionReturnSize, autoBreak=False,
+                    rootTypeVar=self.rootTypeParam)))
+
+        self.module.appendImpl(
+            self.codegen.makeFuncImpl(
+                self.extensionStructSizeWithStreamFeaturesPrototype,
+                lambda cgen: self.emitForEachStructExtension(
+                    cgen,
+                    self.extensionStructSizeRetType,
+                    STRUCT_EXTENSION_PARAM,
+                    forEachExtensionReturnSizeProtectedByFeature, autoBreak=False,
+                    rootTypeVar=self.rootTypeParam)))
diff --git a/registry/vulkan/scripts/cereal/frontend.py b/registry/vulkan/scripts/cereal/frontend.py
new file mode 100644
index 0000000..b182c0e
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/frontend.py
@@ -0,0 +1,102 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .common.codegen import CodeGen, VulkanAPIWrapper
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType
+
+from .wrapperdefs import VulkanWrapperGenerator
+
+from .wrapperdefs import API_PREFIX_VALIDATE
+from .wrapperdefs import PARAMETERS_VALIDATE
+from .wrapperdefs import VOID_TYPE
+from .wrapperdefs import VALIDATE_RESULT_TYPE
+from .wrapperdefs import VALIDATE_VAR_NAME
+from .wrapperdefs import VALIDATE_GOOD_RESULT
+
+from .wrapperdefs import VULKAN_STREAM_TYPE
+from .wrapperdefs import VULKAN_STREAM_VAR_NAME
+
+from .wrapperdefs import API_PREFIX_MARSHAL
+from .wrapperdefs import API_PREFIX_FRONTEND
+
+# Frontend
+class VulkanFrontend(VulkanWrapperGenerator):
+
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        def validateDefFunc(_codegen, _api):
+            # TODO
+            pass
+
+        self.validateWrapper = \
+            VulkanAPIWrapper(
+                API_PREFIX_VALIDATE,
+                PARAMETERS_VALIDATE,
+                VOID_TYPE,
+                validateDefFunc)
+
+        def frontendDefFunc(codegen, api):
+            retTypeName = api.retType.typeName
+
+            codegen.stmt(
+                "%s %s = %s" % (VALIDATE_RESULT_TYPE, VALIDATE_VAR_NAME,
+                                VALIDATE_GOOD_RESULT))
+            codegen.funcCall(None, API_PREFIX_VALIDATE + api.origName,
+                             ["&%s" % VALIDATE_VAR_NAME] + list(
+                                 map(lambda p: p.paramName, api.parameters)))
+
+            codegen.beginIf(
+                "%s != %s" % (VALIDATE_VAR_NAME, VALIDATE_GOOD_RESULT))
+            if retTypeName == VALIDATE_RESULT_TYPE:
+                codegen.stmt("return %s" % VALIDATE_VAR_NAME)
+            elif retTypeName != "void":
+                codegen.stmt("return (%s)0" % retTypeName)
+            else:
+                codegen.stmt("return")
+            codegen.endIf()
+
+            codegen.stmt("// VULKAN_STREAM_GET()")
+            codegen.stmt("%s* %s = nullptr" % (VULKAN_STREAM_TYPE,
+                                               VULKAN_STREAM_VAR_NAME))
+
+            retLhs = None
+            if retTypeName != "void":
+                retLhs = retTypeName + " res"
+
+            codegen.funcCall(retLhs, API_PREFIX_MARSHAL + api.origName,
+                             [VULKAN_STREAM_VAR_NAME] + list(
+                                 map(lambda p: p.paramName, api.parameters)))
+
+            if retTypeName != "void":
+                codegen.stmt("return res")
+
+        self.frontendWrapper = \
+            VulkanAPIWrapper(
+                API_PREFIX_FRONTEND,
+                [],
+                None,
+                frontendDefFunc)
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+        self.module.appendHeader(
+            self.frontendWrapper.makeDecl(self.typeInfo, name))
+        self.module.appendImpl(
+            self.validateWrapper.makeDefinition(
+                self.typeInfo, name, isStatic=True))
+        self.module.appendImpl(
+            self.frontendWrapper.makeDefinition(self.typeInfo, name))
diff --git a/registry/vulkan/scripts/cereal/functable.py b/registry/vulkan/scripts/cereal/functable.py
new file mode 100644
index 0000000..58aa642
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/functable.py
@@ -0,0 +1,324 @@
+from .common.codegen import CodeGen, VulkanWrapperGenerator
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType
+from .common.vulkantypes import EXCLUDED_APIS
+
+RESOURCE_TRACKER_ENTRIES = [
+    "vkEnumerateInstanceExtensionProperties",
+    "vkEnumerateDeviceExtensionProperties",
+    "vkEnumeratePhysicalDevices",
+    "vkAllocateMemory",
+    "vkFreeMemory",
+    "vkCreateImage",
+    "vkDestroyImage",
+    "vkGetImageMemoryRequirements",
+    "vkGetImageMemoryRequirements2",
+    "vkGetImageMemoryRequirements2KHR",
+    "vkBindImageMemory",
+    "vkBindImageMemory2",
+    "vkBindImageMemory2KHR",
+    "vkCreateBuffer",
+    "vkDestroyBuffer",
+    "vkGetBufferMemoryRequirements",
+    "vkGetBufferMemoryRequirements2",
+    "vkGetBufferMemoryRequirements2KHR",
+    "vkBindBufferMemory",
+    "vkBindBufferMemory2",
+    "vkBindBufferMemory2KHR",
+    "vkCreateSemaphore",
+    "vkDestroySemaphore",
+    "vkQueueSubmit",
+    "vkQueueWaitIdle",
+    "vkImportSemaphoreFdKHR",
+    "vkGetSemaphoreFdKHR",
+    # Warning: These need to be defined in vk.xml (currently no-op) {
+    "vkGetMemoryFuchsiaHandleKHR",
+    "vkGetMemoryFuchsiaHandlePropertiesKHR",
+    "vkGetSemaphoreFuchsiaHandleKHR",
+    "vkImportSemaphoreFuchsiaHandleKHR",
+    # } end Warning: These need to be defined in vk.xml (currently no-op)
+    "vkGetAndroidHardwareBufferPropertiesANDROID",
+    "vkGetMemoryAndroidHardwareBufferANDROID",
+    "vkCreateSamplerYcbcrConversion",
+    "vkDestroySamplerYcbcrConversion",
+    "vkCreateSamplerYcbcrConversionKHR",
+    "vkDestroySamplerYcbcrConversionKHR",
+    "vkUpdateDescriptorSetWithTemplate",
+    "vkGetPhysicalDeviceImageFormatProperties2",
+    "vkGetPhysicalDeviceImageFormatProperties2KHR",
+    "vkBeginCommandBuffer",
+    "vkEndCommandBuffer",
+    "vkResetCommandBuffer",
+    "vkCreateImageView",
+    "vkCreateSampler",
+    "vkGetPhysicalDeviceExternalFenceProperties",
+    "vkGetPhysicalDeviceExternalFencePropertiesKHR",
+    "vkCreateFence",
+    "vkResetFences",
+    "vkImportFenceFdKHR",
+    "vkGetFenceFdKHR",
+    "vkWaitForFences",
+    "vkCreateDescriptorPool",
+    "vkDestroyDescriptorPool",
+    "vkResetDescriptorPool",
+    "vkAllocateDescriptorSets",
+    "vkFreeDescriptorSets",
+    "vkCreateDescriptorSetLayout",
+    "vkUpdateDescriptorSets",
+    "vkCmdExecuteCommands",
+    "vkCmdBindDescriptorSets",
+    "vkDestroyDescriptorSetLayout",
+    "vkAllocateCommandBuffers",
+    "vkQueueSignalReleaseImageANDROID",
+]
+
+SUCCESS_VAL = {
+    "VkResult" : ["VK_SUCCESS"],
+}
+
+POSTPROCESSES = {
+    "vkResetCommandPool" : """if (vkResetCommandPool_VkResult_return == VK_SUCCESS) {
+        ResourceTracker::get()->resetCommandPoolStagingInfo(commandPool);
+    }""",
+    "vkAllocateCommandBuffers" : """if (vkAllocateCommandBuffers_VkResult_return == VK_SUCCESS) {
+        ResourceTracker::get()->addToCommandPool(pAllocateInfo->commandPool, pAllocateInfo->commandBufferCount, pCommandBuffers);
+    }""",
+}
+
+def is_cmdbuf_dispatch(api):
+    return "VkCommandBuffer" == api.parameters[0].typeName
+
+def is_queue_dispatch(api):
+    return "VkQueue" == api.parameters[0].typeName
+
+class VulkanFuncTable(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+        self.typeInfo = typeInfo
+        self.cgen = CodeGen()
+        self.entries = []
+        self.entryFeatures = []
+        self.feature = None
+
+    def onBegin(self,):
+        cgen = self.cgen
+        cgen.line("static void sOnInvalidDynamicallyCheckedCall(const char* apiname, const char* neededFeature)")
+        cgen.beginBlock()
+        cgen.stmt("ALOGE(\"invalid call to %s: %s not supported\", apiname, neededFeature)")
+        cgen.stmt("abort()")
+        cgen.endBlock()
+        self.module.appendImpl(cgen.swapCode())
+        pass
+
+    def onBeginFeature(self, featureName):
+        self.feature = featureName
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        typeInfo = self.typeInfo
+        cgen = self.cgen
+        api = typeInfo.apis[name]
+        self.entries.append(api)
+        self.entryFeatures.append(self.feature)
+
+        def genEncoderOrResourceTrackerCall(cgen, api, declareResources=True):
+            cgen.stmt("AEMU_SCOPED_TRACE(\"%s\")" % api.name)
+
+            if is_cmdbuf_dispatch(api):
+                cgen.stmt("auto vkEnc = ResourceTracker::getCommandBufferEncoder(commandBuffer)")
+            elif is_queue_dispatch(api):
+                cgen.stmt("auto vkEnc = ResourceTracker::getQueueEncoder(queue)")
+            else:
+                cgen.stmt("auto vkEnc = ResourceTracker::getThreadLocalEncoder()")
+            callLhs = None
+            retTypeName = api.getRetTypeExpr()
+            if retTypeName != "void":
+                retVar = api.getRetVarExpr()
+                cgen.stmt("%s %s = (%s)0" % (retTypeName, retVar, retTypeName))
+                callLhs = retVar
+
+            if name in RESOURCE_TRACKER_ENTRIES:
+                if declareResources:
+                    cgen.stmt("auto resources = ResourceTracker::get()")
+                cgen.funcCall(
+                    callLhs, "resources->" + "on_" + api.name,
+                    ["vkEnc"] + SUCCESS_VAL.get(retTypeName, []) + \
+                    [p.paramName for p in api.parameters])
+            else:
+                cgen.funcCall(
+                    callLhs, "vkEnc->" + api.name, [p.paramName for p in api.parameters] + ["true /* do lock */"])
+
+            if name in POSTPROCESSES:
+                cgen.line(POSTPROCESSES[name])
+
+            if retTypeName != "void":
+                cgen.stmt("return %s" % retVar)
+
+
+        api_entry = api.withModifiedName("entry_" + api.name)
+
+        cgen.line("static " + self.cgen.makeFuncProto(api_entry))
+        cgen.beginBlock()
+        genEncoderOrResourceTrackerCall(cgen, api)
+        cgen.endBlock()
+
+        if self.isDeviceDispatch(api) and self.feature != "VK_VERSION_1_0":
+            api_entry_dyn_check = api.withModifiedName("dynCheck_entry_" + api.name)
+            cgen.line("static " + self.cgen.makeFuncProto(api_entry_dyn_check))
+            cgen.beginBlock()
+            if self.feature == "VK_VERSION_1_1":
+                cgen.stmt("auto resources = ResourceTracker::get()")
+                cgen.beginIf("resources->getApiVersionFromDevice(device) < VK_API_VERSION_1_1")
+                cgen.stmt("sOnInvalidDynamicallyCheckedCall(\"%s\", \"%s\")" % (api.name, self.feature))
+                cgen.endIf()
+            elif self.feature != "VK_VERSION_1_0":
+                cgen.stmt("auto resources = ResourceTracker::get()")
+                cgen.beginIf("!resources->hasDeviceExtension(device, \"%s\")" % self.feature)
+                cgen.stmt("sOnInvalidDynamicallyCheckedCall(\"%s\", \"%s\")" % (api.name, self.feature))
+                cgen.endIf()
+            else:
+                print("About to generate a frivolous api!: dynCheck entry: %s" % api.name)
+                raise
+            genEncoderOrResourceTrackerCall(cgen, api, declareResources = False)
+            cgen.endBlock()
+
+        self.module.appendImpl(cgen.swapCode())
+
+    def onEnd(self,):
+        getProcAddressDecl = "void* goldfish_vulkan_get_proc_address(const char* name)"
+        self.module.appendHeader(getProcAddressDecl + ";\n")
+        self.module.appendImpl(getProcAddressDecl)
+        self.cgen.beginBlock()
+
+        prevFeature = None
+        for e, f in zip(self.entries, self.entryFeatures):
+            featureEndif = prevFeature is not None and (f != prevFeature)
+            featureif = not featureEndif and (f != prevFeature)
+
+            if featureEndif:
+                self.cgen.leftline("#endif")
+                self.cgen.leftline("#ifdef %s" % f)
+
+            if featureif:
+                self.cgen.leftline("#ifdef %s" % f)
+
+            self.cgen.beginIf("!strcmp(name, \"%s\")" % e.name)
+            if e.name in EXCLUDED_APIS:
+                self.cgen.stmt("return nullptr")
+            elif f == "VK_VERSION_1_1":
+                self.cgen.stmt("return nullptr")
+            elif f != "VK_VERSION_1_0":
+                self.cgen.stmt("return nullptr")
+            else:
+                self.cgen.stmt("return (void*)%s" % ("entry_" + e.name))
+            self.cgen.endIf()
+            prevFeature = f
+
+        self.cgen.leftline("#endif")
+
+        self.cgen.stmt("return nullptr")
+        self.cgen.endBlock()
+        self.module.appendImpl(self.cgen.swapCode())
+
+        getInstanceProcAddressDecl = "void* goldfish_vulkan_get_instance_proc_address(VkInstance instance, const char* name)"
+        self.module.appendHeader(getInstanceProcAddressDecl + ";\n")
+        self.module.appendImpl(getInstanceProcAddressDecl)
+        self.cgen.beginBlock()
+
+        self.cgen.stmt(
+            "auto resources = ResourceTracker::get()")
+        self.cgen.stmt(
+            "bool has1_1OrHigher = resources->getApiVersionFromInstance(instance) >= VK_API_VERSION_1_1")
+
+        prevFeature = None
+        for e, f in zip(self.entries, self.entryFeatures):
+            featureEndif = prevFeature is not None and (f != prevFeature)
+            featureif = not featureEndif and (f != prevFeature)
+
+            if featureEndif:
+                self.cgen.leftline("#endif")
+                self.cgen.leftline("#ifdef %s" % f)
+            
+            if featureif:
+                self.cgen.leftline("#ifdef %s" % f)
+
+            self.cgen.beginIf("!strcmp(name, \"%s\")" % e.name)
+
+            entryPointExpr = "(void*)%s" % ("entry_" + e.name)
+
+            if e.name in EXCLUDED_APIS:
+                self.cgen.stmt("return nullptr")
+            elif f == "VK_VERSION_1_1":
+                if self.isDeviceDispatch(e):
+                    self.cgen.stmt("return (void*)dynCheck_entry_%s" % e.name)
+                else:
+                    self.cgen.stmt( \
+                        "return has1_1OrHigher ? %s : nullptr" % \
+                        entryPointExpr)
+            elif f != "VK_VERSION_1_0":
+                if self.isDeviceDispatch(e):
+                    self.cgen.stmt("return (void*)dynCheck_entry_%s" % e.name)
+                else:
+                    self.cgen.stmt( \
+                        "bool hasExt = resources->hasInstanceExtension(instance, \"%s\")"  % f)
+                    self.cgen.stmt("return hasExt ? %s : nullptr" % entryPointExpr)
+            else:
+                self.cgen.stmt("return %s" % entryPointExpr)
+            self.cgen.endIf()
+            prevFeature = f
+
+        self.cgen.leftline("#endif")
+
+        self.cgen.stmt("return nullptr")
+        self.cgen.endBlock()
+        self.module.appendImpl(self.cgen.swapCode())
+
+        getDeviceProcAddressDecl = "void* goldfish_vulkan_get_device_proc_address(VkDevice device, const char* name)"
+        self.module.appendHeader(getDeviceProcAddressDecl + ";\n")
+        self.module.appendImpl(getDeviceProcAddressDecl)
+        self.cgen.beginBlock()
+
+        self.cgen.stmt(
+            "auto resources = ResourceTracker::get()")
+        self.cgen.stmt(
+            "bool has1_1OrHigher = resources->getApiVersionFromDevice(device) >= VK_API_VERSION_1_1")
+
+        prevFeature = None
+        for e, f in zip(self.entries, self.entryFeatures):
+            featureEndif = prevFeature is not None and (f != prevFeature)
+            featureif = not featureEndif and (f != prevFeature)
+
+            if featureEndif:
+                self.cgen.leftline("#endif")
+                self.cgen.leftline("#ifdef %s" % f)
+            
+            if featureif:
+                self.cgen.leftline("#ifdef %s" % f)
+
+            self.cgen.beginIf("!strcmp(name, \"%s\")" % e.name)
+
+            entryPointExpr = "(void*)%s" % ("entry_" + e.name)
+
+            if e.name in EXCLUDED_APIS:
+                self.cgen.stmt("return nullptr")
+            elif f == "VK_VERSION_1_1":
+                self.cgen.stmt( \
+                    "return has1_1OrHigher ? %s : nullptr" % \
+                    entryPointExpr)
+            elif f != "VK_VERSION_1_0":
+                self.cgen.stmt( \
+                    "bool hasExt = resources->hasDeviceExtension(device, \"%s\")"  % f)
+                self.cgen.stmt("return hasExt ? %s : nullptr" % entryPointExpr)
+            else:
+                self.cgen.stmt("return %s" % entryPointExpr)
+            self.cgen.endIf()
+            prevFeature = f
+
+        self.cgen.leftline("#endif")
+
+        self.cgen.stmt("return nullptr")
+        self.cgen.endBlock()
+
+        self.module.appendImpl(self.cgen.swapCode())
+
+    def isDeviceDispatch(self, api):
+        return len(api.parameters) > 0 and "VkDevice" == api.parameters[0].typeName
diff --git a/registry/vulkan/scripts/cereal/handlemap.py b/registry/vulkan/scripts/cereal/handlemap.py
new file mode 100644
index 0000000..6360e37
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/handlemap.py
@@ -0,0 +1,264 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .common.codegen import CodeGen
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, VulkanTypeIterator
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import STRUCT_EXTENSION_PARAM, STRUCT_EXTENSION_PARAM_FOR_WRITE
+
+class HandleMapCodegen(VulkanTypeIterator):
+    def __init__(self, cgen, inputVar, handlemapVarName, prefix, isHandleFunc):
+        self.cgen = cgen
+        self.inputVar = inputVar
+        self.prefix = prefix
+        self.handlemapVarName = handlemapVarName
+
+        def makeAccess(varName, asPtr = True):
+            return lambda t: self.cgen.generalAccess(t, parentVarName = varName, asPtr = asPtr)
+
+        def makeLengthAccess(varName):
+            return lambda t: self.cgen.generalLengthAccess(t, parentVarName = varName)
+
+        def makeLengthAccessGuard(varName):
+            return lambda t: self.cgen.generalLengthAccessGuard(t, parentVarName=varName)
+
+        self.exprAccessor = makeAccess(self.inputVar)
+        self.exprAccessorValue = makeAccess(self.inputVar, asPtr = False)
+        self.lenAccessor = makeLengthAccess(self.inputVar)
+        self.lenAccessorGuard = makeLengthAccessGuard(self.inputVar)
+
+        self.checked = False
+        self.isHandleFunc = isHandleFunc
+
+    def needSkip(self, vulkanType):
+        return False
+
+    def makeCastExpr(self, vulkanType):
+        return "(%s)" % (
+            self.cgen.makeCTypeDecl(vulkanType, useParamName=False))
+
+    def asNonConstCast(self, access, vulkanType):
+        if vulkanType.staticArrExpr:
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForAddressAccess().getForNonConstAccess()), access)
+        elif vulkanType.accessibleAsPointer():
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForNonConstAccess()), access)
+        else:
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForAddressAccess().getForNonConstAccess()), access)
+        return casted
+
+    def onCheck(self, vulkanType):
+        pass
+
+    def endCheck(self, vulkanType):
+        pass
+
+    def onCompoundType(self, vulkanType):
+
+        if self.needSkip(vulkanType):
+            self.cgen.line("// TODO: Unsupported : %s" %
+                           self.cgen.makeCTypeDecl(vulkanType))
+            return
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        isPtr = vulkanType.pointerIndirectionLevels > 0
+
+        if lenAccessGuard is not None:
+            self.cgen.beginIf(lenAccessGuard)
+
+        if isPtr:
+            self.cgen.beginIf(access)
+
+        if lenAccess is not None:
+
+            loopVar = "i"
+            access = "%s + %s" % (access, loopVar)
+            forInit = "uint32_t %s = 0" % loopVar
+            forCond = "%s < (uint32_t)%s" % (loopVar, lenAccess)
+            forIncr = "++%s" % loopVar
+
+            self.cgen.beginFor(forInit, forCond, forIncr)
+            
+        accessCasted = self.asNonConstCast(access, vulkanType)
+        self.cgen.funcCall(None, self.prefix + vulkanType.typeName,
+                           [self.handlemapVarName, accessCasted])
+
+        if lenAccess is not None:
+            self.cgen.endFor()
+
+        if isPtr:
+            self.cgen.endIf()
+
+        if lenAccessGuard is not None:
+            self.cgen.endIf()
+
+    def onString(self, vulkanType):
+        pass
+
+    def onStringArray(self, vulkanType):
+        pass
+
+    def onStaticArr(self, vulkanType):
+        if not self.isHandleFunc(vulkanType):
+            return
+
+        accessLhs = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+
+        self.cgen.stmt("%s->mapHandles_%s(%s%s, %s)" % \
+            (self.handlemapVarName, vulkanType.typeName,
+             self.makeCastExpr(vulkanType.getForAddressAccess().getForNonConstAccess()),
+             accessLhs, lenAccess))
+
+    def onStructExtension(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+
+        castedAccessExpr = "(%s)(%s)" % ("void*", access)
+        self.cgen.beginIf(access)
+        self.cgen.funcCall(None, self.prefix + "extension_struct",
+                           [self.handlemapVarName, castedAccessExpr])
+        self.cgen.endIf()
+
+    def onPointer(self, vulkanType):
+        if self.needSkip(vulkanType):
+            return
+
+        if not self.isHandleFunc(vulkanType):
+            return
+
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccess = "1" if lenAccess is None else lenAccess
+
+        self.cgen.beginIf(access)
+
+        self.cgen.stmt( \
+            "%s->mapHandles_%s(%s%s, %s)" % \
+            (self.handlemapVarName,
+             vulkanType.typeName,
+             self.makeCastExpr(vulkanType.getForNonConstAccess()),
+             access,
+             lenAccess))
+
+        self.cgen.endIf()
+
+    def onValue(self, vulkanType):
+        if not self.isHandleFunc(vulkanType):
+            return
+        access = self.exprAccessor(vulkanType)
+        self.cgen.stmt(
+            "%s->mapHandles_%s(%s%s)" % \
+            (self.handlemapVarName, vulkanType.typeName,
+             self.makeCastExpr(vulkanType.getForAddressAccess().getForNonConstAccess()),
+             access))
+
+class VulkanHandleMap(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.codegen = CodeGen()
+
+        self.handlemapPrefix = "handlemap_"
+        self.toMapVar = "toMap"
+        self.handlemapVarName = "handlemap"
+        self.handlemapParam = \
+            makeVulkanTypeSimple(False, "VulkanHandleMapping", 1,
+                                 self.handlemapVarName)
+        self.voidType = makeVulkanTypeSimple(False, "void", 0)
+
+        self.handlemapCodegen = \
+            HandleMapCodegen(
+                None,
+                self.toMapVar,
+                self.handlemapVarName,
+                self.handlemapPrefix,
+                lambda vtype : typeInfo.isHandleType(vtype.typeName))
+
+        self.knownDefs = {}
+
+        self.extensionHandlemapPrototype = \
+            VulkanAPI(self.handlemapPrefix + "extension_struct",
+                      self.voidType,
+                      [self.handlemapParam, STRUCT_EXTENSION_PARAM_FOR_WRITE])
+
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+        self.module.appendImpl(self.codegen.makeFuncDecl(
+            self.extensionHandlemapPrototype))
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+        if name in self.knownDefs:
+            return
+
+        category = self.typeInfo.categoryOf(name)
+
+        if category in ["struct", "union"] and alias:
+            self.module.appendHeader(
+                self.codegen.makeFuncAlias(self.handlemapPrefix + name,
+                                           self.handlemapPrefix + alias))
+
+        if category in ["struct", "union"] and not alias:
+
+            structInfo = self.typeInfo.structs[name]
+
+            typeFromName = \
+                lambda varname: \
+                    makeVulkanTypeSimple(varname == "from", name, 1, varname)
+
+            handlemapParams = \
+                [self.handlemapParam] + \
+                list(map(typeFromName, [self.toMapVar]))
+
+            handlemapPrototype = \
+                VulkanAPI(self.handlemapPrefix + name,
+                          self.voidType,
+                          handlemapParams)
+
+            def funcDefGenerator(cgen):
+                self.handlemapCodegen.cgen = cgen
+                for p in handlemapParams:
+                    cgen.stmt("(void)%s" % p.paramName)
+                for member in structInfo.members:
+                    iterateVulkanType(self.typeInfo, member,
+                                      self.handlemapCodegen)
+
+            self.module.appendHeader(
+                self.codegen.makeFuncDecl(handlemapPrototype))
+            self.module.appendImpl(
+                self.codegen.makeFuncImpl(handlemapPrototype, funcDefGenerator))
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
+
+        def forEachExtensionHandlemap(ext, castedAccess, cgen):
+            cgen.funcCall(None, self.handlemapPrefix + ext.name,
+                          [self.handlemapVarName, castedAccess])
+
+        self.module.appendImpl(
+            self.codegen.makeFuncImpl(
+                self.extensionHandlemapPrototype,
+                lambda cgen: self.emitForEachStructExtension(
+                    cgen,
+                    self.voidType,
+                    STRUCT_EXTENSION_PARAM_FOR_WRITE,
+                    forEachExtensionHandlemap)))
diff --git a/registry/vulkan/scripts/cereal/marshaling.py b/registry/vulkan/scripts/cereal/marshaling.py
new file mode 100644
index 0000000..25a78d6
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/marshaling.py
@@ -0,0 +1,1035 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from copy import copy
+import hashlib, sys
+
+from .common.codegen import CodeGen, VulkanAPIWrapper
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, VulkanTypeIterator, Atom, FuncExpr, FuncExprVal, FuncLambda
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import VULKAN_STREAM_VAR_NAME
+from .wrapperdefs import ROOT_TYPE_VAR_NAME, ROOT_TYPE_PARAM
+from .wrapperdefs import STREAM_RET_TYPE
+from .wrapperdefs import MARSHAL_INPUT_VAR_NAME
+from .wrapperdefs import UNMARSHAL_INPUT_VAR_NAME
+from .wrapperdefs import PARAMETERS_MARSHALING
+from .wrapperdefs import PARAMETERS_MARSHALING_GUEST
+from .wrapperdefs import STYPE_OVERRIDE
+from .wrapperdefs import STRUCT_EXTENSION_PARAM, STRUCT_EXTENSION_PARAM_FOR_WRITE, EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME
+from .wrapperdefs import API_PREFIX_MARSHAL
+from .wrapperdefs import API_PREFIX_UNMARSHAL
+
+from .marshalingdefs import KNOWN_FUNCTION_OPCODES, CUSTOM_MARSHAL_TYPES
+
+class VulkanMarshalingCodegen(VulkanTypeIterator):
+
+    def __init__(self,
+                 cgen,
+                 streamVarName,
+                 rootTypeVarName,
+                 inputVarName,
+                 marshalPrefix,
+                 direction = "write",
+                 forApiOutput = False,
+                 dynAlloc = False,
+                 mapHandles = True,
+                 handleMapOverwrites = False,
+                 doFiltering = True):
+        self.cgen = cgen
+        self.direction = direction
+        self.processSimple = "write" if self.direction == "write" else "read"
+        self.forApiOutput = forApiOutput
+
+        self.checked = False
+
+        self.streamVarName = streamVarName
+        self.rootTypeVarName = rootTypeVarName
+        self.inputVarName = inputVarName
+        self.marshalPrefix = marshalPrefix
+
+        self.exprAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.inputVarName, asPtr = True)
+        self.exprValueAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.inputVarName, asPtr = False)
+        self.exprPrimitiveValueAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.inputVarName, asPtr = False)
+        self.lenAccessor = lambda t: self.cgen.generalLengthAccess(t, parentVarName = self.inputVarName)
+        self.lenAccessorGuard = lambda t: self.cgen.generalLengthAccessGuard(
+            t, parentVarName=self.inputVarName)
+        self.filterVarAccessor = lambda t: self.cgen.filterVarAccess(t, parentVarName = self.inputVarName)
+
+        self.dynAlloc = dynAlloc
+        self.mapHandles = mapHandles
+        self.handleMapOverwrites = handleMapOverwrites
+        self.doFiltering = doFiltering
+
+    def getTypeForStreaming(self, vulkanType):
+        res = copy(vulkanType)
+
+        if not vulkanType.accessibleAsPointer():
+            res = res.getForAddressAccess()
+
+        if vulkanType.staticArrExpr:
+            res = res.getForAddressAccess()
+
+        if self.direction == "write":
+            return res
+        else:
+            return res.getForNonConstAccess()
+
+    def makeCastExpr(self, vulkanType):
+        return "(%s)" % (
+            self.cgen.makeCTypeDecl(vulkanType, useParamName=False))
+
+    def genStreamCall(self, vulkanType, toStreamExpr, sizeExpr):
+        varname = self.streamVarName
+        func = self.processSimple
+        cast = self.makeCastExpr(self.getTypeForStreaming(vulkanType))
+
+        self.cgen.stmt(
+            "%s->%s(%s%s, %s)" % (varname, func, cast, toStreamExpr, sizeExpr))
+
+    def genPrimitiveStreamCall(self, vulkanType, access):
+        varname = self.streamVarName
+
+        self.cgen.streamPrimitive(
+            self.typeInfo,
+            varname,
+            access,
+            vulkanType,
+            direction=self.direction)
+
+    def genHandleMappingCall(self, vulkanType, access, lenAccess):
+
+        if lenAccess is None:
+            lenAccess = "1"
+            handle64Bytes = "8"
+        else:
+            handle64Bytes = "%s * 8" % lenAccess
+
+        handle64Var = self.cgen.var()
+        if lenAccess != "1":
+            self.cgen.beginIf(lenAccess)
+            self.cgen.stmt("uint64_t* %s" % handle64Var)
+            self.cgen.stmt(
+                "%s->alloc((void**)&%s, %s * 8)" % \
+                (self.streamVarName, handle64Var, lenAccess))
+            handle64VarAccess = handle64Var
+            handle64VarType = \
+                makeVulkanTypeSimple(False, "uint64_t", 1, paramName=handle64Var)
+        else:
+            self.cgen.stmt("uint64_t %s" % handle64Var)
+            handle64VarAccess = "&%s" % handle64Var
+            handle64VarType = \
+                makeVulkanTypeSimple(False, "uint64_t", 0, paramName=handle64Var)
+
+        if self.direction == "write":
+            if self.handleMapOverwrites:
+                self.cgen.stmt(
+                    "static_assert(8 == sizeof(%s), \"handle map overwrite requres %s to be 8 bytes long\")" % \
+                            (vulkanType.typeName, vulkanType.typeName))
+                self.cgen.stmt(
+                    "%s->handleMapping()->mapHandles_%s((%s*)%s, %s)" %
+                    (self.streamVarName, vulkanType.typeName, vulkanType.typeName,
+                    access, lenAccess))
+                self.genStreamCall(vulkanType, access, "8 * %s" % lenAccess)
+            else:
+                self.cgen.stmt(
+                    "%s->handleMapping()->mapHandles_%s_u64(%s, %s, %s)" %
+                    (self.streamVarName, vulkanType.typeName,
+                    access,
+                    handle64VarAccess, lenAccess))
+                self.genStreamCall(handle64VarType, handle64VarAccess, handle64Bytes)
+        else:
+            self.genStreamCall(handle64VarType, handle64VarAccess, handle64Bytes)
+            self.cgen.stmt(
+                "%s->handleMapping()->mapHandles_u64_%s(%s, %s%s, %s)" %
+                (self.streamVarName, vulkanType.typeName,
+                handle64VarAccess,
+                self.makeCastExpr(vulkanType.getForNonConstAccess()), access,
+                lenAccess))
+
+        if lenAccess != "1":
+            self.cgen.endIf()
+
+    def doAllocSpace(self, vulkanType):
+        if self.dynAlloc and self.direction == "read":
+            access = self.exprAccessor(vulkanType)
+            lenAccess = self.lenAccessor(vulkanType)
+            sizeof = self.cgen.sizeofExpr( \
+                         vulkanType.getForValueAccess())
+            if lenAccess:
+                bytesExpr = "%s * %s" % (lenAccess, sizeof)
+            else:
+                bytesExpr = sizeof
+
+            self.cgen.stmt( \
+                "%s->alloc((void**)&%s, %s)" %
+                    (self.streamVarName,
+                     access, bytesExpr))
+
+    def getOptionalStringFeatureExpr(self, vulkanType):
+        if vulkanType.optionalStr is not None:
+            if vulkanType.optionalStr.startswith("streamFeature:"):
+                splitted = vulkanType.optionalStr.split(":")
+                featureExpr = "%s->getFeatureBits() & %s" % (self.streamVarName, splitted[1])
+                return featureExpr
+        return None
+
+    def onCheck(self, vulkanType):
+
+        if self.forApiOutput:
+            return
+
+        featureExpr = self.getOptionalStringFeatureExpr(vulkanType);
+
+        self.checked = True
+
+        access = self.exprAccessor(vulkanType)
+
+        needConsistencyCheck = False
+
+        self.cgen.line("// WARNING PTR CHECK")
+        if (self.dynAlloc and self.direction == "read") or self.direction == "write":
+            checkAccess = self.exprAccessor(vulkanType)
+            addrExpr = "&" + checkAccess
+            sizeExpr = self.cgen.sizeofExpr(vulkanType)
+        else:
+            checkName = "check_%s" % vulkanType.paramName
+            self.cgen.stmt("%s %s" % (
+                self.cgen.makeCTypeDecl(vulkanType, useParamName = False), checkName))
+            checkAccess = checkName
+            addrExpr = "&" + checkAccess
+            sizeExpr = self.cgen.sizeofExpr(vulkanType)
+            needConsistencyCheck = True
+
+        if featureExpr is not None:
+            self.cgen.beginIf(featureExpr)
+
+        self.genPrimitiveStreamCall(
+            vulkanType,
+            checkAccess)
+
+        if featureExpr is not None:
+            self.cgen.endIf()
+
+        if featureExpr is not None:
+            self.cgen.beginIf("(!(%s) || %s)" % (featureExpr, access))
+        else:
+            self.cgen.beginIf(access)
+
+        if needConsistencyCheck and featureExpr is None:
+            self.cgen.beginIf("!(%s)" % checkName)
+            self.cgen.stmt(
+                "fprintf(stderr, \"fatal: %s inconsistent between guest and host\\n\")" % (access))
+            self.cgen.endIf()
+
+
+    def onCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.cgen.beginIf("%s->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT" % self.streamVarName)
+        self.onCheck(vulkanType)
+
+    def endCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.endCheck(vulkanType)
+        self.cgen.endIf()
+        self.cgen.beginElse()
+
+    def finalCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.cgen.endElse()
+
+    def endCheck(self, vulkanType):
+
+        if self.checked:
+            self.cgen.endIf()
+            self.checked = False
+
+    def genFilterFunc(self, filterfunc, env):
+
+        def loop(expr, lambdaEnv={}):
+            def do_func(expr):
+                fnamestr = expr.name.name
+                if "not" == fnamestr:
+                    return "!(%s)" % (loop(expr.args[0], lambdaEnv))
+                if "eq" == fnamestr:
+                    return "(%s == %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "and" == fnamestr:
+                    return "(%s && %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "or" == fnamestr:
+                    return "(%s || %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "getfield" == fnamestr:
+                    ptrlevels = get_ptrlevels(expr.args[0].val.name)
+                    if ptrlevels == 0:
+                        return "%s.%s" % (loop(expr.args[0], lambdaEnv), expr.args[1].val)
+                    else:
+                        return "(%s(%s)).%s" % ("*" * ptrlevels, loop(expr.args[0], lambdaEnv), expr.args[1].val)
+
+                if "if" == fnamestr:
+                    return "((%s) ? (%s) : (%s))" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv), loop(expr.args[2], lambdaEnv))
+
+                return "%s(%s)" % (fnamestr, ", ".join(map(lambda e: loop(e, lambdaEnv), expr.args)))
+
+            def do_expratom(atomname, lambdaEnv= {}):
+                if lambdaEnv.get(atomname, None) is not None:
+                    return atomname
+
+                enventry = env.get(atomname, None)
+                if None != enventry:
+                    return self.getEnvAccessExpr(atomname)
+                return atomname
+
+            def get_ptrlevels(atomname, lambdaEnv= {}):
+                if lambdaEnv.get(atomname, None) is not None:
+                    return 0
+
+                enventry = env.get(atomname, None)
+                if None != enventry:
+                    return self.getPointerIndirectionLevels(atomname)
+
+                return 0
+
+            def do_exprval(expr, lambdaEnv= {}):
+                expratom = expr.val
+
+                if Atom == type(expratom):
+                    return do_expratom(expratom.name, lambdaEnv)
+
+                return "%s" % expratom
+
+            def do_lambda(expr, lambdaEnv= {}):
+                params = expr.vs
+                body = expr.body
+                newEnv = {}
+
+                for (k, v) in lambdaEnv.items():
+                    newEnv[k] = v
+
+                for p in params:
+                    newEnv[p.name] = p.typ
+
+                return "[](%s) { return %s; }" % (", ".join(list(map(lambda p: "%s %s" % (p.typ, p.name), params))), loop(body, lambdaEnv=newEnv))
+
+            if FuncExpr == type(expr):
+                return do_func(expr)
+            if FuncLambda == type(expr):
+                return do_lambda(expr)
+            elif FuncExprVal == type(expr):
+                return do_exprval(expr)
+
+        return loop(filterfunc)
+
+    def beginFilterGuard(self, vulkanType):
+        if vulkanType.filterVar == None:
+            return
+
+        if self.doFiltering == False:
+            return
+
+        filterVarAccess = self.getEnvAccessExpr(vulkanType.filterVar)
+
+        filterValsExpr = None
+        filterFuncExpr = None
+        filterExpr = None
+
+        filterFeature = "%s->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT" % self.streamVarName
+
+        if None != vulkanType.filterVals:
+            filterValsExpr = " || ".join(map(lambda filterval: "(%s == %s)" % (filterval, filterVarAccess), vulkanType.filterVals))
+
+        if None != vulkanType.filterFunc:
+            filterFuncExpr = self.genFilterFunc(vulkanType.filterFunc, self.currentStructInfo.environment)
+
+        if None != filterValsExpr and None != filterFuncExpr:
+            filterExpr = "%s || %s" % (filterValsExpr, filterFuncExpr)
+        elif None == filterValsExpr and None == filterFuncExpr:
+            # Assume is bool
+            self.cgen.beginIf(filterVarAccess)
+        elif None != filterValsExpr:
+            self.cgen.beginIf("(!(%s) || (%s))" % (filterFeature, filterValsExpr))
+        elif None != filterFuncExpr:
+            self.cgen.beginIf("(!(%s) || (%s))" % (filterFeature, filterFuncExpr))
+
+    def endFilterGuard(self, vulkanType, cleanupExpr=None):
+        if vulkanType.filterVar == None:
+            return
+
+        if self.doFiltering == False:
+            return
+
+        if cleanupExpr == None:
+            self.cgen.endIf()
+        else:
+            self.cgen.endIf()
+            self.cgen.beginElse()
+            self.cgen.stmt(cleanupExpr)
+            self.cgen.endElse()
+
+    def getEnvAccessExpr(self, varName):
+        parentEnvEntry = self.currentStructInfo.environment.get(varName, None)
+
+        if parentEnvEntry != None:
+            isParentMember = parentEnvEntry["structmember"]
+
+            if isParentMember:
+                envAccess = self.exprValueAccessor(list(filter(lambda member: member.paramName == varName, self.currentStructInfo.members))[0])
+            else:
+                envAccess = varName
+            return envAccess
+
+        return None
+
+    def getPointerIndirectionLevels(self, varName):
+        parentEnvEntry = self.currentStructInfo.environment.get(varName, None)
+
+        if parentEnvEntry != None:
+            isParentMember = parentEnvEntry["structmember"]
+
+            if isParentMember:
+                return list(filter(lambda member: member.paramName == varName, self.currentStructInfo.members))[0].pointerIndirectionLevels
+            else:
+                return 0
+            return 0
+
+        return 0
+
+
+    def onCompoundType(self, vulkanType):
+
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        self.beginFilterGuard(vulkanType)
+
+        if vulkanType.pointerIndirectionLevels > 0:
+            self.doAllocSpace(vulkanType)
+
+        if lenAccess is not None:
+            if lenAccessGuard is not None:
+                self.cgen.beginIf(lenAccessGuard)
+            loopVar = "i"
+            access = "%s + %s" % (access, loopVar)
+            forInit = "uint32_t %s = 0" % loopVar
+            forCond = "%s < (uint32_t)%s" % (loopVar, lenAccess)
+            forIncr = "++%s" % loopVar
+            self.cgen.beginFor(forInit, forCond, forIncr)
+
+        accessWithCast = "%s(%s)" % (self.makeCastExpr(
+            self.getTypeForStreaming(vulkanType)), access)
+
+        callParams = [self.streamVarName, self.rootTypeVarName, accessWithCast]
+
+        for (bindName, localName) in vulkanType.binds.items():
+            callParams.append(self.getEnvAccessExpr(localName))
+
+        self.cgen.funcCall(None, self.marshalPrefix + vulkanType.typeName,
+                           callParams)
+
+        if lenAccess is not None:
+            self.cgen.endFor()
+            if lenAccessGuard is not None:
+                self.cgen.endIf()
+
+        if self.direction == "read":
+            self.endFilterGuard(vulkanType, "%s = 0" % self.exprAccessor(vulkanType))
+        else:
+            self.endFilterGuard(vulkanType)
+
+    def onString(self, vulkanType):
+
+        access = self.exprAccessor(vulkanType)
+
+        if self.direction == "write":
+            self.cgen.stmt("%s->putString(%s)" % (self.streamVarName, access))
+        else:
+            castExpr = \
+                self.makeCastExpr( \
+                    self.getTypeForStreaming( \
+                        vulkanType.getForAddressAccess()))
+
+            self.cgen.stmt( \
+                "%s->loadStringInPlace(%s&%s)" % (self.streamVarName, castExpr, access))
+
+    def onStringArray(self, vulkanType):
+
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+
+        if self.direction == "write":
+            self.cgen.stmt("saveStringArray(%s, %s, %s)" % (self.streamVarName,
+                                                            access, lenAccess))
+        else:
+            castExpr = \
+                self.makeCastExpr( \
+                    self.getTypeForStreaming( \
+                        vulkanType.getForAddressAccess()))
+
+            self.cgen.stmt("%s->loadStringArrayInPlace(%s&%s)" % (self.streamVarName, castExpr, access))
+
+    def onStaticArr(self, vulkanType):
+        access = self.exprValueAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        finalLenExpr = "%s * %s" % (lenAccess, self.cgen.sizeofExpr(vulkanType))
+        self.genStreamCall(vulkanType, access, finalLenExpr)
+
+    # Old version VkEncoder may have some sType values conflict with VkDecoder
+    # of new versions. For host decoder, it should not carry the incorrect old
+    # sType values to the |forUnmarshaling| struct. Instead it should overwrite
+    # the sType value.
+    def overwriteSType(self, vulkanType):
+        if self.direction == "read":
+            sTypeParam = copy(vulkanType)
+            sTypeParam.paramName = "sType"
+            sTypeAccess = self.exprAccessor(sTypeParam)
+
+            typeName = vulkanType.parent.typeName
+            if typeName in STYPE_OVERRIDE:
+                self.cgen.stmt("%s = %s" %
+                               (sTypeAccess, STYPE_OVERRIDE[typeName]))
+
+    def onStructExtension(self, vulkanType):
+        self.overwriteSType(vulkanType)
+
+        sTypeParam = copy(vulkanType)
+        sTypeParam.paramName = "sType"
+
+        access = self.exprAccessor(vulkanType)
+        sizeVar = "%s_size" % vulkanType.paramName
+
+        if self.direction == "read":
+            castedAccessExpr = "(%s)(%s)" % ("void*", access)
+        else:
+            castedAccessExpr = access
+
+        sTypeAccess = self.exprAccessor(sTypeParam)
+        self.cgen.beginIf("%s == VK_STRUCTURE_TYPE_MAX_ENUM" %
+                          self.rootTypeVarName)
+        self.cgen.stmt("%s = %s" % (self.rootTypeVarName, sTypeAccess))
+        self.cgen.endIf()
+
+        if self.direction == "read" and self.dynAlloc:
+            self.cgen.stmt("size_t %s" % sizeVar)
+            self.cgen.stmt("%s = %s->getBe32()" % \
+                (sizeVar, self.streamVarName))
+            self.cgen.stmt("%s = nullptr" % access)
+            self.cgen.beginIf(sizeVar)
+            self.cgen.stmt( \
+                    "%s->alloc((void**)&%s, sizeof(VkStructureType))" %
+                    (self.streamVarName, access))
+
+            self.genStreamCall(vulkanType, access, "sizeof(VkStructureType)")
+            self.cgen.stmt("VkStructureType extType = *(VkStructureType*)(%s)" % access)
+            self.cgen.stmt( \
+                "%s->alloc((void**)&%s, %s(%s->getFeatureBits(), %s, %s))" %
+                (self.streamVarName, access, EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME, self.streamVarName, self.rootTypeVarName, access))
+            self.cgen.stmt("*(VkStructureType*)%s = extType" % access)
+
+            self.cgen.funcCall(None, self.marshalPrefix + "extension_struct",
+                               [self.streamVarName, self.rootTypeVarName, castedAccessExpr])
+            self.cgen.endIf()
+        else:
+
+            self.cgen.funcCall(None, self.marshalPrefix + "extension_struct",
+                               [self.streamVarName, self.rootTypeVarName, castedAccessExpr])
+
+
+    def onPointer(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+    
+        self.beginFilterGuard(vulkanType)
+        self.doAllocSpace(vulkanType)
+
+        if vulkanType.filterVar != None:
+            print("onPointer Needs filter: %s filterVar %s" % (access, vulkanType.filterVar))
+
+        if vulkanType.isHandleType() and self.mapHandles:
+            self.genHandleMappingCall(vulkanType, access, lenAccess)
+        else:
+            if self.typeInfo.isNonAbiPortableType(vulkanType.typeName):
+                if lenAccess is not None:
+                    if lenAccessGuard is not None:
+                        self.cgen.beginIf(lenAccessGuard)
+                    self.cgen.beginFor("uint32_t i = 0", "i < (uint32_t)%s" % lenAccess, "++i")
+                    self.genPrimitiveStreamCall(vulkanType.getForValueAccess(), "%s[i]" % access)
+                    self.cgen.endFor()
+                    if lenAccessGuard is not None:
+                        self.cgen.endIf()
+                else:
+                    self.genPrimitiveStreamCall(vulkanType.getForValueAccess(), "(*%s)" % access)
+            else:
+                if lenAccess is not None:
+                    finalLenExpr = "%s * %s" % (
+                        lenAccess, self.cgen.sizeofExpr(vulkanType.getForValueAccess()))
+                else:
+                    finalLenExpr = "%s" % (
+                        self.cgen.sizeofExpr(vulkanType.getForValueAccess()))
+                self.genStreamCall(vulkanType, access, finalLenExpr)
+
+        if self.direction == "read":
+            self.endFilterGuard(vulkanType, "%s = 0" % access)
+        else:
+            self.endFilterGuard(vulkanType)
+
+    def onValue(self, vulkanType):
+        self.beginFilterGuard(vulkanType)
+
+        if vulkanType.isHandleType() and self.mapHandles:
+            access = self.exprAccessor(vulkanType)
+            if vulkanType.filterVar != None:
+                print("onValue Needs filter: %s filterVar %s" % (access, vulkanType.filterVar))
+            self.genHandleMappingCall(
+                vulkanType.getForAddressAccess(), access, "1")
+        elif self.typeInfo.isNonAbiPortableType(vulkanType.typeName):
+            access = self.exprPrimitiveValueAccessor(vulkanType)
+            self.genPrimitiveStreamCall(vulkanType, access)
+        else:
+            access = self.exprAccessor(vulkanType)
+            self.genStreamCall(vulkanType, access, self.cgen.sizeofExpr(vulkanType))
+
+        self.endFilterGuard(vulkanType)
+
+    def streamLetParameter(self, structInfo, letParamInfo):
+        filterFeature = "%s->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT" % self.streamVarName
+        self.cgen.stmt("%s %s = 1" % (letParamInfo.typeName, letParamInfo.paramName))
+
+        self.cgen.beginIf(filterFeature)
+
+        if self.direction == "write":
+            bodyExpr = self.currentStructInfo.environment[letParamInfo.paramName]["body"]
+            self.cgen.stmt("%s = %s" % (letParamInfo.paramName, self.genFilterFunc(bodyExpr, self.currentStructInfo.environment)))
+
+        self.genPrimitiveStreamCall(letParamInfo, letParamInfo.paramName)
+
+        self.cgen.endIf()
+
+
+class VulkanMarshaling(VulkanWrapperGenerator):
+
+    def __init__(self, module, typeInfo, variant="host"):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.cgenHeader = CodeGen()
+        self.cgenImpl = CodeGen()
+
+        self.variant = variant
+
+        self.currentFeature = None
+        self.apiOpcodes = {}
+        self.dynAlloc = self.variant != "guest"
+
+        if self.variant == "guest":
+            self.marshalingParams = PARAMETERS_MARSHALING_GUEST
+        else:
+            self.marshalingParams = PARAMETERS_MARSHALING
+
+        self.writeCodegen = \
+            VulkanMarshalingCodegen(
+                None,
+                VULKAN_STREAM_VAR_NAME,
+                ROOT_TYPE_VAR_NAME,
+                MARSHAL_INPUT_VAR_NAME,
+                API_PREFIX_MARSHAL,
+                direction = "write")
+
+        self.readCodegen = \
+            VulkanMarshalingCodegen(
+                None,
+                VULKAN_STREAM_VAR_NAME,
+                ROOT_TYPE_VAR_NAME,
+                UNMARSHAL_INPUT_VAR_NAME,
+                API_PREFIX_UNMARSHAL,
+                direction = "read",
+                dynAlloc=self.dynAlloc)
+
+        self.knownDefs = {}
+
+        # Begin Vulkan API opcodes from something high
+        # that is not going to interfere with renderControl
+        # opcodes
+        self.beginOpcodeOld = 20000
+        self.endOpcodeOld = 30000
+
+        self.beginOpcode = 200000000
+        self.endOpcode = 300000000
+        self.knownOpcodes = set()
+
+        self.extensionMarshalPrototype = \
+            VulkanAPI(API_PREFIX_MARSHAL + "extension_struct",
+                      STREAM_RET_TYPE,
+                      self.marshalingParams +
+                      [STRUCT_EXTENSION_PARAM])
+
+        self.extensionUnmarshalPrototype = \
+            VulkanAPI(API_PREFIX_UNMARSHAL + "extension_struct",
+                      STREAM_RET_TYPE,
+                      self.marshalingParams +
+                      [STRUCT_EXTENSION_PARAM_FOR_WRITE])
+
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+        self.module.appendImpl(self.cgenImpl.makeFuncDecl(self.extensionMarshalPrototype))
+        self.module.appendImpl(self.cgenImpl.makeFuncDecl(self.extensionUnmarshalPrototype))
+
+    def onBeginFeature(self, featureName):
+        VulkanWrapperGenerator.onBeginFeature(self, featureName)
+        self.currentFeature = featureName
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+        if name in self.knownDefs:
+            return
+
+        category = self.typeInfo.categoryOf(name)
+
+        if category in ["struct", "union"] and alias:
+            self.module.appendHeader(
+                self.cgenHeader.makeFuncAlias(API_PREFIX_MARSHAL + name,
+                                              API_PREFIX_MARSHAL + alias))
+            self.module.appendHeader(
+                self.cgenHeader.makeFuncAlias(API_PREFIX_UNMARSHAL + name,
+                                              API_PREFIX_UNMARSHAL + alias))
+
+        if category in ["struct", "union"] and not alias:
+
+            structInfo = self.typeInfo.structs[name]
+
+            marshalParams = self.marshalingParams + \
+                [makeVulkanTypeSimple(True, name, 1, MARSHAL_INPUT_VAR_NAME)]
+
+            freeParams = []
+            letParams = []
+
+            for (envname, bindingInfo) in list(sorted(structInfo.environment.items(), key = lambda kv: kv[0])):
+                if None == bindingInfo["binding"]:
+                    freeParams.append(makeVulkanTypeSimple(True, bindingInfo["type"], 0, envname))
+                else:
+                    if not bindingInfo["structmember"]:
+                        letParams.append(makeVulkanTypeSimple(True, bindingInfo["type"], 0, envname))
+
+            marshalPrototype = \
+                VulkanAPI(API_PREFIX_MARSHAL + name,
+                          STREAM_RET_TYPE,
+                          marshalParams + freeParams)
+
+            marshalPrototypeNoFilter = \
+                VulkanAPI(API_PREFIX_MARSHAL + name,
+                          STREAM_RET_TYPE,
+                          marshalParams)
+
+            def structMarshalingCustom(cgen):
+                self.writeCodegen.cgen = cgen
+                self.writeCodegen.currentStructInfo = structInfo
+                self.writeCodegen.cgen.stmt("(void)%s" % ROOT_TYPE_VAR_NAME)
+
+                marshalingCode = \
+                    CUSTOM_MARSHAL_TYPES[name]["common"] + \
+                    CUSTOM_MARSHAL_TYPES[name]["marshaling"].format(
+                        streamVarName=self.writeCodegen.streamVarName, 
+                        rootTypeVarName=self.writeCodegen.rootTypeVarName,
+                        inputVarName=self.writeCodegen.inputVarName,
+                        newInputVarName=self.writeCodegen.inputVarName + "_new")
+                for line in marshalingCode.split('\n'):
+                    cgen.line(line)
+
+            def structMarshalingDef(cgen):
+                self.writeCodegen.cgen = cgen
+                self.writeCodegen.currentStructInfo = structInfo
+                self.writeCodegen.cgen.stmt("(void)%s" % ROOT_TYPE_VAR_NAME)
+
+                if category == "struct":
+                    # marshal 'let' parameters first
+                    for letp in letParams:
+                        self.writeCodegen.streamLetParameter(self.typeInfo, letp)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.writeCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.writeCodegen)
+
+            def structMarshalingDefNoFilter(cgen):
+                self.writeCodegen.cgen = cgen
+                self.writeCodegen.currentStructInfo = structInfo
+                self.writeCodegen.doFiltering = False
+                self.writeCodegen.cgen.stmt("(void)%s" % ROOT_TYPE_VAR_NAME)
+
+                if category == "struct":
+                    # marshal 'let' parameters first
+                    for letp in letParams:
+                        self.writeCodegen.streamLetParameter(self.typeInfo, letp)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.writeCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.writeCodegen)
+                self.writeCodegen.doFiltering = True
+
+            self.module.appendHeader(
+                self.cgenHeader.makeFuncDecl(marshalPrototype))
+
+            if name in CUSTOM_MARSHAL_TYPES:
+                self.module.appendImpl(
+                    self.cgenImpl.makeFuncImpl(
+                        marshalPrototype, structMarshalingCustom))
+            else:
+                self.module.appendImpl(
+                    self.cgenImpl.makeFuncImpl(
+                        marshalPrototype, structMarshalingDef))
+
+            if freeParams != []:
+                self.module.appendHeader(
+                    self.cgenHeader.makeFuncDecl(marshalPrototypeNoFilter))
+                self.module.appendImpl(
+                    self.cgenImpl.makeFuncImpl(
+                        marshalPrototypeNoFilter, structMarshalingDefNoFilter))
+
+            unmarshalPrototype = \
+                VulkanAPI(API_PREFIX_UNMARSHAL + name,
+                          STREAM_RET_TYPE,
+                          self.marshalingParams + [makeVulkanTypeSimple(False, name, 1, UNMARSHAL_INPUT_VAR_NAME)] + freeParams)
+
+            unmarshalPrototypeNoFilter = \
+                VulkanAPI(API_PREFIX_UNMARSHAL + name,
+                          STREAM_RET_TYPE,
+                          self.marshalingParams + [makeVulkanTypeSimple(False, name, 1, UNMARSHAL_INPUT_VAR_NAME)])
+
+            def structUnmarshalingCustom(cgen):
+                self.readCodegen.cgen = cgen
+                self.readCodegen.currentStructInfo = structInfo
+                self.writeCodegen.cgen.stmt("(void)%s" % ROOT_TYPE_VAR_NAME)
+
+                unmarshalingCode = \
+                    CUSTOM_MARSHAL_TYPES[name]["common"] + \
+                    CUSTOM_MARSHAL_TYPES[name]["unmarshaling"].format(
+                        streamVarName=self.readCodegen.streamVarName,
+                        rootTypeVarName=self.readCodegen.rootTypeVarName,
+                        inputVarName=self.readCodegen.inputVarName,
+                        newInputVarName=self.readCodegen.inputVarName + "_new")
+                for line in unmarshalingCode.split('\n'):
+                    cgen.line(line)
+
+            def structUnmarshalingDef(cgen):
+                self.readCodegen.cgen = cgen
+                self.readCodegen.currentStructInfo = structInfo
+                self.writeCodegen.cgen.stmt("(void)%s" % ROOT_TYPE_VAR_NAME)
+
+                if category == "struct":
+                    # unmarshal 'let' parameters first
+                    for letp in letParams:
+                        self.readCodegen.streamLetParameter(self.typeInfo, letp)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.readCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.readCodegen)
+
+            def structUnmarshalingDefNoFilter(cgen):
+                self.readCodegen.cgen = cgen
+                self.readCodegen.currentStructInfo = structInfo
+                self.readCodegen.doFiltering = False
+                self.writeCodegen.cgen.stmt("(void)%s" % ROOT_TYPE_VAR_NAME)
+
+                if category == "struct":
+                    # unmarshal 'let' parameters first
+                    for letp in letParams:
+                        iterateVulkanType(self.typeInfo, letp, self.readCodegen)
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.readCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.readCodegen)
+                self.readCodegen.doFiltering = True
+
+            self.module.appendHeader(
+                self.cgenHeader.makeFuncDecl(unmarshalPrototype))
+
+            if name in CUSTOM_MARSHAL_TYPES:
+                self.module.appendImpl(
+                    self.cgenImpl.makeFuncImpl(
+                        unmarshalPrototype, structUnmarshalingCustom))
+            else:
+                self.module.appendImpl(
+                    self.cgenImpl.makeFuncImpl(
+                        unmarshalPrototype, structUnmarshalingDef))
+
+            if freeParams != []:
+                self.module.appendHeader(
+                    self.cgenHeader.makeFuncDecl(unmarshalPrototypeNoFilter))
+                self.module.appendImpl(
+                    self.cgenImpl.makeFuncImpl(
+                        unmarshalPrototypeNoFilter, structUnmarshalingDefNoFilter))
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+        if name in KNOWN_FUNCTION_OPCODES:
+            opcode = KNOWN_FUNCTION_OPCODES[name]
+        else:
+            hashCode = hashlib.sha256(name.encode()).hexdigest()[:8]
+            hashInt = int(hashCode, 16)
+            opcode = self.beginOpcode + hashInt % (self.endOpcode - self.beginOpcode)
+            hasHashCollision = False
+            while opcode in self.knownOpcodes:
+                hasHashCollision = True
+                opcode += 1
+            if hasHashCollision:
+                print("Hash collision occurred on function '{}'. "
+                      "Please add the following line to marshalingdefs.py:".format(name), file=sys.stderr)
+                print("----------------------", file=sys.stderr)
+                print("    \"{}\": {},".format(name, opcode), file=sys.stderr)
+                print("----------------------", file=sys.stderr)
+
+        self.module.appendHeader(
+            "#define OP_%s %d\n" % (name, opcode))
+        self.apiOpcodes[name] = (opcode, self.currentFeature)
+        self.knownOpcodes.add(opcode)
+
+    def doExtensionStructMarshalingCodegen(self, cgen, retType, extParam, forEach, funcproto, direction):
+        accessVar = "structAccess"
+        sizeVar = "currExtSize"
+        cgen.stmt("VkInstanceCreateInfo* %s = (VkInstanceCreateInfo*)(%s)" % (accessVar, extParam.paramName))
+        cgen.stmt("size_t %s = %s(%s->getFeatureBits(), %s, %s)" % (sizeVar,
+                                                                    EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME, VULKAN_STREAM_VAR_NAME, ROOT_TYPE_VAR_NAME, extParam.paramName))
+
+        cgen.beginIf("!%s && %s" % (sizeVar, extParam.paramName))
+
+        cgen.line("// unknown struct extension; skip and call on its pNext field");
+        cgen.funcCall(None, funcproto.name, [
+                      "vkStream", ROOT_TYPE_VAR_NAME, "(void*)%s->pNext" % accessVar])
+        cgen.stmt("return")
+
+        cgen.endIf()
+        cgen.beginElse()
+
+        cgen.line("// known or null extension struct")
+
+        if direction == "write":
+            cgen.stmt("vkStream->putBe32(%s)" % sizeVar)
+        elif not self.dynAlloc:
+            cgen.stmt("vkStream->getBe32()");
+
+        cgen.beginIf("!%s" % (sizeVar))
+        cgen.line("// exit if this was a null extension struct (size == 0 in this branch)")
+        cgen.stmt("return")
+        cgen.endIf()
+
+        cgen.endIf()
+
+        # Now we can do stream stuff
+        if direction == "write":
+            cgen.stmt("vkStream->write(%s, sizeof(VkStructureType))" % extParam.paramName)
+        elif not self.dynAlloc:
+            cgen.stmt("uint64_t pNext_placeholder")
+            placeholderAccess = "(&pNext_placeholder)"
+            cgen.stmt("vkStream->read((void*)(&pNext_placeholder), sizeof(VkStructureType))")
+            cgen.stmt("(void)pNext_placeholder")
+
+        def fatalDefault(cgen):
+            cgen.line("// fatal; the switch is only taken if the extension struct is known");
+            cgen.stmt("abort()")
+            pass
+
+        self.emitForEachStructExtension(
+            cgen,
+            retType,
+            extParam,
+            forEach,
+            defaultEmit=fatalDefault,
+            rootTypeVar=ROOT_TYPE_PARAM)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
+
+        def forEachExtensionMarshal(ext, castedAccess, cgen):
+            cgen.funcCall(None, API_PREFIX_MARSHAL + ext.name,
+                          [VULKAN_STREAM_VAR_NAME, ROOT_TYPE_VAR_NAME, castedAccess])
+
+        def forEachExtensionUnmarshal(ext, castedAccess, cgen):
+            cgen.funcCall(None, API_PREFIX_UNMARSHAL + ext.name,
+                          [VULKAN_STREAM_VAR_NAME, ROOT_TYPE_VAR_NAME, castedAccess])
+
+        self.module.appendImpl(
+            self.cgenImpl.makeFuncImpl(
+                self.extensionMarshalPrototype,
+                lambda cgen: self.doExtensionStructMarshalingCodegen(
+                    cgen,
+                    STREAM_RET_TYPE,
+                    STRUCT_EXTENSION_PARAM,
+                    forEachExtensionMarshal,
+                    self.extensionMarshalPrototype,
+                    "write")))
+
+        self.module.appendImpl(
+            self.cgenImpl.makeFuncImpl(
+                self.extensionUnmarshalPrototype,
+                lambda cgen: self.doExtensionStructMarshalingCodegen(
+                    cgen,
+                    STREAM_RET_TYPE,
+                    STRUCT_EXTENSION_PARAM_FOR_WRITE,
+                    forEachExtensionUnmarshal,
+                    self.extensionUnmarshalPrototype,
+                    "read")))
+
+        opcode2stringPrototype = \
+            VulkanAPI("api_opcode_to_string",
+                          makeVulkanTypeSimple(True, "char", 1, "none"),
+                          [ makeVulkanTypeSimple(True, "uint32_t", 0, "opcode") ])
+
+        self.module.appendHeader(
+            self.cgenHeader.makeFuncDecl(opcode2stringPrototype))
+
+        def emitOpcode2StringImpl(apiOpcodes, cgen):
+            cgen.line("switch(opcode)")
+            cgen.beginBlock()
+
+            currFeature = None
+
+            for (name, (opcodeNum, feature)) in sorted(apiOpcodes.items(), key = lambda x : x[1][0]):
+                if not currFeature:
+                    cgen.leftline("#ifdef %s" % feature)
+                    currFeature = feature
+
+                if currFeature and feature != currFeature:
+                    cgen.leftline("#endif")
+                    cgen.leftline("#ifdef %s" % feature)
+                    currFeature = feature
+
+                cgen.line("case OP_%s:" % name)
+                cgen.beginBlock()
+                cgen.stmt("return \"OP_%s\"" % name)
+                cgen.endBlock()
+
+            if currFeature:
+                cgen.leftline("#endif")
+
+            cgen.line("default:")
+            cgen.beginBlock()
+            cgen.stmt("return \"OP_UNKNOWN_API_CALL\"")
+            cgen.endBlock()
+
+            cgen.endBlock()
+
+        self.module.appendImpl(
+            self.cgenImpl.makeFuncImpl(
+                opcode2stringPrototype,
+                lambda cgen: emitOpcode2StringImpl(self.apiOpcodes, cgen)))
+
+        self.module.appendHeader(
+            "#define OP_vkFirst_old %d\n" % (self.beginOpcodeOld))
+        self.module.appendHeader(
+            "#define OP_vkLast_old %d\n" % (self.endOpcodeOld))
+        self.module.appendHeader(
+            "#define OP_vkFirst %d\n" % (self.beginOpcode))
+        self.module.appendHeader(
+            "#define OP_vkLast %d\n" % (self.endOpcode))
diff --git a/registry/vulkan/scripts/cereal/marshalingdefs.py b/registry/vulkan/scripts/cereal/marshalingdefs.py
new file mode 100644
index 0000000..19b08d1
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/marshalingdefs.py
@@ -0,0 +1,529 @@
+# Copyright (c) 2021 The Android Open Source Project
+# Copyright (c) 2021 Google 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.
+
+KNOWN_FUNCTION_OPCODES = {
+    "vkCreateInstance": 20000,
+    "vkDestroyInstance": 20001,
+    "vkEnumeratePhysicalDevices": 20002,
+    "vkGetPhysicalDeviceFeatures": 20003,
+    "vkGetPhysicalDeviceFormatProperties": 20004,
+    "vkGetPhysicalDeviceImageFormatProperties": 20005,
+    "vkGetPhysicalDeviceProperties": 20006,
+    "vkGetPhysicalDeviceQueueFamilyProperties": 20007,
+    "vkGetPhysicalDeviceMemoryProperties": 20008,
+    "vkGetInstanceProcAddr": 20009,
+    "vkGetDeviceProcAddr": 20010,
+    "vkCreateDevice": 20011,
+    "vkDestroyDevice": 20012,
+    "vkEnumerateInstanceExtensionProperties": 20013,
+    "vkEnumerateDeviceExtensionProperties": 20014,
+    "vkEnumerateInstanceLayerProperties": 20015,
+    "vkEnumerateDeviceLayerProperties": 20016,
+    "vkGetDeviceQueue": 20017,
+    "vkQueueSubmit": 20018,
+    "vkQueueWaitIdle": 20019,
+    "vkDeviceWaitIdle": 20020,
+    "vkAllocateMemory": 20021,
+    "vkFreeMemory": 20022,
+    "vkMapMemory": 20023,
+    "vkUnmapMemory": 20024,
+    "vkFlushMappedMemoryRanges": 20025,
+    "vkInvalidateMappedMemoryRanges": 20026,
+    "vkGetDeviceMemoryCommitment": 20027,
+    "vkBindBufferMemory": 20028,
+    "vkBindImageMemory": 20029,
+    "vkGetBufferMemoryRequirements": 20030,
+    "vkGetImageMemoryRequirements": 20031,
+    "vkGetImageSparseMemoryRequirements": 20032,
+    "vkGetPhysicalDeviceSparseImageFormatProperties": 20033,
+    "vkQueueBindSparse": 20034,
+    "vkCreateFence": 20035,
+    "vkDestroyFence": 20036,
+    "vkResetFences": 20037,
+    "vkGetFenceStatus": 20038,
+    "vkWaitForFences": 20039,
+    "vkCreateSemaphore": 20040,
+    "vkDestroySemaphore": 20041,
+    "vkCreateEvent": 20042,
+    "vkDestroyEvent": 20043,
+    "vkGetEventStatus": 20044,
+    "vkSetEvent": 20045,
+    "vkResetEvent": 20046,
+    "vkCreateQueryPool": 20047,
+    "vkDestroyQueryPool": 20048,
+    "vkGetQueryPoolResults": 20049,
+    "vkCreateBuffer": 20050,
+    "vkDestroyBuffer": 20051,
+    "vkCreateBufferView": 20052,
+    "vkDestroyBufferView": 20053,
+    "vkCreateImage": 20054,
+    "vkDestroyImage": 20055,
+    "vkGetImageSubresourceLayout": 20056,
+    "vkCreateImageView": 20057,
+    "vkDestroyImageView": 20058,
+    "vkCreateShaderModule": 20059,
+    "vkDestroyShaderModule": 20060,
+    "vkCreatePipelineCache": 20061,
+    "vkDestroyPipelineCache": 20062,
+    "vkGetPipelineCacheData": 20063,
+    "vkMergePipelineCaches": 20064,
+    "vkCreateGraphicsPipelines": 20065,
+    "vkCreateComputePipelines": 20066,
+    "vkDestroyPipeline": 20067,
+    "vkCreatePipelineLayout": 20068,
+    "vkDestroyPipelineLayout": 20069,
+    "vkCreateSampler": 20070,
+    "vkDestroySampler": 20071,
+    "vkCreateDescriptorSetLayout": 20072,
+    "vkDestroyDescriptorSetLayout": 20073,
+    "vkCreateDescriptorPool": 20074,
+    "vkDestroyDescriptorPool": 20075,
+    "vkResetDescriptorPool": 20076,
+    "vkAllocateDescriptorSets": 20077,
+    "vkFreeDescriptorSets": 20078,
+    "vkUpdateDescriptorSets": 20079,
+    "vkCreateFramebuffer": 20080,
+    "vkDestroyFramebuffer": 20081,
+    "vkCreateRenderPass": 20082,
+    "vkDestroyRenderPass": 20083,
+    "vkGetRenderAreaGranularity": 20084,
+    "vkCreateCommandPool": 20085,
+    "vkDestroyCommandPool": 20086,
+    "vkResetCommandPool": 20087,
+    "vkAllocateCommandBuffers": 20088,
+    "vkFreeCommandBuffers": 20089,
+    "vkBeginCommandBuffer": 20090,
+    "vkEndCommandBuffer": 20091,
+    "vkResetCommandBuffer": 20092,
+    "vkCmdBindPipeline": 20093,
+    "vkCmdSetViewport": 20094,
+    "vkCmdSetScissor": 20095,
+    "vkCmdSetLineWidth": 20096,
+    "vkCmdSetDepthBias": 20097,
+    "vkCmdSetBlendConstants": 20098,
+    "vkCmdSetDepthBounds": 20099,
+    "vkCmdSetStencilCompareMask": 20100,
+    "vkCmdSetStencilWriteMask": 20101,
+    "vkCmdSetStencilReference": 20102,
+    "vkCmdBindDescriptorSets": 20103,
+    "vkCmdBindIndexBuffer": 20104,
+    "vkCmdBindVertexBuffers": 20105,
+    "vkCmdDraw": 20106,
+    "vkCmdDrawIndexed": 20107,
+    "vkCmdDrawIndirect": 20108,
+    "vkCmdDrawIndexedIndirect": 20109,
+    "vkCmdDispatch": 20110,
+    "vkCmdDispatchIndirect": 20111,
+    "vkCmdCopyBuffer": 20112,
+    "vkCmdCopyImage": 20113,
+    "vkCmdBlitImage": 20114,
+    "vkCmdCopyBufferToImage": 20115,
+    "vkCmdCopyImageToBuffer": 20116,
+    "vkCmdUpdateBuffer": 20117,
+    "vkCmdFillBuffer": 20118,
+    "vkCmdClearColorImage": 20119,
+    "vkCmdClearDepthStencilImage": 20120,
+    "vkCmdClearAttachments": 20121,
+    "vkCmdResolveImage": 20122,
+    "vkCmdSetEvent": 20123,
+    "vkCmdResetEvent": 20124,
+    "vkCmdWaitEvents": 20125,
+    "vkCmdPipelineBarrier": 20126,
+    "vkCmdBeginQuery": 20127,
+    "vkCmdEndQuery": 20128,
+    "vkCmdResetQueryPool": 20129,
+    "vkCmdWriteTimestamp": 20130,
+    "vkCmdCopyQueryPoolResults": 20131,
+    "vkCmdPushConstants": 20132,
+    "vkCmdBeginRenderPass": 20133,
+    "vkCmdNextSubpass": 20134,
+    "vkCmdEndRenderPass": 20135,
+    "vkCmdExecuteCommands": 20136,
+    "vkEnumerateInstanceVersion": 20137,
+    "vkBindBufferMemory2": 20138,
+    "vkBindImageMemory2": 20139,
+    "vkGetDeviceGroupPeerMemoryFeatures": 20140,
+    "vkCmdSetDeviceMask": 20141,
+    "vkCmdDispatchBase": 20142,
+    "vkEnumeratePhysicalDeviceGroups": 20143,
+    "vkGetImageMemoryRequirements2": 20144,
+    "vkGetBufferMemoryRequirements2": 20145,
+    "vkGetImageSparseMemoryRequirements2": 20146,
+    "vkGetPhysicalDeviceFeatures2": 20147,
+    "vkGetPhysicalDeviceProperties2": 20148,
+    "vkGetPhysicalDeviceFormatProperties2": 20149,
+    "vkGetPhysicalDeviceImageFormatProperties2": 20150,
+    "vkGetPhysicalDeviceQueueFamilyProperties2": 20151,
+    "vkGetPhysicalDeviceMemoryProperties2": 20152,
+    "vkGetPhysicalDeviceSparseImageFormatProperties2": 20153,
+    "vkTrimCommandPool": 20154,
+    "vkGetDeviceQueue2": 20155,
+    "vkCreateSamplerYcbcrConversion": 20156,
+    "vkDestroySamplerYcbcrConversion": 20157,
+    "vkCreateDescriptorUpdateTemplate": 20158,
+    "vkDestroyDescriptorUpdateTemplate": 20159,
+    "vkUpdateDescriptorSetWithTemplate": 20160,
+    "vkGetPhysicalDeviceExternalBufferProperties": 20161,
+    "vkGetPhysicalDeviceExternalFenceProperties": 20162,
+    "vkGetPhysicalDeviceExternalSemaphoreProperties": 20163,
+    "vkGetDescriptorSetLayoutSupport": 20164,
+    "vkDestroySurfaceKHR": 20165,
+    "vkGetPhysicalDeviceSurfaceSupportKHR": 20166,
+    "vkGetPhysicalDeviceSurfaceCapabilitiesKHR": 20167,
+    "vkGetPhysicalDeviceSurfaceFormatsKHR": 20168,
+    "vkGetPhysicalDeviceSurfacePresentModesKHR": 20169,
+    "vkCreateSwapchainKHR": 20170,
+    "vkDestroySwapchainKHR": 20171,
+    "vkGetSwapchainImagesKHR": 20172,
+    "vkAcquireNextImageKHR": 20173,
+    "vkQueuePresentKHR": 20174,
+    "vkGetDeviceGroupPresentCapabilitiesKHR": 20175,
+    "vkGetDeviceGroupSurfacePresentModesKHR": 20176,
+    "vkGetPhysicalDevicePresentRectanglesKHR": 20177,
+    "vkAcquireNextImage2KHR": 20178,
+    "vkGetPhysicalDeviceDisplayPropertiesKHR": 20179,
+    "vkGetPhysicalDeviceDisplayPlanePropertiesKHR": 20180,
+    "vkGetDisplayPlaneSupportedDisplaysKHR": 20181,
+    "vkGetDisplayModePropertiesKHR": 20182,
+    "vkCreateDisplayModeKHR": 20183,
+    "vkGetDisplayPlaneCapabilitiesKHR": 20184,
+    "vkCreateDisplayPlaneSurfaceKHR": 20185,
+    "vkCreateSharedSwapchainsKHR": 20186,
+    "vkCreateXlibSurfaceKHR": 20187,
+    "vkGetPhysicalDeviceXlibPresentationSupportKHR": 20188,
+    "vkCreateXcbSurfaceKHR": 20189,
+    "vkGetPhysicalDeviceXcbPresentationSupportKHR": 20190,
+    "vkCreateWaylandSurfaceKHR": 20191,
+    "vkGetPhysicalDeviceWaylandPresentationSupportKHR": 20192,
+    "vkCreateMirSurfaceKHR": 20193,
+    "vkGetPhysicalDeviceMirPresentationSupportKHR": 20194,
+    "vkCreateAndroidSurfaceKHR": 20195,
+    "vkCreateWin32SurfaceKHR": 20196,
+    "vkGetPhysicalDeviceWin32PresentationSupportKHR": 20197,
+    "vkGetPhysicalDeviceFeatures2KHR": 20198,
+    "vkGetPhysicalDeviceProperties2KHR": 20199,
+    "vkGetPhysicalDeviceFormatProperties2KHR": 20200,
+    "vkGetPhysicalDeviceImageFormatProperties2KHR": 20201,
+    "vkGetPhysicalDeviceQueueFamilyProperties2KHR": 20202,
+    "vkGetPhysicalDeviceMemoryProperties2KHR": 20203,
+    "vkGetPhysicalDeviceSparseImageFormatProperties2KHR": 20204,
+    "vkGetDeviceGroupPeerMemoryFeaturesKHR": 20205,
+    "vkCmdSetDeviceMaskKHR": 20206,
+    "vkCmdDispatchBaseKHR": 20207,
+    "vkTrimCommandPoolKHR": 20208,
+    "vkEnumeratePhysicalDeviceGroupsKHR": 20209,
+    "vkGetPhysicalDeviceExternalBufferPropertiesKHR": 20210,
+    "vkGetMemoryWin32HandleKHR": 20211,
+    "vkGetMemoryWin32HandlePropertiesKHR": 20212,
+    "vkGetMemoryFdKHR": 20213,
+    "vkGetMemoryFdPropertiesKHR": 20214,
+    "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR": 20215,
+    "vkImportSemaphoreWin32HandleKHR": 20216,
+    "vkGetSemaphoreWin32HandleKHR": 20217,
+    "vkImportSemaphoreFdKHR": 20218,
+    "vkGetSemaphoreFdKHR": 20219,
+    "vkCmdPushDescriptorSetKHR": 20220,
+    "vkCmdPushDescriptorSetWithTemplateKHR": 20221,
+    "vkCreateDescriptorUpdateTemplateKHR": 20222,
+    "vkDestroyDescriptorUpdateTemplateKHR": 20223,
+    "vkUpdateDescriptorSetWithTemplateKHR": 20224,
+    "vkCreateRenderPass2KHR": 20225,
+    "vkCmdBeginRenderPass2KHR": 20226,
+    "vkCmdNextSubpass2KHR": 20227,
+    "vkCmdEndRenderPass2KHR": 20228,
+    "vkGetSwapchainStatusKHR": 20229,
+    "vkGetPhysicalDeviceExternalFencePropertiesKHR": 20230,
+    "vkImportFenceWin32HandleKHR": 20231,
+    "vkGetFenceWin32HandleKHR": 20232,
+    "vkImportFenceFdKHR": 20233,
+    "vkGetFenceFdKHR": 20234,
+    "vkGetPhysicalDeviceSurfaceCapabilities2KHR": 20235,
+    "vkGetPhysicalDeviceSurfaceFormats2KHR": 20236,
+    "vkGetPhysicalDeviceDisplayProperties2KHR": 20237,
+    "vkGetPhysicalDeviceDisplayPlaneProperties2KHR": 20238,
+    "vkGetDisplayModeProperties2KHR": 20239,
+    "vkGetDisplayPlaneCapabilities2KHR": 20240,
+    "vkGetImageMemoryRequirements2KHR": 20241,
+    "vkGetBufferMemoryRequirements2KHR": 20242,
+    "vkGetImageSparseMemoryRequirements2KHR": 20243,
+    "vkCreateSamplerYcbcrConversionKHR": 20244,
+    "vkDestroySamplerYcbcrConversionKHR": 20245,
+    "vkBindBufferMemory2KHR": 20246,
+    "vkBindImageMemory2KHR": 20247,
+    "vkGetDescriptorSetLayoutSupportKHR": 20248,
+    "vkCmdDrawIndirectCountKHR": 20249,
+    "vkCmdDrawIndexedIndirectCountKHR": 20250,
+    "vkGetSwapchainGrallocUsageANDROID": 20251,
+    "vkAcquireImageANDROID": 20252,
+    "vkQueueSignalReleaseImageANDROID": 20253,
+    "vkCreateDebugReportCallbackEXT": 20254,
+    "vkDestroyDebugReportCallbackEXT": 20255,
+    "vkDebugReportMessageEXT": 20256,
+    "vkDebugMarkerSetObjectTagEXT": 20257,
+    "vkDebugMarkerSetObjectNameEXT": 20258,
+    "vkCmdDebugMarkerBeginEXT": 20259,
+    "vkCmdDebugMarkerEndEXT": 20260,
+    "vkCmdDebugMarkerInsertEXT": 20261,
+    "vkCmdDrawIndirectCountAMD": 20262,
+    "vkCmdDrawIndexedIndirectCountAMD": 20263,
+    "vkGetShaderInfoAMD": 20264,
+    "vkGetPhysicalDeviceExternalImageFormatPropertiesNV": 20265,
+    "vkGetMemoryWin32HandleNV": 20266,
+    "vkCreateViSurfaceNN": 20267,
+    "vkCmdBeginConditionalRenderingEXT": 20268,
+    "vkCmdEndConditionalRenderingEXT": 20269,
+    "vkCmdProcessCommandsNVX": 20270,
+    "vkCmdReserveSpaceForCommandsNVX": 20271,
+    "vkCreateIndirectCommandsLayoutNVX": 20272,
+    "vkDestroyIndirectCommandsLayoutNVX": 20273,
+    "vkCreateObjectTableNVX": 20274,
+    "vkDestroyObjectTableNVX": 20275,
+    "vkRegisterObjectsNVX": 20276,
+    "vkUnregisterObjectsNVX": 20277,
+    "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX": 20278,
+    "vkCmdSetViewportWScalingNV": 20279,
+    "vkReleaseDisplayEXT": 20280,
+    "vkAcquireXlibDisplayEXT": 20281,
+    "vkGetRandROutputDisplayEXT": 20282,
+    "vkGetPhysicalDeviceSurfaceCapabilities2EXT": 20283,
+    "vkDisplayPowerControlEXT": 20284,
+    "vkRegisterDeviceEventEXT": 20285,
+    "vkRegisterDisplayEventEXT": 20286,
+    "vkGetSwapchainCounterEXT": 20287,
+    "vkGetRefreshCycleDurationGOOGLE": 20288,
+    "vkGetPastPresentationTimingGOOGLE": 20289,
+    "vkCmdSetDiscardRectangleEXT": 20290,
+    "vkSetHdrMetadataEXT": 20291,
+    "vkCreateIOSSurfaceMVK": 20292,
+    "vkCreateMacOSSurfaceMVK": 20293,
+    "vkSetDebugUtilsObjectNameEXT": 20294,
+    "vkSetDebugUtilsObjectTagEXT": 20295,
+    "vkQueueBeginDebugUtilsLabelEXT": 20296,
+    "vkQueueEndDebugUtilsLabelEXT": 20297,
+    "vkQueueInsertDebugUtilsLabelEXT": 20298,
+    "vkCmdBeginDebugUtilsLabelEXT": 20299,
+    "vkCmdEndDebugUtilsLabelEXT": 20300,
+    "vkCmdInsertDebugUtilsLabelEXT": 20301,
+    "vkCreateDebugUtilsMessengerEXT": 20302,
+    "vkDestroyDebugUtilsMessengerEXT": 20303,
+    "vkSubmitDebugUtilsMessageEXT": 20304,
+    "vkGetAndroidHardwareBufferPropertiesANDROID": 20305,
+    "vkGetMemoryAndroidHardwareBufferANDROID": 20306,
+    "vkCmdSetSampleLocationsEXT": 20307,
+    "vkGetPhysicalDeviceMultisamplePropertiesEXT": 20308,
+    "vkCreateValidationCacheEXT": 20309,
+    "vkDestroyValidationCacheEXT": 20310,
+    "vkMergeValidationCachesEXT": 20311,
+    "vkGetValidationCacheDataEXT": 20312,
+    "vkGetMemoryHostPointerPropertiesEXT": 20313,
+    "vkCmdWriteBufferMarkerAMD": 20314,
+    "vkCmdSetCheckpointNV": 20315,
+    "vkGetQueueCheckpointDataNV": 20316,
+    "vkMapMemoryIntoAddressSpaceGOOGLE": 20317,
+    "vkRegisterImageColorBufferGOOGLE": 20318,
+    "vkRegisterBufferColorBufferGOOGLE": 20319,
+    "vkUpdateDescriptorSetWithTemplateSizedGOOGLE": 20320,
+    "vkBeginCommandBufferAsyncGOOGLE": 20321,
+    "vkEndCommandBufferAsyncGOOGLE": 20322,
+    "vkResetCommandBufferAsyncGOOGLE": 20323,
+    "vkCommandBufferHostSyncGOOGLE": 20324,
+    "vkCreateImageWithRequirementsGOOGLE": 20325,
+    "vkCreateBufferWithRequirementsGOOGLE": 20326,
+    "vkGetMemoryHostAddressInfoGOOGLE": 20327,
+    "vkFreeMemorySyncGOOGLE": 20328,
+    "vkQueueHostSyncGOOGLE": 20329,
+    "vkQueueSubmitAsyncGOOGLE": 20330,
+    "vkQueueWaitIdleAsyncGOOGLE": 20331,
+    "vkQueueBindSparseAsyncGOOGLE": 20332,
+    "vkGetLinearImageLayoutGOOGLE": 20333,
+    "vkGetMTLDeviceMVK": 20334,
+    "vkSetMTLTextureMVK": 20335,
+    "vkGetMTLTextureMVK": 20336,
+    "vkGetMTLBufferMVK": 20337,
+    "vkUseIOSurfaceMVK": 20338,
+    "vkGetIOSurfaceMVK": 20339,
+    "vkQueueFlushCommandsGOOGLE": 20340,
+}
+
+CUSTOM_MARSHAL_TYPES = {
+    "VkAccelerationStructureInstanceKHR": {
+        "common": """
+typedef struct VkAccelerationStructureInstanceKHRWithoutBitFields {
+    VkTransformMatrixKHR          transform;
+    uint32_t                      dwords[2];
+    uint64_t                      accelerationStructureReference;
+} VkAccelerationStructureInstanceKHRWithoutBitFields;
+""",
+        "marshaling": """
+const VkAccelerationStructureInstanceKHRWithoutBitFields* {newInputVarName} = (const VkAccelerationStructureInstanceKHRWithoutBitFields*)({inputVarName});
+marshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transform));
+for (uint32_t i = 0; i < 2; i++) {{
+    {streamVarName}->write((uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+}}
+{streamVarName}->write((uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+""",
+        "unmarshaling": """
+VkAccelerationStructureInstanceKHRWithoutBitFields* {newInputVarName} = (VkAccelerationStructureInstanceKHRWithoutBitFields*)({inputVarName});
+unmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transform));
+for (uint32_t i = 0; i < 2; i++) {{
+    {streamVarName}->read((uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+}}
+{streamVarName}->read((uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+""",
+        "reservedmarshaling": """
+(void)vkStream;
+const VkAccelerationStructureInstanceKHRWithoutBitFields* {newInputVarName} = (const VkAccelerationStructureInstanceKHRWithoutBitFields*)({inputVarName});
+reservedmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transform), ptr);
+for (uint32_t i = 0; i < 2; i++) {{
+    memcpy(*ptr, (uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}}
+memcpy(*ptr, (uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+*ptr += sizeof(uint64_t);
+""",
+        "reservedunmarshaling": """
+VkAccelerationStructureInstanceKHRWithoutBitFields* {newInputVarName} = (VkAccelerationStructureInstanceKHRWithoutBitFields*)({inputVarName});
+reservedunmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transform), ptr);
+for (uint32_t i = 0; i < 2; i++) {{
+    memcpy((uint32_t*)&({newInputVarName}->dwords[i]), *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}}
+memcpy((uint64_t*)&{newInputVarName}->accelerationStructureReference, *ptr, sizeof(uint64_t));
+*ptr += sizeof(uint64_t);
+""",
+    },
+    "VkAccelerationStructureMatrixMotionInstanceNV": {
+        "common": """
+typedef struct VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields {
+    VkTransformMatrixKHR          transformT0;
+    VkTransformMatrixKHR          transformT1;
+    uint32_t                      dwords[2];
+    uint64_t                      accelerationStructureReference;
+} VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields;
+""",
+        "marshaling": """
+const VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields* {newInputVarName} = (const VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields*)({inputVarName});
+marshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transformT0));
+marshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transformT1));
+for (uint32_t i = 0; i < 2; i++) {{
+    {streamVarName}->write((uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+}}
+{streamVarName}->write((uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+""",
+        "unmarshaling": """
+VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields* {newInputVarName} = (VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields*)({inputVarName});
+unmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transformT0));
+unmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transformT1));
+for (uint32_t i = 0; i < 2; i++) {{
+    {streamVarName}->read((uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+}}
+{streamVarName}->read((uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+""",
+        "reservedmarshaling": """
+(void)vkStream;
+const VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields* {newInputVarName} = (const VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields*)({inputVarName});
+reservedmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transformT0), ptr);
+reservedmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transformT1), ptr);
+for (uint32_t i = 0; i < 2; i++) {{
+    memcpy(*ptr, (uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}}
+memcpy(*ptr, (uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+*ptr += sizeof(uint64_t);
+""",
+        "reservedunmarshaling": """
+VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields* {newInputVarName} = (VkAccelerationStructureMatrixMotionInstanceNVWithoutBitFields*)({inputVarName});
+reservedunmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transformT0), ptr);
+reservedunmarshal_VkTransformMatrixKHR({streamVarName}, {rootTypeVarName}, (VkTransformMatrixKHR*)(&{newInputVarName}->transformT1), ptr);
+for (uint32_t i = 0; i < 2; i++) {{
+    memcpy((uint32_t*)&({newInputVarName}->dwords[i]), *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}}
+memcpy((uint64_t*)&{newInputVarName}->accelerationStructureReference, *ptr, sizeof(uint64_t));
+*ptr += sizeof(uint64_t);
+""",
+    },
+    "VkAccelerationStructureSRTMotionInstanceNV": {
+        "common": """
+typedef struct VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields {
+    VkSRTDataNV          transformT0;
+    VkSRTDataNV          transformT1;
+    uint32_t             dwords[2];
+    uint64_t             accelerationStructureReference;
+} VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields;
+""",
+        "marshaling": """
+const VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields* {newInputVarName} = (const VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields*)({inputVarName});
+marshal_VkSRTDataNV({streamVarName}, {rootTypeVarName}, (VkSRTDataNV*)(&{newInputVarName}->transformT0));
+marshal_VkSRTDataNV({streamVarName}, {rootTypeVarName}, (VkSRTDataNV*)(&{newInputVarName}->transformT1));
+for (uint32_t i = 0; i < 2; i++) {{
+    {streamVarName}->write((uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+}}
+{streamVarName}->write((uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+""",
+        "unmarshaling": """
+VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields* {newInputVarName} = (VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields*)({inputVarName});
+unmarshal_VkSRTDataNV({streamVarName}, {rootTypeVarName}, (VkSRTDataNV*)(&{newInputVarName}->transformT0));
+unmarshal_VkSRTDataNV({streamVarName}, {rootTypeVarName}, (VkSRTDataNV*)(&{newInputVarName}->transformT1));
+for (uint32_t i = 0; i < 2; i++) {{
+    {streamVarName}->read((uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+}}
+{streamVarName}->read((uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+""",
+        "reservedmarshaling": """
+(void)vkStream;
+const VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields* {newInputVarName} = (const VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields*)({inputVarName});
+reservedmarshal_VkSRTDataNV({streamVarName}, {rootTypeVarName}, (VkSRTDataNV*)(&{newInputVarName}->transformT0), ptr);
+reservedmarshal_VkSRTDataNV({streamVarName}, {rootTypeVarName}, (VkSRTDataNV*)(&{newInputVarName}->transformT1), ptr);
+for (uint32_t i = 0; i < 2; i++) {{
+    memcpy(*ptr, (uint32_t*)&({newInputVarName}->dwords[i]), sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}}
+memcpy(*ptr, (uint64_t*)&{newInputVarName}->accelerationStructureReference, sizeof(uint64_t));
+*ptr += sizeof(uint64_t);
+""",
+        "reservedunmarshaling": """
+VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields* {newInputVarName} = (VkAccelerationStructureSRTMotionInstanceNVWithoutBitFields*)({inputVarName});
+reservedunmarshal_VkSRTDataNV({streamVarName}, {rootTypeVarName}, (VkSRTDataNV*)(&{newInputVarName}->transformT0), ptr);
+reservedunmarshal_VkSRTDataNV({streamVarName}, {rootTypeVarName}, (VkSRTDataNV*)(&{newInputVarName}->transformT1), ptr);
+for (uint32_t i = 0; i < 2; i++) {{
+    memcpy((uint32_t*)&({newInputVarName}->dwords[i]), *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}}
+memcpy((uint64_t*)&{newInputVarName}->accelerationStructureReference, *ptr, sizeof(uint64_t));
+*ptr += sizeof(uint64_t);
+""",
+    },
+    "VkXcbSurfaceCreateInfoKHR": {
+        "common": """
+// This struct should never be marshaled / unmarshaled.
+__builtin_trap();
+""",
+        "marshaling": "",
+        "unmarshaling": "",
+        "reservedmarshaling": "",
+        "reservedunmarshaling": "",
+    },
+    "VkMetalSurfaceCreateInfoEXT": {
+        "common": """
+// This struct should never be marshaled / unmarshaled.
+__builtin_trap();
+""",
+        "marshaling": "",
+        "unmarshaling": "",
+        "reservedmarshaling": "",
+        "reservedunmarshaling": "",
+    },
+}
diff --git a/registry/vulkan/scripts/cereal/reservedmarshaling.py b/registry/vulkan/scripts/cereal/reservedmarshaling.py
new file mode 100644
index 0000000..a98aa73
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/reservedmarshaling.py
@@ -0,0 +1,1058 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+from copy import copy
+
+from .common.codegen import CodeGen, VulkanAPIWrapper
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, VulkanTypeIterator, Atom, FuncExpr, FuncExprVal, FuncLambda
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import VULKAN_STREAM_VAR_NAME
+from .wrapperdefs import ROOT_TYPE_VAR_NAME, ROOT_TYPE_PARAM
+from .wrapperdefs import STREAM_RET_TYPE
+from .wrapperdefs import MARSHAL_INPUT_VAR_NAME
+from .wrapperdefs import UNMARSHAL_INPUT_VAR_NAME
+from .wrapperdefs import PARAMETERS_MARSHALING
+from .wrapperdefs import PARAMETERS_MARSHALING_GUEST
+from .wrapperdefs import STYPE_OVERRIDE
+from .wrapperdefs import STRUCT_EXTENSION_PARAM, STRUCT_EXTENSION_PARAM_FOR_WRITE, EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME
+from .wrapperdefs import API_PREFIX_RESERVEDMARSHAL
+from .wrapperdefs import API_PREFIX_RESERVEDUNMARSHAL
+
+from .marshalingdefs import CUSTOM_MARSHAL_TYPES
+class VulkanReservedMarshalingCodegen(VulkanTypeIterator):
+    def __init__(self,
+                 cgen,
+                 streamVarName,
+                 rootTypeVarName,
+                 inputVarName,
+                 ptrVarName,
+                 marshalPrefix,
+                 handlemapPrefix,
+                 direction = "write",
+                 forApiOutput = False,
+                 dynAlloc = False,
+                 mapHandles = True,
+                 handleMapOverwrites = False,
+                 doFiltering = True,
+                 stackVar=None,
+                 stackArrSize=None):
+        self.cgen = cgen
+        self.direction = direction
+        self.processSimple = "write" if self.direction == "write" else "read"
+        self.forApiOutput = forApiOutput
+
+        self.checked = False
+
+        self.streamVarName = streamVarName
+        self.rootTypeVarName = rootTypeVarName
+        self.inputVarName = inputVarName
+        self.ptrVar = ptrVarName
+        self.marshalPrefix = marshalPrefix
+        self.handlemapPrefix = handlemapPrefix
+
+        self.exprAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.inputVarName, asPtr = True)
+        self.exprValueAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.inputVarName, asPtr = False)
+        self.exprPrimitiveValueAccessor = lambda t: self.cgen.generalAccess(t, parentVarName = self.inputVarName, asPtr = False)
+        self.lenAccessor = lambda t: self.cgen.generalLengthAccess(t, parentVarName = self.inputVarName)
+        self.lenAccessorGuard = lambda t: self.cgen.generalLengthAccessGuard(
+            t, parentVarName=self.inputVarName)
+        self.filterVarAccessor = lambda t: self.cgen.filterVarAccess(t, parentVarName = self.inputVarName)
+
+        self.dynAlloc = dynAlloc
+        self.mapHandles = mapHandles
+        self.handleMapOverwrites = handleMapOverwrites
+        self.doFiltering = doFiltering
+
+        self.stackVar = stackVar
+        self.stackArrSize = stackArrSize
+
+    def getTypeForStreaming(self, vulkanType):
+        res = copy(vulkanType)
+
+        if not vulkanType.accessibleAsPointer():
+            res = res.getForAddressAccess()
+
+        if vulkanType.staticArrExpr:
+            res = res.getForAddressAccess()
+
+        if self.direction == "write":
+            return res
+        else:
+            return res.getForNonConstAccess()
+
+    def makeCastExpr(self, vulkanType):
+        return "(%s)" % (
+            self.cgen.makeCTypeDecl(vulkanType, useParamName=False))
+
+    def genPtrIncr(self, sizeExpr):
+        self.cgen.stmt("*%s += %s" % (self.ptrVar, sizeExpr))
+
+    def genMemcpyAndIncr(self, varname, cast, toStreamExpr, sizeExpr, toBe = False, actualSize = 4):
+        if self.direction == "write":
+            self.cgen.stmt("memcpy(*%s, %s%s, %s)" % (varname, cast, toStreamExpr, sizeExpr))
+        else:
+            self.cgen.stmt("memcpy(%s%s, *%s, %s)" % (cast, toStreamExpr, varname, sizeExpr))
+
+        if toBe:
+            streamPrefix = "to"
+            if "read" == self.direction:
+                streamPrefix = "from"
+
+            streamMethod = streamPrefix
+
+            if 1 == actualSize:
+                streamMethod += "Byte"
+            elif 2 == actualSize:
+                streamMethod += "Be16"
+            elif 4 == actualSize:
+                streamMethod += "Be32"
+            elif 8 == actualSize:
+                streamMethod += "Be64"
+            else:
+                pass
+
+            if self.direction == "write":
+                self.cgen.stmt("android::base::Stream::%s((uint8_t*)*%s)" % (streamMethod, varname))
+            else:
+                self.cgen.stmt("android::base::Stream::%s((uint8_t*)%s)" % (streamMethod, toStreamExpr))
+
+        self.genPtrIncr(sizeExpr)
+
+    def genStreamCall(self, vulkanType, toStreamExpr, sizeExpr):
+        varname = self.ptrVar
+        cast = self.makeCastExpr(self.getTypeForStreaming(vulkanType))
+        self.genMemcpyAndIncr(varname, cast, toStreamExpr, sizeExpr)
+    
+    def genPrimitiveStreamCall(self, vulkanType, access):
+        varname = self.ptrVar
+        self.cgen.memcpyPrimitive(
+            self.typeInfo,
+            "(*" + varname + ")",
+            access,
+            vulkanType,
+            direction=self.direction)
+        self.genPtrIncr(str(self.cgen.countPrimitive(
+            self.typeInfo,
+            vulkanType)))
+
+    def genHandleMappingCall(self, vulkanType, access, lenAccess, lenAccessGuard):
+
+        if lenAccess is None:
+            lenAccess = "1"
+            handle64Bytes = "8"
+        else:
+            handle64Bytes = "%s * 8" % lenAccess
+
+        handle64Var = self.cgen.var()
+        if lenAccess != "1":
+            self.cgen.beginIf(lenAccess)
+            self.cgen.stmt("uint8_t* %s_ptr = (uint8_t*)(*%s)" % (handle64Var, self.ptrVar))
+            handle64VarAccess = handle64Var
+            handle64VarType = \
+                makeVulkanTypeSimple(False, "uint64_t", 1, paramName=handle64Var)
+        else:
+            self.cgen.stmt("uint64_t %s" % handle64Var)
+            handle64VarAccess = "&%s" % handle64Var
+            handle64VarType = \
+                makeVulkanTypeSimple(False, "uint64_t", 0, paramName=handle64Var)
+
+        if "" == self.handlemapPrefix:
+            mapFunc = ("(%s)" % vulkanType.typeName)
+            mapFunc64 = ("(%s)" % "uint64_t")
+        else:
+            mapFunc = self.handlemapPrefix + vulkanType.typeName
+            mapFunc64 = mapFunc
+
+        if self.direction == "write":
+            if self.handleMapOverwrites:
+                self.cgen.stmt(
+                    "static_assert(8 == sizeof(%s), \"handle map overwrite requres %s to be 8 bytes long\")" % \
+                            (vulkanType.typeName, vulkanType.typeName))
+                if "1" == lenAccess:
+                    self.cgen.stmt("*%s = (%s)%s(*%s)" % (access, vulkanType.typeName, mapFunc, access))
+                    self.genStreamCall(vulkanType, access, "8 * %s" % lenAccess)
+                else:
+                    if lenAccessGuard is not None:
+                        self.cgen.beginIf(lenAccessGuard)
+                    self.cgen.beginFor("uint32_t k = 0", "k < %s" % lenAccess, "++k")
+                    self.cgen.stmt("%s[k] = (%s)%s(%s[k])" % (access, vulkanType.typeName, mapFunc, access))
+                    self.cgen.endFor()
+                    if lenAccessGuard is not None:
+                        self.cgen.endIf()
+                    self.genPtrIncr("8 * %s" % lenAccess)
+            else:
+                if "1" == lenAccess:
+                    self.cgen.stmt("*%s = %s((*%s))" % (handle64VarAccess, mapFunc64, access))
+                    self.genStreamCall(handle64VarType, handle64VarAccess, handle64Bytes)
+                else:
+                    if lenAccessGuard is not None:
+                        self.cgen.beginIf(lenAccessGuard)
+                    self.cgen.beginFor("uint32_t k = 0", "k < %s" % lenAccess, "++k")
+                    self.cgen.stmt("uint64_t tmpval = %s(%s[k])" % (mapFunc64, access))
+                    self.cgen.stmt("memcpy(%s_ptr + k * 8, &tmpval, sizeof(uint64_t))" % (handle64Var))
+                    self.cgen.endFor()
+                    if lenAccessGuard is not None:
+                        self.cgen.endIf()
+                    self.genPtrIncr("8 * %s" % lenAccess)
+        else:
+            if "1" == lenAccess:
+                self.genStreamCall(handle64VarType, handle64VarAccess, handle64Bytes)
+                self.cgen.stmt("*%s%s = (%s)%s((%s)(*%s))" % (
+                    self.makeCastExpr(vulkanType.getForNonConstAccess()), access,
+                    vulkanType.typeName,mapFunc, vulkanType.typeName, handle64VarAccess))
+            else:
+                self.genPtrIncr("8 * %s" % lenAccess)
+                if lenAccessGuard is not None:
+                    self.cgen.beginIf(lenAccessGuard)
+                self.cgen.beginFor("uint32_t k = 0", "k < %s" % lenAccess, "++k")
+                self.cgen.stmt("uint64_t tmpval; memcpy(&tmpval, %s_ptr + k * 8, sizeof(uint64_t))" % handle64Var)
+                self.cgen.stmt("*((%s%s) + k) = (%s)%s((%s)tmpval)" % (
+                    self.makeCastExpr(vulkanType.getForNonConstAccess()), access,
+                    vulkanType.typeName, mapFunc, vulkanType.typeName))
+                if lenAccessGuard is not None:
+                    self.cgen.endIf()
+                self.cgen.endFor()
+
+        if lenAccess != "1":
+            self.cgen.endIf()
+
+    def doAllocSpace(self, vulkanType):
+        if self.dynAlloc and self.direction == "read":
+            access = self.exprAccessor(vulkanType)
+            lenAccess = self.lenAccessor(vulkanType)
+            sizeof = self.cgen.sizeofExpr( \
+                         vulkanType.getForValueAccess())
+            if lenAccess:
+                bytesExpr = "%s * %s" % (lenAccess, sizeof)
+            else:
+                bytesExpr = sizeof
+                lenAccess = "1"
+
+            if self.stackVar:
+                if self.stackArrSize != lenAccess:
+                    self.cgen.beginIf("%s <= %s" % (lenAccess, self.stackArrSize))
+
+                self.cgen.stmt( \
+                        "%s = %s%s" % (access, self.makeCastExpr(vulkanType.getForNonConstAccess()), self.stackVar))
+
+                if self.stackArrSize != lenAccess:
+                    self.cgen.endIf()
+                    self.cgen.beginElse()
+
+                if self.stackArrSize != lenAccess:
+                    self.cgen.stmt( \
+                            "%s->alloc((void**)&%s, %s)" %
+                            (self.streamVarName,
+                                access, bytesExpr))
+
+                if self.stackArrSize != lenAccess:
+                    self.cgen.endIf()
+            else:
+                self.cgen.stmt( \
+                        "%s->alloc((void**)&%s, %s)" %
+                        (self.streamVarName,
+                            access, bytesExpr))
+
+    def getOptionalStringFeatureExpr(self, vulkanType):
+        if vulkanType.optionalStr is not None:
+            if vulkanType.optionalStr.startswith("streamFeature:"):
+                splitted = vulkanType.optionalStr.split(":")
+                featureExpr = "%s->getFeatureBits() & %s" % (self.streamVarName, splitted[1])
+                return featureExpr
+        return None
+
+    def onCheck(self, vulkanType):
+
+        if self.forApiOutput:
+            return
+
+        featureExpr = self.getOptionalStringFeatureExpr(vulkanType);
+
+        self.checked = True
+
+        access = self.exprAccessor(vulkanType)
+
+        needConsistencyCheck = False
+
+        self.cgen.line("// WARNING PTR CHECK")
+        if (self.dynAlloc and self.direction == "read") or self.direction == "write":
+            checkAccess = self.exprAccessor(vulkanType)
+            addrExpr = "&" + checkAccess
+            sizeExpr = self.cgen.sizeofExpr(vulkanType)
+        else:
+            checkName = "check_%s" % vulkanType.paramName
+            self.cgen.stmt("%s %s" % (
+                self.cgen.makeCTypeDecl(vulkanType, useParamName = False), checkName))
+            checkAccess = checkName
+            addrExpr = "&" + checkAccess
+            sizeExpr = self.cgen.sizeofExpr(vulkanType)
+            needConsistencyCheck = True
+
+        if featureExpr is not None:
+            self.cgen.beginIf(featureExpr)
+
+        self.genPrimitiveStreamCall(
+            vulkanType,
+            checkAccess)
+
+        if featureExpr is not None:
+            self.cgen.endIf()
+
+        if featureExpr is not None:
+            self.cgen.beginIf("(!(%s) || %s)" % (featureExpr, access))
+        else:
+            self.cgen.beginIf(access)
+
+        if needConsistencyCheck and featureExpr is None:
+            self.cgen.beginIf("!(%s)" % checkName)
+            self.cgen.stmt(
+                "fprintf(stderr, \"fatal: %s inconsistent between guest and host\\n\")" % (access))
+            self.cgen.endIf()
+
+    def onCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.cgen.beginIf("%s->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT" % self.streamVarName)
+        self.onCheck(vulkanType)
+
+    def endCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.endCheck(vulkanType)
+        self.cgen.endIf()
+        self.cgen.beginElse()
+
+    def finalCheckWithNullOptionalStringFeature(self, vulkanType):
+        self.cgen.endElse()
+
+    def endCheck(self, vulkanType):
+
+        if self.checked:
+            self.cgen.endIf()
+            self.checked = False
+
+    def genFilterFunc(self, filterfunc, env):
+
+        def loop(expr, lambdaEnv={}):
+            def do_func(expr):
+                fnamestr = expr.name.name
+                if "not" == fnamestr:
+                    return "!(%s)" % (loop(expr.args[0], lambdaEnv))
+                if "eq" == fnamestr:
+                    return "(%s == %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "and" == fnamestr:
+                    return "(%s && %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "or" == fnamestr:
+                    return "(%s || %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+                if "getfield" == fnamestr:
+                    ptrlevels = get_ptrlevels(expr.args[0].val.name)
+                    if ptrlevels == 0:
+                        return "%s.%s" % (loop(expr.args[0], lambdaEnv), expr.args[1].val)
+                    else:
+                        return "(%s(%s)).%s" % ("*" * ptrlevels, loop(expr.args[0], lambdaEnv), expr.args[1].val)
+
+                if "if" == fnamestr:
+                    return "((%s) ? (%s) : (%s))" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv), loop(expr.args[2], lambdaEnv))
+
+                return "%s(%s)" % (fnamestr, ", ".join(map(lambda e: loop(e, lambdaEnv), expr.args)))
+
+            def do_expratom(atomname, lambdaEnv= {}):
+                if lambdaEnv.get(atomname, None) is not None:
+                    return atomname
+
+                enventry = env.get(atomname, None)
+                if None != enventry:
+                    return self.getEnvAccessExpr(atomname)
+                return atomname
+
+            def get_ptrlevels(atomname, lambdaEnv= {}):
+                if lambdaEnv.get(atomname, None) is not None:
+                    return 0
+
+                enventry = env.get(atomname, None)
+                if None != enventry:
+                    return self.getPointerIndirectionLevels(atomname)
+
+                return 0
+
+            def do_exprval(expr, lambdaEnv= {}):
+                expratom = expr.val
+
+                if Atom == type(expratom):
+                    return do_expratom(expratom.name, lambdaEnv)
+
+                return "%s" % expratom
+
+            def do_lambda(expr, lambdaEnv= {}):
+                params = expr.vs
+                body = expr.body
+                newEnv = {}
+
+                for (k, v) in lambdaEnv.items():
+                    newEnv[k] = v
+
+                for p in params:
+                    newEnv[p.name] = p.typ
+
+                return "[](%s) { return %s; }" % (", ".join(list(map(lambda p: "%s %s" % (p.typ, p.name), params))), loop(body, lambdaEnv=newEnv))
+
+            if FuncExpr == type(expr):
+                return do_func(expr)
+            if FuncLambda == type(expr):
+                return do_lambda(expr)
+            elif FuncExprVal == type(expr):
+                return do_exprval(expr)
+
+        return loop(filterfunc)
+
+    def beginFilterGuard(self, vulkanType):
+        if vulkanType.filterVar == None:
+            return
+
+        if self.doFiltering == False:
+            return
+
+        filterVarAccess = self.getEnvAccessExpr(vulkanType.filterVar)
+
+        filterValsExpr = None
+        filterFuncExpr = None
+        filterExpr = None
+
+        filterFeature = "%s->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT" % self.streamVarName
+
+        if None != vulkanType.filterVals:
+            filterValsExpr = " || ".join(map(lambda filterval: "(%s == %s)" % (filterval, filterVarAccess), vulkanType.filterVals))
+
+        if None != vulkanType.filterFunc:
+            filterFuncExpr = self.genFilterFunc(vulkanType.filterFunc, self.currentStructInfo.environment)
+
+        if None != filterValsExpr and None != filterFuncExpr:
+            filterExpr = "%s || %s" % (filterValsExpr, filterFuncExpr)
+        elif None == filterValsExpr and None == filterFuncExpr:
+            # Assume is bool
+            self.cgen.beginIf(filterVarAccess)
+        elif None != filterValsExpr:
+            self.cgen.beginIf("(!(%s) || (%s))" % (filterFeature, filterValsExpr))
+        elif None != filterFuncExpr:
+            self.cgen.beginIf("(!(%s) || (%s))" % (filterFeature, filterFuncExpr))
+
+    def endFilterGuard(self, vulkanType, cleanupExpr=None):
+        if vulkanType.filterVar == None:
+            return
+
+        if self.doFiltering == False:
+            return
+
+        if cleanupExpr == None:
+            self.cgen.endIf()
+        else:
+            self.cgen.endIf()
+            self.cgen.beginElse()
+            self.cgen.stmt(cleanupExpr)
+            self.cgen.endElse()
+
+    def getEnvAccessExpr(self, varName):
+        parentEnvEntry = self.currentStructInfo.environment.get(varName, None)
+
+        if parentEnvEntry != None:
+            isParentMember = parentEnvEntry["structmember"]
+
+            if isParentMember:
+                envAccess = self.exprValueAccessor(list(filter(lambda member: member.paramName == varName, self.currentStructInfo.members))[0])
+            else:
+                envAccess = varName
+            return envAccess
+
+        return None
+
+    def getPointerIndirectionLevels(self, varName):
+        parentEnvEntry = self.currentStructInfo.environment.get(varName, None)
+
+        if parentEnvEntry != None:
+            isParentMember = parentEnvEntry["structmember"]
+
+            if isParentMember:
+                return list(filter(lambda member: member.paramName == varName, self.currentStructInfo.members))[0].pointerIndirectionLevels
+            else:
+                return 0
+            return 0
+
+        return 0
+
+
+    def onCompoundType(self, vulkanType):
+
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+
+        self.beginFilterGuard(vulkanType)
+
+        if vulkanType.pointerIndirectionLevels > 0:
+            self.doAllocSpace(vulkanType)
+
+        if lenAccess is not None:
+            loopVar = "i"
+            access = "%s + %s" % (access, loopVar)
+            forInit = "uint32_t %s = 0" % loopVar
+            forCond = "%s < (uint32_t)%s" % (loopVar, lenAccess)
+            forIncr = "++%s" % loopVar
+            self.cgen.beginFor(forInit, forCond, forIncr)
+
+        accessWithCast = "%s(%s)" % (self.makeCastExpr(
+            self.getTypeForStreaming(vulkanType)), access)
+
+        callParams = [self.streamVarName, self.rootTypeVarName, accessWithCast, self.ptrVar]
+
+        for (bindName, localName) in vulkanType.binds.items():
+            callParams.append(self.getEnvAccessExpr(localName))
+
+        self.cgen.funcCall(None, self.marshalPrefix + vulkanType.typeName,
+                           callParams)
+
+        if lenAccess is not None:
+            self.cgen.endFor()
+
+        if self.direction == "read":
+            self.endFilterGuard(vulkanType, "%s = 0" % self.exprAccessor(vulkanType))
+        else:
+            self.endFilterGuard(vulkanType)
+
+    def onString(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+
+        if self.direction == "write":
+            self.cgen.beginBlock()
+            self.cgen.stmt("uint32_t l = %s ? strlen(%s): 0" % (access, access))
+            self.genMemcpyAndIncr(self.ptrVar, "(uint32_t*)" ,"&l", "sizeof(uint32_t)", toBe = True, actualSize = 4)
+            self.genMemcpyAndIncr(self.ptrVar, "(char*)", access, "l")
+            self.cgen.endBlock()
+        else:
+            castExpr = \
+                self.makeCastExpr( \
+                    self.getTypeForStreaming( \
+                        vulkanType.getForAddressAccess()))
+            self.cgen.stmt( \
+                "%s->loadStringInPlaceWithStreamPtr(%s&%s, %s)" % (self.streamVarName, castExpr, access, self.ptrVar))
+
+    def onStringArray(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        if self.direction == "write":
+            self.cgen.beginBlock()
+
+            self.cgen.stmt("uint32_t c = 0")
+            if lenAccessGuard is not None:
+                self.cgen.beginIf(lenAccessGuard)
+            self.cgen.stmt("c = %s" % (lenAccess))
+            if lenAccessGuard is not None:
+                self.cgen.endIf()
+            self.genMemcpyAndIncr(self.ptrVar, "(uint32_t*)" ,"&c", "sizeof(uint32_t)", toBe = True, actualSize = 4)
+
+            self.cgen.beginFor("uint32_t i = 0", "i < c", "++i")
+            self.cgen.stmt("uint32_t l = %s ? strlen(%s[i]): 0" % (access, access))
+            self.genMemcpyAndIncr(self.ptrVar, "(uint32_t*)" ,"&l", "sizeof(uint32_t)", toBe = True, actualSize = 4)
+            self.cgen.beginIf("l")
+            self.genMemcpyAndIncr(self.ptrVar, "(char*)", "(%s[i])" % access, "l")
+            self.cgen.endIf()
+            self.cgen.endFor()
+
+            self.cgen.endBlock()
+        else:
+            castExpr = \
+                self.makeCastExpr( \
+                    self.getTypeForStreaming( \
+                        vulkanType.getForAddressAccess()))
+
+            self.cgen.stmt("%s->loadStringArrayInPlaceWithStreamPtr(%s&%s, %s)" % (self.streamVarName, castExpr, access, self.ptrVar))
+
+    def onStaticArr(self, vulkanType):
+        access = self.exprValueAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        finalLenExpr = "%s * %s" % (lenAccess, self.cgen.sizeofExpr(vulkanType))
+        self.genStreamCall(vulkanType, access, finalLenExpr)
+
+    # Old version VkEncoder may have some sType values conflict with VkDecoder
+    # of new versions. For host decoder, it should not carry the incorrect old
+    # sType values to the |forUnmarshaling| struct. Instead it should overwrite
+    # the sType value.
+    def overwriteSType(self, vulkanType):
+        if self.direction == "read":
+            sTypeParam = copy(vulkanType)
+            sTypeParam.paramName = "sType"
+            sTypeAccess = self.exprAccessor(sTypeParam)
+
+            typeName = vulkanType.parent.typeName
+            if typeName in STYPE_OVERRIDE:
+                self.cgen.stmt("%s = %s" %
+                               (sTypeAccess, STYPE_OVERRIDE[typeName]))
+
+    def onStructExtension(self, vulkanType):
+        self.overwriteSType(vulkanType)
+
+        sTypeParam = copy(vulkanType)
+        sTypeParam.paramName = "sType"
+
+        access = self.exprAccessor(vulkanType)
+        sizeVar = "%s_size" % vulkanType.paramName
+
+        if self.direction == "read":
+            castedAccessExpr = "(%s)(%s)" % ("void*", access)
+        else:
+            castedAccessExpr = access
+
+        sTypeAccess = self.exprAccessor(sTypeParam)
+        self.cgen.beginIf("%s == VK_STRUCTURE_TYPE_MAX_ENUM" % self.rootTypeVarName)
+        self.cgen.stmt("%s = %s" % (self.rootTypeVarName, sTypeAccess))
+        self.cgen.endIf()
+
+        if self.direction == "read" and self.dynAlloc:
+            self.cgen.stmt("uint32_t %s" % sizeVar)
+
+            self.genMemcpyAndIncr(self.ptrVar, "(uint32_t*)", "&" + sizeVar, "sizeof(uint32_t)", toBe = True, actualSize = 4)
+
+            self.cgen.stmt("%s = nullptr" % access)
+            self.cgen.beginIf(sizeVar)
+            self.cgen.stmt( \
+                    "%s->alloc((void**)&%s, sizeof(VkStructureType))" %
+                    (self.streamVarName, access))
+
+            self.genStreamCall(vulkanType, access, "sizeof(VkStructureType)")
+            self.cgen.stmt("VkStructureType extType = *(VkStructureType*)(%s)" % access)
+            self.cgen.stmt( \
+                    "%s->alloc((void**)&%s, %s(%s->getFeatureBits(), %s, %s))" %
+                    (self.streamVarName, access, EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME, self.streamVarName, self.rootTypeVarName, access))
+            self.cgen.stmt("*(VkStructureType*)%s = extType" % access)
+
+            self.cgen.funcCall(None, self.marshalPrefix + "extension_struct",
+                [self.streamVarName, self.rootTypeVarName, castedAccessExpr, self.ptrVar])
+            self.cgen.endIf()
+        else:
+
+            self.cgen.funcCall(None, self.marshalPrefix + "extension_struct",
+                [self.streamVarName, self.rootTypeVarName, castedAccessExpr, self.ptrVar])
+
+    def onPointer(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        self.beginFilterGuard(vulkanType)
+        self.doAllocSpace(vulkanType)
+
+        if vulkanType.filterVar != None:
+            print("onPointer Needs filter: %s filterVar %s" % (access, vulkanType.filterVar))
+
+        if vulkanType.isHandleType() and self.mapHandles:
+            self.genHandleMappingCall(
+                vulkanType, access, lenAccess, lenAccessGuard)
+        else:
+            if self.typeInfo.isNonAbiPortableType(vulkanType.typeName):
+                if lenAccess is not None:
+                    if lenAccessGuard is not None:
+                        self.cgen.beginIf(lenAccessGuard)
+                    self.cgen.beginFor("uint32_t i = 0", "i < (uint32_t)%s" % lenAccess, "++i")
+                    self.genPrimitiveStreamCall(vulkanType.getForValueAccess(), "%s[i]" % access)
+                    self.cgen.endFor()
+                    if lenAccessGuard is not None:
+                        self.cgen.endIf()
+                else:
+                    self.genPrimitiveStreamCall(vulkanType.getForValueAccess(), "(*%s)" % access)
+            else:
+                if lenAccess is not None:
+                    finalLenExpr = "%s * %s" % (
+                        lenAccess, self.cgen.sizeofExpr(vulkanType.getForValueAccess()))
+                else:
+                    finalLenExpr = "%s" % (
+                        self.cgen.sizeofExpr(vulkanType.getForValueAccess()))
+                self.genStreamCall(vulkanType, access, finalLenExpr)
+
+        if self.direction == "read":
+            self.endFilterGuard(vulkanType, "%s = 0" % access)
+        else:
+            self.endFilterGuard(vulkanType)
+
+    def onValue(self, vulkanType):
+        self.beginFilterGuard(vulkanType)
+
+        if vulkanType.isHandleType() and self.mapHandles:
+            access = self.exprAccessor(vulkanType)
+            if vulkanType.filterVar != None:
+                print("onValue Needs filter: %s filterVar %s" % (access, vulkanType.filterVar))
+            self.genHandleMappingCall(
+                vulkanType.getForAddressAccess(), access, "1", None)
+        elif self.typeInfo.isNonAbiPortableType(vulkanType.typeName):
+            access = self.exprPrimitiveValueAccessor(vulkanType)
+            self.genPrimitiveStreamCall(vulkanType, access)
+        else:
+            access = self.exprAccessor(vulkanType)
+            self.genStreamCall(vulkanType, access, self.cgen.sizeofExpr(vulkanType))
+
+        self.endFilterGuard(vulkanType)
+
+    def streamLetParameter(self, structInfo, letParamInfo):
+        filterFeature = "%s->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT" % self.streamVarName
+        self.cgen.stmt("%s %s = 1" % (letParamInfo.typeName, letParamInfo.paramName))
+
+        self.cgen.beginIf(filterFeature)
+
+        if self.direction == "write":
+            bodyExpr = self.currentStructInfo.environment[letParamInfo.paramName]["body"]
+            self.cgen.stmt("%s = %s" % (letParamInfo.paramName, self.genFilterFunc(bodyExpr, self.currentStructInfo.environment)))
+
+        self.genPrimitiveStreamCall(letParamInfo, letParamInfo.paramName)
+
+        self.cgen.endIf()
+
+class VulkanReservedMarshaling(VulkanWrapperGenerator):
+
+    def __init__(self, module, typeInfo, variant="host"):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.cgenHeader = CodeGen()
+        self.cgenImpl = CodeGen()
+
+        self.variant = variant
+
+        self.currentFeature = None
+        self.apiOpcodes = {}
+        self.dynAlloc = self.variant != "guest"
+        self.ptrVarName = "ptr"
+        self.ptrVarType = makeVulkanTypeSimple(False, "uint8_t", 2, self.ptrVarName)
+        self.ptrVarTypeUnmarshal = makeVulkanTypeSimple(False, "uint8_t", 2, self.ptrVarName)
+
+        if self.variant == "guest":
+            self.marshalingParams = PARAMETERS_MARSHALING_GUEST
+        else:
+            self.marshalingParams = PARAMETERS_MARSHALING
+
+        self.writeCodegen = \
+            VulkanReservedMarshalingCodegen(
+                None,
+                VULKAN_STREAM_VAR_NAME,
+                ROOT_TYPE_VAR_NAME,
+                MARSHAL_INPUT_VAR_NAME,
+                self.ptrVarName,
+                API_PREFIX_RESERVEDMARSHAL,
+                "get_host_u64_" if "guest" == self.variant else "",
+                direction = "write")
+
+        self.readCodegen = \
+            VulkanReservedMarshalingCodegen(
+                None,
+                VULKAN_STREAM_VAR_NAME,
+                ROOT_TYPE_VAR_NAME,
+                UNMARSHAL_INPUT_VAR_NAME,
+                self.ptrVarName,
+                API_PREFIX_RESERVEDUNMARSHAL,
+                "unbox_" if "host" == self.variant else "",
+                direction = "read",
+                dynAlloc=self.dynAlloc)
+
+        self.knownDefs = {}
+
+        self.extensionMarshalPrototype = \
+            VulkanAPI(API_PREFIX_RESERVEDMARSHAL + "extension_struct",
+                      STREAM_RET_TYPE,
+                      self.marshalingParams +
+                      [STRUCT_EXTENSION_PARAM, self.ptrVarType])
+
+        self.extensionUnmarshalPrototype = \
+            VulkanAPI(API_PREFIX_RESERVEDUNMARSHAL + "extension_struct",
+                      STREAM_RET_TYPE,
+                      self.marshalingParams +
+                      [STRUCT_EXTENSION_PARAM_FOR_WRITE, self.ptrVarTypeUnmarshal])
+
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+        self.module.appendImpl(self.cgenImpl.makeFuncDecl(self.extensionMarshalPrototype))
+        self.module.appendImpl(self.cgenImpl.makeFuncDecl(self.extensionUnmarshalPrototype))
+
+    def onBeginFeature(self, featureName):
+        VulkanWrapperGenerator.onBeginFeature(self, featureName)
+        self.currentFeature = featureName
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+        if name in self.knownDefs:
+            return
+
+        category = self.typeInfo.categoryOf(name)
+
+        if category in ["struct", "union"] and alias:
+            if self.variant != "host":
+                self.module.appendHeader(
+                    self.cgenHeader.makeFuncAlias(API_PREFIX_RESERVEDMARSHAL + name,
+                                                  API_PREFIX_RESERVEDMARSHAL + alias))
+            if self.variant != "guest":
+                self.module.appendHeader(
+                    self.cgenHeader.makeFuncAlias(API_PREFIX_RESERVEDUNMARSHAL + name,
+                                                  API_PREFIX_RESERVEDUNMARSHAL + alias))
+
+        if category in ["struct", "union"] and not alias:
+
+            structInfo = self.typeInfo.structs[name]
+
+            marshalParams = self.marshalingParams + \
+                [makeVulkanTypeSimple(True, name, 1, MARSHAL_INPUT_VAR_NAME),
+                        self.ptrVarType]
+
+            freeParams = []
+            letParams = []
+
+            for (envname, bindingInfo) in list(sorted(structInfo.environment.items(), key = lambda kv: kv[0])):
+                if None == bindingInfo["binding"]:
+                    freeParams.append(makeVulkanTypeSimple(True, bindingInfo["type"], 0, envname))
+                else:
+                    if not bindingInfo["structmember"]:
+                        letParams.append(makeVulkanTypeSimple(True, bindingInfo["type"], 0, envname))
+
+            marshalPrototype = \
+                VulkanAPI(API_PREFIX_RESERVEDMARSHAL + name,
+                          STREAM_RET_TYPE,
+                          marshalParams + freeParams)
+
+            marshalPrototypeNoFilter = \
+                VulkanAPI(API_PREFIX_RESERVEDMARSHAL + name,
+                          STREAM_RET_TYPE,
+                          marshalParams)
+
+            def structMarshalingCustom(cgen):
+                self.writeCodegen.cgen = cgen
+                self.writeCodegen.currentStructInfo = structInfo
+                marshalingCode = \
+                    CUSTOM_MARSHAL_TYPES[name]["common"] + \
+                    CUSTOM_MARSHAL_TYPES[name]["reservedmarshaling"].format(
+                        streamVarName=self.writeCodegen.streamVarName, 
+                        rootTypeVarName=self.writeCodegen.rootTypeVarName,
+                        inputVarName=self.writeCodegen.inputVarName,
+                        newInputVarName=self.writeCodegen.inputVarName + "_new")
+                for line in marshalingCode.split('\n'):
+                    cgen.line(line)
+
+            def structMarshalingDef(cgen):
+                self.writeCodegen.cgen = cgen
+                self.writeCodegen.currentStructInfo = structInfo
+                self.writeCodegen.cgen.stmt("(void)%s" % VULKAN_STREAM_VAR_NAME)
+                self.writeCodegen.cgen.stmt("(void)%s" % ROOT_TYPE_VAR_NAME)
+
+                if category == "struct":
+                    # marshal 'let' parameters first
+                    for letp in letParams:
+                        self.writeCodegen.streamLetParameter(self.typeInfo, letp)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.writeCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.writeCodegen)
+
+            def structMarshalingDefNoFilter(cgen):
+                self.writeCodegen.cgen = cgen
+                self.writeCodegen.currentStructInfo = structInfo
+                self.writeCodegen.doFiltering = False
+                self.writeCodegen.cgen.stmt("(void)%s" % VULKAN_STREAM_VAR_NAME)
+                self.writeCodegen.cgen.stmt("(void)%s" % ROOT_TYPE_VAR_NAME)
+
+                if category == "struct":
+                    # marshal 'let' parameters first
+                    for letp in letParams:
+                        self.writeCodegen.streamLetParameter(self.typeInfo, letp)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.writeCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.writeCodegen)
+                self.writeCodegen.doFiltering = True
+
+            if self.variant != "host":
+                self.module.appendHeader(
+                    self.cgenHeader.makeFuncDecl(marshalPrototype))
+
+                if name in CUSTOM_MARSHAL_TYPES:
+                    self.module.appendImpl(
+                        self.cgenImpl.makeFuncImpl(
+                            marshalPrototype, structMarshalingCustom))
+                else:
+                    self.module.appendImpl(
+                        self.cgenImpl.makeFuncImpl(
+                            marshalPrototype, structMarshalingDef))
+
+                if freeParams != []:
+                    self.module.appendHeader(
+                        self.cgenHeader.makeFuncDecl(marshalPrototypeNoFilter))
+                    self.module.appendImpl(
+                        self.cgenImpl.makeFuncImpl(
+                            marshalPrototypeNoFilter, structMarshalingDefNoFilter))
+
+            unmarshalPrototype = \
+                VulkanAPI(API_PREFIX_RESERVEDUNMARSHAL + name,
+                          STREAM_RET_TYPE,
+                          self.marshalingParams + [makeVulkanTypeSimple(False, name, 1, UNMARSHAL_INPUT_VAR_NAME), self.ptrVarTypeUnmarshal] + freeParams)
+
+            unmarshalPrototypeNoFilter = \
+                VulkanAPI(API_PREFIX_RESERVEDUNMARSHAL + name,
+                          STREAM_RET_TYPE,
+                          self.marshalingParams + [makeVulkanTypeSimple(False, name, 1, UNMARSHAL_INPUT_VAR_NAME), self.ptrVarTypeUnmarshal])
+
+            def structUnmarshalingCustom(cgen):
+                self.readCodegen.cgen = cgen
+                self.readCodegen.currentStructInfo = structInfo
+                unmarshalingCode = \
+                    CUSTOM_MARSHAL_TYPES[name]["common"] + \
+                    CUSTOM_MARSHAL_TYPES[name]["reservedunmarshaling"].format(
+                        streamVarName=self.readCodegen.streamVarName, 
+                        rootTypeVarName=self.readCodegen.rootTypeVarName,
+                        inputVarName=self.readCodegen.inputVarName,
+                        newInputVarName=self.readCodegen.inputVarName + "_new")
+                for line in unmarshalingCode.split('\n'):
+                    cgen.line(line)
+
+            def structUnmarshalingDef(cgen):
+                self.readCodegen.cgen = cgen
+                self.readCodegen.currentStructInfo = structInfo
+                if category == "struct":
+                    # unmarshal 'let' parameters first
+                    for letp in letParams:
+                        self.readCodegen.streamLetParameter(self.typeInfo, letp)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.readCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.readCodegen)
+
+            def structUnmarshalingDefNoFilter(cgen):
+                self.readCodegen.cgen = cgen
+                self.readCodegen.currentStructInfo = structInfo
+                self.readCodegen.doFiltering = False
+                if category == "struct":
+                    # unmarshal 'let' parameters first
+                    for letp in letParams:
+                        iterateVulkanType(self.typeInfo, letp, self.readCodegen)
+                    for member in structInfo.members:
+                        iterateVulkanType(self.typeInfo, member, self.readCodegen)
+                if category == "union":
+                    iterateVulkanType(self.typeInfo, structInfo.members[0], self.readCodegen)
+                self.readCodegen.doFiltering = True
+
+            if self.variant != "guest":
+                self.module.appendHeader(
+                    self.cgenHeader.makeFuncDecl(unmarshalPrototype))
+
+                if name in CUSTOM_MARSHAL_TYPES:
+                    self.module.appendImpl(
+                        self.cgenImpl.makeFuncImpl(
+                            unmarshalPrototype, structUnmarshalingCustom))
+                else:
+                    self.module.appendImpl(
+                        self.cgenImpl.makeFuncImpl(
+                            unmarshalPrototype, structUnmarshalingDef))
+
+                if freeParams != []:
+                    self.module.appendHeader(
+                        self.cgenHeader.makeFuncDecl(unmarshalPrototypeNoFilter))
+                    self.module.appendImpl(
+                        self.cgenImpl.makeFuncImpl(
+                            unmarshalPrototypeNoFilter, structUnmarshalingDefNoFilter))
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+    def doExtensionStructMarshalingCodegen(self, cgen, retType, extParam, forEach, funcproto, direction):
+        accessVar = "structAccess"
+        sizeVar = "currExtSize"
+        cgen.stmt("VkInstanceCreateInfo* %s = (VkInstanceCreateInfo*)(%s)" % (accessVar, extParam.paramName))
+        cgen.stmt("uint32_t %s = %s(%s->getFeatureBits(), %s, %s)" % (sizeVar, EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME, VULKAN_STREAM_VAR_NAME, ROOT_TYPE_VAR_NAME, extParam.paramName))
+
+        cgen.beginIf("!%s && %s" % (sizeVar, extParam.paramName))
+
+        cgen.line("// unknown struct extension; skip and call on its pNext field");
+        cgen.funcCall(None, funcproto.name, ["vkStream", ROOT_TYPE_VAR_NAME, "(void*)%s->pNext" % accessVar, self.ptrVarName])
+        cgen.stmt("return")
+
+        cgen.endIf()
+        cgen.beginElse()
+
+        cgen.line("// known or null extension struct")
+
+        if direction == "write":
+            cgen.stmt("memcpy(*%s, &%s, sizeof(uint32_t));" % (self.ptrVarName, sizeVar))
+            cgen.stmt("android::base::Stream::toBe32((uint8_t*)*%s); *%s += sizeof(uint32_t)" % (self.ptrVarName, self.ptrVarName))
+        elif not self.dynAlloc:
+            cgen.stmt("memcpy(&%s, *%s, sizeof(uint32_t));" % (sizeVar, self.ptrVarName))
+            cgen.stmt("android::base::Stream::fromBe32((uint8_t*)&%s); *%s += sizeof(uint32_t)" % (sizeVar, self.ptrVarName))
+
+        cgen.beginIf("!%s" % (sizeVar))
+        cgen.line("// exit if this was a null extension struct (size == 0 in this branch)")
+        cgen.stmt("return")
+        cgen.endIf()
+
+        cgen.endIf()
+
+        # Now we can do stream stuff
+        if direction == "write":
+            cgen.stmt("memcpy(*%s, %s, sizeof(VkStructureType)); *%s += sizeof(VkStructureType)" % (self.ptrVarName, extParam.paramName, self.ptrVarName))
+        elif not self.dynAlloc:
+            cgen.stmt("uint64_t pNext_placeholder")
+            placeholderAccess = "(&pNext_placeholder)"
+            cgen.stmt("memcpy(%s, *%s, sizeof(VkStructureType)); *%s += sizeof(VkStructureType)" % (placeholderAccess, self.ptrVarName, self.ptrVarName))
+            cgen.stmt("(void)pNext_placeholder")
+
+        def fatalDefault(cgen):
+            cgen.line("// fatal; the switch is only taken if the extension struct is known");
+            cgen.stmt("abort()")
+            pass
+
+        self.emitForEachStructExtension(
+            cgen,
+            retType,
+            extParam,
+            forEach,
+            defaultEmit=fatalDefault,
+            rootTypeVar=ROOT_TYPE_PARAM)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
+
+        def forEachExtensionMarshal(ext, castedAccess, cgen):
+            cgen.funcCall(None, API_PREFIX_RESERVEDMARSHAL + ext.name,
+                          [VULKAN_STREAM_VAR_NAME, ROOT_TYPE_VAR_NAME, castedAccess, self.ptrVarName])
+
+        def forEachExtensionUnmarshal(ext, castedAccess, cgen):
+            cgen.funcCall(None, API_PREFIX_RESERVEDUNMARSHAL + ext.name,
+                          [VULKAN_STREAM_VAR_NAME, ROOT_TYPE_VAR_NAME, castedAccess, self.ptrVarName])
+
+        if self.variant != "host":
+            self.module.appendImpl(
+                self.cgenImpl.makeFuncImpl(
+                    self.extensionMarshalPrototype,
+                    lambda cgen: self.doExtensionStructMarshalingCodegen(
+                        cgen,
+                        STREAM_RET_TYPE,
+                        STRUCT_EXTENSION_PARAM,
+                        forEachExtensionMarshal,
+                        self.extensionMarshalPrototype,
+                        "write")))
+
+        if self.variant != "guest":
+            self.module.appendImpl(
+                self.cgenImpl.makeFuncImpl(
+                    self.extensionUnmarshalPrototype,
+                    lambda cgen: self.doExtensionStructMarshalingCodegen(
+                        cgen,
+                        STREAM_RET_TYPE,
+                        STRUCT_EXTENSION_PARAM_FOR_WRITE,
+                        forEachExtensionUnmarshal,
+                        self.extensionUnmarshalPrototype,
+                        "read")))
diff --git a/registry/vulkan/scripts/cereal/subdecode.py b/registry/vulkan/scripts/cereal/subdecode.py
new file mode 100644
index 0000000..eae0254
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/subdecode.py
@@ -0,0 +1,385 @@
+from .common.codegen import CodeGen, VulkanWrapperGenerator, VulkanAPIWrapper
+from .common.vulkantypes import \
+    VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, DISPATCHABLE_HANDLE_TYPES, NON_DISPATCHABLE_HANDLE_TYPES
+
+from .reservedmarshaling import VulkanReservedMarshalingCodegen
+from .transform import TransformCodegen, genTransformsForVulkanType
+
+from .wrapperdefs import API_PREFIX_MARSHAL
+from .wrapperdefs import API_PREFIX_UNMARSHAL, API_PREFIX_RESERVEDUNMARSHAL
+from .wrapperdefs import ROOT_TYPE_DEFAULT_VALUE
+from .wrapperdefs import VULKAN_STREAM_TYPE
+
+from copy import copy
+
+decoder_decl_preamble = """
+"""
+
+decoder_impl_preamble = """
+"""
+
+READ_STREAM = "readStream"
+WRITE_STREAM = "vkStream"
+
+# Driver workarounds for APIs that don't work well multithreaded
+driver_workarounds_global_lock_apis = [
+    "vkCreatePipelineLayout",
+    "vkDestroyPipelineLayout",
+]
+
+MAX_STACK_ITEMS = "16"
+
+
+def emit_param_decl_for_reading(param, cgen):
+    if param.staticArrExpr:
+        cgen.stmt(
+            cgen.makeRichCTypeDecl(param.getForNonConstAccess()))
+    else:
+        cgen.stmt(
+            cgen.makeRichCTypeDecl(param))
+
+    if param.pointerIndirectionLevels > 0:
+        lenAccess = cgen.generalLengthAccess(param)
+        if not lenAccess:
+            lenAccess = "1"
+        arrSize = "1" if "1" == lenAccess else "MAX_STACK_ITEMS"
+
+        typeHere = "uint8_t*" if "void" == param.typeName else param.typeName
+        cgen.stmt("%s%s stack_%s[%s]" % (
+            typeHere, "*" * (param.pointerIndirectionLevels - 1), param.paramName, arrSize))
+
+
+def emit_unmarshal(typeInfo, param, cgen, output=False, destroy=False, noUnbox=False):
+    if destroy:
+        iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+            cgen,
+            READ_STREAM,
+            ROOT_TYPE_DEFAULT_VALUE,
+            param.paramName,
+            "readStreamPtrPtr",
+            API_PREFIX_RESERVEDUNMARSHAL,
+            "",
+            direction="read",
+            dynAlloc=True))
+        lenAccess = cgen.generalLengthAccess(param)
+        lenAccessGuard = cgen.generalLengthAccessGuard(param)
+        if None == lenAccess or "1" == lenAccess:
+            cgen.stmt("boxed_%s_preserve = %s" %
+                      (param.paramName, param.paramName))
+            cgen.stmt("%s = unbox_%s(%s)" %
+                      (param.paramName, param.typeName, param.paramName))
+        else:
+            if lenAccessGuard is not None:
+                self.cgen.beginIf(lenAccessGuard)
+            cgen.beginFor("uint32_t i = 0", "i < %s" % lenAccess, "++i")
+            cgen.stmt("boxed_%s_preserve[i] = %s[i]" %
+                      (param.paramName, param.paramName))
+            cgen.stmt("((%s*)(%s))[i] = unbox_%s(%s[i])" % (param.typeName,
+                                                            param.paramName, param.typeName, param.paramName))
+            cgen.endFor()
+            if lenAccessGuard is not None:
+                self.cgen.endIf()
+    else:
+        if noUnbox:
+            cgen.line("// No unbox for %s" % (param.paramName))
+
+        lenAccess = cgen.generalLengthAccess(param)
+        if not lenAccess:
+            lenAccess = "1"
+        arrSize = "1" if "1" == lenAccess else "MAX_STACK_ITEMS"
+
+        iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+            cgen,
+            READ_STREAM,
+            ROOT_TYPE_DEFAULT_VALUE,
+            param.paramName,
+            "readStreamPtrPtr",
+            API_PREFIX_RESERVEDUNMARSHAL,
+            "" if (output or noUnbox) else "unbox_",
+            direction="read",
+            dynAlloc=True,
+            stackVar="stack_%s" % param.paramName,
+            stackArrSize=arrSize))
+
+
+def emit_dispatch_unmarshal(typeInfo, param, cgen, globalWrapped):
+    if globalWrapped:
+        cgen.stmt(
+            "// Begin global wrapped dispatchable handle unboxing for %s" % param.paramName)
+        iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+            cgen,
+            READ_STREAM,
+            ROOT_TYPE_DEFAULT_VALUE,
+            param.paramName,
+            "readStreamPtrPtr",
+            API_PREFIX_RESERVEDUNMARSHAL,
+            "",
+            direction="read",
+            dynAlloc=True))
+    else:
+        cgen.stmt(
+            "// Begin non wrapped dispatchable handle unboxing for %s" % param.paramName)
+        # cgen.stmt("%s->unsetHandleMapping()" % READ_STREAM)
+        iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+            cgen,
+            READ_STREAM,
+            ROOT_TYPE_DEFAULT_VALUE,
+            param.paramName,
+            "readStreamPtrPtr",
+            API_PREFIX_RESERVEDUNMARSHAL,
+            "",
+            direction="read",
+            dynAlloc=True))
+        cgen.stmt("auto unboxed_%s = unbox_%s(%s)" %
+                  (param.paramName, param.typeName, param.paramName))
+        cgen.stmt("auto vk = dispatch_%s(%s)" %
+                  (param.typeName, param.paramName))
+        cgen.stmt("// End manual dispatchable handle unboxing for %s" %
+                  param.paramName)
+
+
+def emit_transform(typeInfo, param, cgen, variant="tohost"):
+    res = \
+        iterateVulkanType(typeInfo, param, TransformCodegen(
+            cgen, param.paramName, "globalstate", "transform_%s_" % variant, variant))
+    if not res:
+        cgen.stmt("(void)%s" % param.paramName)
+
+# Everything here elides the initial arg
+
+
+class DecodingParameters(object):
+    def __init__(self, api):
+        self.params = []
+        self.toRead = []
+        self.toWrite = []
+
+        i = 0
+
+        for param in api.parameters[1:]:
+            param.nonDispatchableHandleCreate = False
+            param.nonDispatchableHandleDestroy = False
+            param.dispatchHandle = False
+            param.dispatchableHandleCreate = False
+            param.dispatchableHandleDestroy = False
+
+            if i == 0 and param.isDispatchableHandleType():
+                param.dispatchHandle = True
+
+            if param.isNonDispatchableHandleType() and param.isCreatedBy(api):
+                param.nonDispatchableHandleCreate = True
+
+            if param.isNonDispatchableHandleType() and param.isDestroyedBy(api):
+                param.nonDispatchableHandleDestroy = True
+
+            if param.isDispatchableHandleType() and param.isCreatedBy(api):
+                param.dispatchableHandleCreate = True
+
+            if param.isDispatchableHandleType() and param.isDestroyedBy(api):
+                param.dispatchableHandleDestroy = True
+
+            self.toRead.append(param)
+
+            if param.possiblyOutput():
+                self.toWrite.append(param)
+
+            self.params.append(param)
+
+            i += 1
+
+
+def emit_call_log(api, cgen):
+    decodingParams = DecodingParameters(api)
+    paramsToRead = decodingParams.toRead
+
+    # cgen.beginIf("m_logCalls")
+    paramLogFormat = "%p"
+    paramLogArgs = ["(void*)boxed_dispatchHandle"]
+
+    for p in paramsToRead:
+        paramLogFormat += "0x%llx "
+    for p in paramsToRead:
+        paramLogArgs.append("(unsigned long long)%s" % (p.paramName))
+    # cgen.stmt("fprintf(stderr, \"substream %%p: call %s %s\\n\", readStream, %s)" % (api.name, paramLogFormat, ", ".join(paramLogArgs)))
+    # cgen.endIf()
+
+
+def emit_decode_parameters(typeInfo, api, cgen, globalWrapped=False):
+
+    decodingParams = DecodingParameters(api)
+
+    paramsToRead = decodingParams.toRead
+
+    for p in paramsToRead:
+        emit_param_decl_for_reading(p, cgen)
+
+    i = 0
+    for p in paramsToRead:
+        lenAccess = cgen.generalLengthAccess(p)
+
+        if p.dispatchHandle:
+            emit_dispatch_unmarshal(typeInfo, p, cgen, globalWrapped)
+        else:
+            destroy = p.nonDispatchableHandleDestroy or p.dispatchableHandleDestroy
+            noUnbox = False
+
+            if p.nonDispatchableHandleDestroy or p.dispatchableHandleDestroy:
+                destroy = True
+                cgen.stmt(
+                    "// Begin manual non dispatchable handle destroy unboxing for %s" % p.paramName)
+                if None == lenAccess or "1" == lenAccess:
+                    cgen.stmt("%s boxed_%s_preserve" %
+                              (p.typeName, p.paramName))
+                else:
+                    cgen.stmt("%s* boxed_%s_preserve; %s->alloc((void**)&boxed_%s_preserve, %s * sizeof(%s))" %
+                              (p.typeName, p.paramName, READ_STREAM, p.paramName, lenAccess, p.typeName))
+
+            if p.possiblyOutput():
+                cgen.stmt(
+                    "// Begin manual dispatchable handle unboxing for %s" % p.paramName)
+                cgen.stmt("%s->unsetHandleMapping()" % READ_STREAM)
+
+            emit_unmarshal(typeInfo, p, cgen, output=p.possiblyOutput(
+            ), destroy=destroy, noUnbox=noUnbox)
+        i += 1
+
+    for p in paramsToRead:
+        emit_transform(typeInfo, p, cgen, variant="tohost")
+
+    emit_call_log(api, cgen)
+
+
+def emit_dispatch_call(api, cgen):
+
+    decodingParams = DecodingParameters(api)
+
+    customParams = ["(VkCommandBuffer)dispatchHandle"]
+
+    for (i, p) in enumerate(api.parameters[1:]):
+        customParam = p.paramName
+        if decodingParams.params[i].dispatchHandle:
+            customParam = "unboxed_%s" % p.paramName
+        customParams.append(customParam)
+
+    if api.name in driver_workarounds_global_lock_apis:
+        cgen.stmt("lock()")
+
+    cgen.vkApiCall(api, customPrefix="vk->", customParameters=customParams)
+
+    if api.name in driver_workarounds_global_lock_apis:
+        cgen.stmt("unlock()")
+
+
+def emit_global_state_wrapped_call(api, cgen):
+    customParams = ["pool", "(VkCommandBuffer)(boxed_dispatchHandle)"] + \
+        list(map(lambda p: p.paramName, api.parameters[1:]))
+    cgen.vkApiCall(api, customPrefix="this->on_",
+                   customParameters=customParams)
+
+
+def emit_default_decoding(typeInfo, api, cgen):
+    emit_decode_parameters(typeInfo, api, cgen)
+    emit_dispatch_call(api, cgen)
+
+
+def emit_global_state_wrapped_decoding(typeInfo, api, cgen):
+    emit_decode_parameters(typeInfo, api, cgen, globalWrapped=True)
+    emit_global_state_wrapped_call(api, cgen)
+
+
+custom_decodes = {
+    "vkCmdCopyBufferToImage": emit_global_state_wrapped_decoding,
+    "vkCmdCopyImage": emit_global_state_wrapped_decoding,
+    "vkCmdCopyImageToBuffer": emit_global_state_wrapped_decoding,
+    "vkCmdExecuteCommands": emit_global_state_wrapped_decoding,
+    "vkBeginCommandBuffer": emit_global_state_wrapped_decoding,
+    "vkResetCommandBuffer": emit_global_state_wrapped_decoding,
+    "vkCmdPipelineBarrier": emit_global_state_wrapped_decoding,
+    "vkCmdBindPipeline": emit_global_state_wrapped_decoding,
+    "vkCmdBindDescriptorSets": emit_global_state_wrapped_decoding,
+    "vkBeginCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding,
+    "vkEndCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding,
+    "vkResetCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding,
+    "vkCommandBufferHostSyncGOOGLE": emit_global_state_wrapped_decoding,
+}
+
+
+class VulkanSubDecoder(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+        self.typeInfo = typeInfo
+        self.cgen = CodeGen()
+
+    def onBegin(self,):
+        self.module.appendImpl(
+            "#define MAX_STACK_ITEMS %s\n" % MAX_STACK_ITEMS)
+
+        self.module.appendImpl(
+            "size_t subDecode(VulkanMemReadingStream* readStream, VulkanDispatch* vk, void* boxed_dispatchHandle, void* dispatchHandle, VkDeviceSize dataSize, const void* pData)\n")
+
+        self.cgen.beginBlock()  # function body
+
+        self.cgen.stmt("uint32_t count = 0")
+        self.cgen.stmt("unsigned char *buf = (unsigned char *)pData")
+        self.cgen.stmt("android::base::BumpPool* pool = readStream->pool()")
+        self.cgen.stmt("unsigned char *ptr = (unsigned char *)pData")
+        self.cgen.stmt(
+            "const unsigned char* const end = (const unsigned char*)buf + dataSize")
+        self.cgen.stmt(
+            "VkDecoderGlobalState* globalstate = VkDecoderGlobalState::get()")
+
+        self.cgen.line("while (end - ptr >= 8)")
+        self.cgen.beginBlock()  # while loop
+
+        self.cgen.stmt("uint32_t opcode = *(uint32_t *)ptr")
+        self.cgen.stmt("int32_t packetLen = *(int32_t *)(ptr + 4)")
+        self.cgen.stmt(
+            "if (end - ptr < packetLen) return ptr - (unsigned char*)buf")
+
+        self.cgen.stmt("%s->setBuf((uint8_t*)(ptr + 8))" % READ_STREAM)
+        self.cgen.stmt(
+            "uint8_t* readStreamPtr = %s->getBuf(); uint8_t** readStreamPtrPtr = &readStreamPtr" % READ_STREAM)
+        self.cgen.line("switch (opcode)")
+        self.cgen.beginBlock()  # switch stmt
+
+        self.module.appendImpl(self.cgen.swapCode())
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        typeInfo = self.typeInfo
+        cgen = self.cgen
+        api = typeInfo.apis[name]
+
+        if "commandBuffer" != api.parameters[0].paramName:
+            return
+
+        cgen.line("case OP_%s:" % name)
+        cgen.beginBlock()
+        cgen.stmt("android::base::beginTrace(\"%s subdecode\")" % name)
+
+        if api.name in custom_decodes.keys():
+            custom_decodes[api.name](typeInfo, api, cgen)
+        else:
+            emit_default_decoding(typeInfo, api, cgen)
+
+        cgen.stmt("android::base::endTrace()")
+        cgen.stmt("break")
+        cgen.endBlock()
+        self.module.appendImpl(self.cgen.swapCode())
+
+    def onEnd(self,):
+        self.cgen.line("default:")
+        self.cgen.beginBlock()
+        self.cgen.stmt(
+            "GFXSTREAM_ABORT(FatalError(ABORT_REASON_OTHER)) << \"Unrecognized opcode \" << opcode")
+        self.cgen.endBlock()
+
+        self.cgen.endBlock()  # switch stmt
+
+        self.cgen.stmt("++count; if (count % 1000 == 0) { pool->freeAll(); }")
+        self.cgen.stmt("ptr += packetLen")
+        self.cgen.endBlock()  # while loop
+
+        self.cgen.stmt("pool->freeAll()")
+        self.cgen.stmt("return ptr - (unsigned char*)buf;")
+        self.cgen.endBlock()  # function body
+        self.module.appendImpl(self.cgen.swapCode())
diff --git a/registry/vulkan/scripts/cereal/testing.py b/registry/vulkan/scripts/cereal/testing.py
new file mode 100644
index 0000000..898532f
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/testing.py
@@ -0,0 +1,399 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from copy import copy
+
+from .common.codegen import CodeGen
+from .common.vulkantypes import \
+        VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, VulkanTypeIterator
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import EQUALITY_VAR_NAMES
+from .wrapperdefs import EQUALITY_ON_FAIL_VAR
+from .wrapperdefs import EQUALITY_ON_FAIL_VAR_TYPE
+from .wrapperdefs import EQUALITY_RET_TYPE
+from .wrapperdefs import API_PREFIX_EQUALITY
+from .wrapperdefs import STRUCT_EXTENSION_PARAM, STRUCT_EXTENSION_PARAM2
+
+class VulkanEqualityCodegen(VulkanTypeIterator):
+
+    def __init__(self, cgen, inputVars, onFailCompareVar, prefix):
+        self.cgen = cgen
+        self.inputVars = inputVars
+        self.onFailCompareVar = onFailCompareVar
+        self.prefix = prefix
+
+        def makeAccess(varName, asPtr = True):
+            return lambda t: self.cgen.generalAccess(t, parentVarName = varName, asPtr = asPtr)
+
+        def makeLengthAccess(varName):
+            return lambda t: self.cgen.generalLengthAccess(t, parentVarName = varName)
+
+        def makeLengthAccessGuard(varName):
+            return lambda t: self.cgen.generalLengthAccessGuard(t, parentVarName=varName)
+
+        self.exprAccessorLhs = makeAccess(self.inputVars[0])
+        self.exprAccessorRhs = makeAccess(self.inputVars[1])
+
+        self.exprAccessorValueLhs = makeAccess(self.inputVars[0], asPtr = False)
+        self.exprAccessorValueRhs = makeAccess(self.inputVars[1], asPtr = False)
+
+        self.lenAccessorLhs = makeLengthAccess(self.inputVars[0])
+        self.lenAccessorRhs = makeLengthAccess(self.inputVars[1])
+
+        self.lenAccessGuardLhs = makeLengthAccessGuard(self.inputVars[0])
+        self.lenAccessGuardRhs = makeLengthAccessGuard(self.inputVars[1])
+
+        self.checked = False
+
+    def getTypeForCompare(self, vulkanType):
+        res = copy(vulkanType)
+
+        if not vulkanType.accessibleAsPointer():
+            res = res.getForAddressAccess()
+
+        if vulkanType.staticArrExpr:
+            res = res.getForAddressAccess()
+
+        return res
+
+    def makeCastExpr(self, vulkanType):
+        return "(%s)" % (
+            self.cgen.makeCTypeDecl(vulkanType, useParamName=False))
+
+    def makeEqualExpr(self, lhs, rhs):
+        return "(%s) == (%s)" % (lhs, rhs)
+
+    def makeEqualBufExpr(self, lhs, rhs, size):
+        return "(memcmp(%s, %s, %s) == 0)" % (lhs, rhs, size)
+
+    def makeEqualStringExpr(self, lhs, rhs):
+        return "(strcmp(%s, %s) == 0)" % (lhs, rhs)
+
+    def makeBothNotNullExpr(self, lhs, rhs):
+        return "(%s) && (%s)" % (lhs, rhs)
+
+    def makeBothNullExpr(self, lhs, rhs):
+        return "!(%s) && !(%s)" % (lhs, rhs)
+
+    def compareWithConsequence(self, compareExpr, vulkanType, errMsg=""):
+        self.cgen.stmt("if (!(%s)) { %s(\"%s (Error: %s)\"); }" %
+                       (compareExpr, self.onFailCompareVar,
+                        self.exprAccessorValueLhs(vulkanType), errMsg))
+
+    def onCheck(self, vulkanType):
+
+        self.checked = True
+
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        bothNull = self.makeBothNullExpr(accessLhs, accessRhs)
+        bothNotNull = self.makeBothNotNullExpr(accessLhs, accessRhs)
+        nullMatchExpr = "(%s) || (%s)" % (bothNull, bothNotNull)
+
+        self.compareWithConsequence( \
+            nullMatchExpr,
+            vulkanType,
+            "Mismatch in optional field")
+
+        skipStreamInternal = vulkanType.typeName == "void"
+
+        if skipStreamInternal:
+            return
+
+        self.cgen.beginIf("%s && %s" % (accessLhs, accessRhs))
+
+    def endCheck(self, vulkanType):
+
+        skipStreamInternal = vulkanType.typeName == "void"
+        if skipStreamInternal:
+            return
+
+        if self.checked:
+            self.cgen.endIf()
+            self.checked = False
+
+    def onCompoundType(self, vulkanType):
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        lenAccessLhs = self.lenAccessorLhs(vulkanType)
+        lenAccessRhs = self.lenAccessorRhs(vulkanType)
+
+        lenAccessGuardLhs = self.lenAccessGuardLhs(vulkanType)
+        lenAccessGuardRhs = self.lenAccessGuardRhs(vulkanType)
+
+        needNullCheck = vulkanType.pointerIndirectionLevels > 0
+
+        if needNullCheck:
+            bothNotNullExpr = self.makeBothNotNullExpr(accessLhs, accessRhs)
+            self.cgen.beginIf(bothNotNullExpr)
+
+        if lenAccessLhs is not None:
+            equalLenExpr = self.makeEqualExpr(lenAccessLhs, lenAccessRhs)
+
+            self.compareWithConsequence( \
+                equalLenExpr,
+                vulkanType, "Lengths not equal")
+
+            loopVar = "i"
+            accessLhs = "%s + %s" % (accessLhs, loopVar)
+            accessRhs = "%s + %s" % (accessRhs, loopVar)
+            forInit = "uint32_t %s = 0" % loopVar
+            forCond = "%s < (uint32_t)%s" % (loopVar, lenAccessLhs)
+            forIncr = "++%s" % loopVar
+
+            if needNullCheck:
+                self.cgen.beginIf(equalLenExpr)
+
+            if lenAccessGuardLhs is not None:
+                self.cgen.beginIf(lenAccessGuardLhs)
+
+            self.cgen.beginFor(forInit, forCond, forIncr)
+
+        self.cgen.funcCall(None, self.prefix + vulkanType.typeName,
+                           [accessLhs, accessRhs, self.onFailCompareVar])
+
+        if lenAccessLhs is not None:
+            self.cgen.endFor()
+            if lenAccessGuardLhs is not None:
+                self.cgen.endIf()
+            if needNullCheck:
+                self.cgen.endIf()
+
+        if needNullCheck:
+            self.cgen.endIf()
+
+    def onString(self, vulkanType):
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        bothNullExpr = self.makeBothNullExpr(accessLhs, accessRhs)
+        bothNotNullExpr = self.makeBothNotNullExpr(accessLhs, accessRhs)
+        nullMatchExpr = "(%s) || (%s)" % (bothNullExpr, bothNotNullExpr)
+
+        self.compareWithConsequence( \
+            nullMatchExpr,
+            vulkanType,
+            "Mismatch in string pointer nullness")
+
+        self.cgen.beginIf(bothNotNullExpr)
+
+        self.compareWithConsequence(
+            self.makeEqualStringExpr(accessLhs, accessRhs),
+            vulkanType, "Unequal strings")
+
+        self.cgen.endIf()
+
+    def onStringArray(self, vulkanType):
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        lenAccessLhs = self.lenAccessorLhs(vulkanType)
+        lenAccessRhs = self.lenAccessorRhs(vulkanType)
+
+        lenAccessGuardLhs = self.lenAccessGuardLhs(vulkanType)
+        lenAccessGuardRhs = self.lenAccessGuardRhs(vulkanType)
+
+        bothNullExpr = self.makeBothNullExpr(accessLhs, accessRhs)
+        bothNotNullExpr = self.makeBothNotNullExpr(accessLhs, accessRhs)
+        nullMatchExpr = "(%s) || (%s)" % (bothNullExpr, bothNotNullExpr)
+
+        self.compareWithConsequence( \
+            nullMatchExpr,
+            vulkanType,
+            "Mismatch in string array pointer nullness")
+
+        equalLenExpr = self.makeEqualExpr(lenAccessLhs, lenAccessRhs)
+
+        self.compareWithConsequence( \
+            equalLenExpr,
+            vulkanType, "Lengths not equal in string array")
+
+        self.compareWithConsequence( \
+            equalLenExpr,
+            vulkanType, "Lengths not equal in string array")
+
+        self.cgen.beginIf("%s && %s" % (equalLenExpr, bothNotNullExpr))
+
+        loopVar = "i"
+        accessLhs = "*(%s + %s)" % (accessLhs, loopVar)
+        accessRhs = "*(%s + %s)" % (accessRhs, loopVar)
+        forInit = "uint32_t %s = 0" % loopVar
+        forCond = "%s < (uint32_t)%s" % (loopVar, lenAccessLhs)
+        forIncr = "++%s" % loopVar
+
+        if lenAccessGuardLhs is not None:
+            self.cgen.beginIf(lenAccessGuardLhs)
+
+        self.cgen.beginFor(forInit, forCond, forIncr)
+
+        self.compareWithConsequence(
+            self.makeEqualStringExpr(accessLhs, accessRhs),
+            vulkanType, "Unequal string in string array")
+
+        self.cgen.endFor()
+
+        if lenAccessGuardLhs is not None:
+            self.cgen.endIf()
+
+        self.cgen.endIf()
+
+    def onStaticArr(self, vulkanType):
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        lenAccessLhs = self.lenAccessorLhs(vulkanType)
+
+        finalLenExpr = "%s * %s" % (lenAccessLhs,
+                                    self.cgen.sizeofExpr(vulkanType))
+
+        self.compareWithConsequence(
+            self.makeEqualBufExpr(accessLhs, accessRhs, finalLenExpr),
+            vulkanType, "Unequal static array")
+
+    def onStructExtension(self, vulkanType):
+        lhs = self.exprAccessorLhs(vulkanType)
+        rhs = self.exprAccessorRhs(vulkanType)
+
+        self.cgen.beginIf(lhs)
+        self.cgen.funcCall(None, self.prefix + "extension_struct",
+                           [lhs, rhs, self.onFailCompareVar])
+        self.cgen.endIf()
+
+    def onPointer(self, vulkanType):
+        accessLhs = self.exprAccessorLhs(vulkanType)
+        accessRhs = self.exprAccessorRhs(vulkanType)
+
+        skipStreamInternal = vulkanType.typeName == "void"
+        if skipStreamInternal:
+            return
+
+        lenAccessLhs = self.lenAccessorLhs(vulkanType)
+        lenAccessRhs = self.lenAccessorRhs(vulkanType)
+
+        if lenAccessLhs is not None:
+            self.compareWithConsequence( \
+                self.makeEqualExpr(lenAccessLhs, lenAccessRhs),
+                vulkanType, "Lengths not equal")
+
+            finalLenExpr = "%s * %s" % (lenAccessLhs,
+                                        self.cgen.sizeofExpr(
+                                            vulkanType.getForValueAccess()))
+        else:
+            finalLenExpr = self.cgen.sizeofExpr(vulkanType.getForValueAccess())
+
+        self.compareWithConsequence(
+            self.makeEqualBufExpr(accessLhs, accessRhs, finalLenExpr),
+            vulkanType, "Unequal dyn array")
+
+    def onValue(self, vulkanType):
+        accessLhs = self.exprAccessorValueLhs(vulkanType)
+        accessRhs = self.exprAccessorValueRhs(vulkanType)
+        self.compareWithConsequence(
+            self.makeEqualExpr(accessLhs, accessRhs), vulkanType,
+            "Value not equal")
+
+
+class VulkanTesting(VulkanWrapperGenerator):
+
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.codegen = CodeGen()
+
+        self.equalityCodegen = \
+            VulkanEqualityCodegen(
+                None,
+                EQUALITY_VAR_NAMES,
+                EQUALITY_ON_FAIL_VAR,
+                API_PREFIX_EQUALITY)
+
+        self.knownDefs = {}
+
+        self.extensionTestingPrototype = \
+            VulkanAPI(API_PREFIX_EQUALITY + "extension_struct",
+                      EQUALITY_RET_TYPE,
+                      [STRUCT_EXTENSION_PARAM,
+                       STRUCT_EXTENSION_PARAM2,
+                       EQUALITY_ON_FAIL_VAR_TYPE])
+
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+        self.module.appendImpl(self.codegen.makeFuncDecl(
+            self.extensionTestingPrototype))
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+        if name in self.knownDefs:
+            return
+
+        category = self.typeInfo.categoryOf(name)
+
+        if category in ["struct", "union"] and alias:
+            self.module.appendHeader(
+                self.codegen.makeFuncAlias(API_PREFIX_EQUALITY + name,
+                                           API_PREFIX_EQUALITY + alias))
+
+        if category in ["struct", "union"] and not alias:
+
+            structInfo = self.typeInfo.structs[name]
+
+            typeFromName = \
+                lambda varname: makeVulkanTypeSimple(True, name, 1, varname)
+
+            compareParams = \
+                list(map(typeFromName, EQUALITY_VAR_NAMES)) + \
+                [EQUALITY_ON_FAIL_VAR_TYPE]
+
+            comparePrototype = \
+                VulkanAPI(API_PREFIX_EQUALITY + name,
+                          EQUALITY_RET_TYPE,
+                          compareParams)
+
+            def structCompareDef(cgen):
+                self.equalityCodegen.cgen = cgen
+                for member in structInfo.members:
+                    iterateVulkanType(self.typeInfo, member,
+                                      self.equalityCodegen)
+
+            self.module.appendHeader(
+                self.codegen.makeFuncDecl(comparePrototype))
+            self.module.appendImpl(
+                self.codegen.makeFuncImpl(comparePrototype, structCompareDef))
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
+
+        def forEachExtensionCompare(ext, castedAccess, cgen):
+            cgen.funcCall(None, API_PREFIX_EQUALITY + ext.name,
+                          [castedAccess,
+                           cgen.makeReinterpretCast(
+                               STRUCT_EXTENSION_PARAM2.paramName, ext.name),
+                           EQUALITY_ON_FAIL_VAR])
+
+        self.module.appendImpl(
+            self.codegen.makeFuncImpl(
+                self.extensionTestingPrototype,
+                lambda cgen: self.emitForEachStructExtension(
+                    cgen,
+                    EQUALITY_RET_TYPE,
+                    STRUCT_EXTENSION_PARAM,
+                    forEachExtensionCompare)))
diff --git a/registry/vulkan/scripts/cereal/transform.py b/registry/vulkan/scripts/cereal/transform.py
new file mode 100644
index 0000000..79aff0e
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/transform.py
@@ -0,0 +1,348 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .common.codegen import CodeGen
+from .common.vulkantypes import \
+        VulkanCompoundType, VulkanAPI, makeVulkanTypeSimple, vulkanTypeNeedsTransform, vulkanTypeGetNeededTransformTypes, VulkanTypeIterator, iterateVulkanType, vulkanTypeforEachSubType, TRIVIAL_TRANSFORMED_TYPES, NON_TRIVIAL_TRANSFORMED_TYPES, TRANSFORMED_TYPES
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import STRUCT_EXTENSION_PARAM, STRUCT_EXTENSION_PARAM_FOR_WRITE
+
+def deviceMemoryTransform(resourceTrackerVarName, structOrApiInfo, getExpr, getLen, cgen, variant="tohost"):
+    paramIndices = \
+        structOrApiInfo.deviceMemoryInfoParameterIndices
+
+    for _, info in paramIndices.items():
+        orderedKeys = [
+            "handle",
+            "offset",
+            "size",
+            "typeIndex",
+            "typeBits",]
+        
+        casts = {
+            "handle" : "VkDeviceMemory*",
+            "offset" : "VkDeviceSize*",
+            "size" : "VkDeviceSize*",
+            "typeIndex" : "uint32_t*",
+            "typeBits" : "uint32_t*",
+        }
+
+        accesses = {
+            "handle" : "nullptr",
+            "offset" : "nullptr",
+            "size" : "nullptr",
+            "typeIndex" : "nullptr",
+            "typeBits" : "nullptr",
+        }
+
+        lenAccesses = {
+            "handle" : "0",
+            "offset" : "0",
+            "size" : "0",
+            "typeIndex" : "0",
+            "typeBits" : "0",
+        }
+
+        def doParam(i, vulkanType):
+            access = getExpr(vulkanType)
+            lenAccess = getLen(vulkanType)
+
+            for k in orderedKeys:
+                if i == info.__dict__[k]:
+                    accesses[k] = access
+                    if lenAccess is not None:
+                        lenAccesses[k] = lenAccess
+                    else:
+                        lenAccesses[k] = "1"
+
+        vulkanTypeforEachSubType(structOrApiInfo, doParam)
+
+        callParams = ", ".join( \
+            ["(%s)%s, %s" % (casts[k], accesses[k], lenAccesses[k]) \
+                for k in orderedKeys])
+
+        if variant == "tohost":
+            cgen.stmt("%s->deviceMemoryTransform_tohost(%s)" % \
+                (resourceTrackerVarName, callParams))
+        else:
+            cgen.stmt("%s->deviceMemoryTransform_fromhost(%s)" % \
+                (resourceTrackerVarName, callParams))
+
+def directTransform(resourceTrackerVarName, vulkanType, getExpr, getLen, cgen, variant="tohost"):
+    access = getExpr(vulkanType)
+    lenAccess = getLen(vulkanType)
+
+    if lenAccess:
+        finalLenAccess = lenAccess
+    else:
+        finalLenAccess = "1"
+
+    cgen.stmt("%s->transformImpl_%s_%s(%s, %s)" % (resourceTrackerVarName,
+                                                   vulkanType.typeName, variant, access, finalLenAccess))
+
+def genTransformsForVulkanType(resourceTrackerVarName, structOrApiInfo, getExpr, getLen, cgen, variant="tohost"):
+    for transform in vulkanTypeGetNeededTransformTypes(structOrApiInfo):
+        if transform == "devicememory":
+            deviceMemoryTransform( \
+                resourceTrackerVarName,
+                structOrApiInfo,
+                getExpr, getLen, cgen, variant=variant)
+
+class TransformCodegen(VulkanTypeIterator):
+    def __init__(self, cgen, inputVar, resourceTrackerVarName, prefix, variant):
+        self.cgen = cgen
+        self.inputVar = inputVar
+        self.prefix = prefix
+        self.resourceTrackerVarName = resourceTrackerVarName
+
+        def makeAccess(varName, asPtr = True):
+            return lambda t: self.cgen.generalAccess(t, parentVarName = varName, asPtr = asPtr)
+
+        def makeLengthAccess(varName):
+            return lambda t: self.cgen.generalLengthAccess(t, parentVarName = varName)
+
+        def makeLengthAccessGuard(varName):
+            return lambda t: self.cgen.generalLengthAccessGuard(t, parentVarName=varName)
+
+        self.exprAccessor = makeAccess(self.inputVar)
+        self.exprAccessorValue = makeAccess(self.inputVar, asPtr = False)
+        self.lenAccessor = makeLengthAccess(self.inputVar)
+        self.lenAccessorGuard = makeLengthAccessGuard(self.inputVar)
+
+        self.checked = False
+
+        self.variant = variant
+
+    def makeCastExpr(self, vulkanType):
+        return "(%s)" % (
+            self.cgen.makeCTypeDecl(vulkanType, useParamName=False))
+
+    def asNonConstCast(self, access, vulkanType):
+        if vulkanType.staticArrExpr:
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForAddressAccess().getForNonConstAccess()), access)
+        elif vulkanType.accessibleAsPointer():
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForNonConstAccess()), access)
+        else:
+            casted = "%s(%s)" % (self.makeCastExpr(vulkanType.getForAddressAccess().getForNonConstAccess()), access)
+        return casted
+
+    def onCheck(self, vulkanType):
+        pass
+
+    def endCheck(self, vulkanType):
+        pass
+
+    def onCompoundType(self, vulkanType):
+
+        access = self.exprAccessor(vulkanType)
+        lenAccess = self.lenAccessor(vulkanType)
+        lenAccessGuard = self.lenAccessorGuard(vulkanType)
+
+        isPtr = vulkanType.pointerIndirectionLevels > 0
+
+        if lenAccessGuard is not None:
+            self.cgen.beginIf(lenAccessGuard)
+
+        if isPtr:
+            self.cgen.beginIf(access)
+
+        if lenAccess is not None:
+
+            loopVar = "i"
+            access = "%s + %s" % (access, loopVar)
+            forInit = "uint32_t %s = 0" % loopVar
+            forCond = "%s < (uint32_t)%s" % (loopVar, lenAccess)
+            forIncr = "++%s" % loopVar
+
+            self.cgen.beginFor(forInit, forCond, forIncr)
+
+        accessCasted = self.asNonConstCast(access, vulkanType)
+
+        if vulkanType.isTransformed:
+            directTransform(self.resourceTrackerVarName, vulkanType, self.exprAccessor, self.lenAccessor, self.cgen, variant=self.variant)
+
+        self.cgen.funcCall(None, self.prefix + vulkanType.typeName,
+                           [self.resourceTrackerVarName, accessCasted])
+
+        if lenAccess is not None:
+            self.cgen.endFor()
+
+        if isPtr:
+            self.cgen.endIf()
+
+        if lenAccessGuard is not None:
+            self.cgen.endIf()
+
+    def onString(self, vulkanType):
+        pass
+
+    def onStringArray(self, vulkanType):
+        pass
+
+    def onStaticArr(self, vulkanType):
+        pass
+
+    def onStructExtension(self, vulkanType):
+        access = self.exprAccessor(vulkanType)
+
+        castedAccessExpr = "(%s)(%s)" % ("void*", access)
+        self.cgen.beginIf(access)
+        self.cgen.funcCall(None, self.prefix + "extension_struct",
+                           [self.resourceTrackerVarName, castedAccessExpr])
+        self.cgen.endIf()
+
+    def onPointer(self, vulkanType):
+        pass
+
+    def onValue(self, vulkanType):
+        pass
+
+
+class VulkanTransform(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo, resourceTrackerTypeName="ResourceTracker", resourceTrackerVarName="resourceTracker"):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.codegen = CodeGen()
+
+        self.transformPrefix = "transform_"
+
+        self.tohostpart = "tohost"
+        self.fromhostpart = "fromhost"
+        self.variants = [self.tohostpart, self.fromhostpart]
+
+        self.toTransformVar = "toTransform"
+        self.resourceTrackerTypeName = resourceTrackerTypeName
+        self.resourceTrackerVarName = resourceTrackerVarName
+        self.transformParam = \
+            makeVulkanTypeSimple(False, self.resourceTrackerTypeName, 1,
+                                 self.resourceTrackerVarName)
+        self.voidType = makeVulkanTypeSimple(False, "void", 0)
+
+        self.extensionTransformPrototypes = []
+
+        for variant in self.variants:
+            self.extensionTransformPrototypes.append( \
+                VulkanAPI(self.transformPrefix + variant + "_extension_struct",
+                          self.voidType,
+                          [self.transformParam, STRUCT_EXTENSION_PARAM_FOR_WRITE]))
+
+        self.knownStructs = {}
+        self.needsTransform = set([])
+
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+        # Set up a convenience macro fro the transformed structs
+        # and forward-declare the resource tracker class
+        self.codegen.stmt("class %s" % self.resourceTrackerTypeName)
+        self.codegen.line("#define LIST_TRIVIAL_TRANSFORMED_TYPES(f) \\")
+        for name in TRIVIAL_TRANSFORMED_TYPES:
+            self.codegen.line("f(%s) \\" % name)
+        self.codegen.line("")
+
+        self.codegen.line("#define LIST_NON_TRIVIAL_TRANSFORMED_TYPES(f) \\")
+        for name in NON_TRIVIAL_TRANSFORMED_TYPES:
+            self.codegen.line("f(%s) \\" % name)
+        self.codegen.line("")
+
+        self.codegen.line("#define LIST_TRANSFORMED_TYPES(f) \\")
+        self.codegen.line("LIST_TRIVIAL_TRANSFORMED_TYPES(f) \\")
+        self.codegen.line("LIST_NON_TRIVIAL_TRANSFORMED_TYPES(f) \\")
+        self.codegen.line("")
+
+        self.module.appendHeader(self.codegen.swapCode())
+
+        for prototype in self.extensionTransformPrototypes:
+            self.module.appendImpl(self.codegen.makeFuncDecl(
+                prototype))
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+        if name in self.knownStructs:
+            return
+
+        category = self.typeInfo.categoryOf(name)
+
+        if category in ["struct", "union"] and alias:
+            for variant in self.variants:
+                self.module.appendHeader(
+                    self.codegen.makeFuncAlias(self.transformPrefix + variant + "_" + name,
+                                               self.transformPrefix + variant + "_" + alias))
+
+        if category in ["struct", "union"] and not alias:
+            structInfo = self.typeInfo.structs[name]
+            self.knownStructs[name] = structInfo
+
+            for variant in self.variants:
+                api = VulkanAPI( \
+                    self.transformPrefix + variant + "_" + name,
+                    self.voidType,
+                    [self.transformParam] + \
+                    [makeVulkanTypeSimple( \
+                        False, name, 1, self.toTransformVar)])
+
+                transformer = TransformCodegen(
+                    None,
+                    self.toTransformVar,
+                    self.resourceTrackerVarName,
+                    self.transformPrefix + variant + "_",
+                    variant)
+
+                def funcDefGenerator(cgen):
+                    transformer.cgen = cgen
+                    for p in api.parameters:
+                        cgen.stmt("(void)%s" % p.paramName)
+
+                    genTransformsForVulkanType(
+                        self.resourceTrackerVarName,
+                        structInfo,
+                        transformer.exprAccessor,
+                        transformer.lenAccessor,
+                        cgen,
+                        variant=variant)
+
+                    for member in structInfo.members:
+                        iterateVulkanType(
+                            self.typeInfo, member,
+                            transformer)
+
+                self.module.appendHeader(
+                    self.codegen.makeFuncDecl(api))
+                self.module.appendImpl(
+                    self.codegen.makeFuncImpl(api, funcDefGenerator))
+
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
+
+        for (variant, prototype) in zip(self.variants, self.extensionTransformPrototypes):
+            def forEachExtensionTransform(ext, castedAccess, cgen):
+                if ext.isTransformed:
+                    directTransform(self.resourceTrackerVarName, ext, lambda _ : castedAccess, lambda _ : "1", cgen, variant);
+                cgen.funcCall(None, self.transformPrefix + variant + "_" + ext.name,
+                              [self.resourceTrackerVarName, castedAccess])
+
+            self.module.appendImpl(
+                self.codegen.makeFuncImpl(
+                    prototype,
+                    lambda cgen: self.emitForEachStructExtension(
+                        cgen,
+                        self.voidType,
+                        STRUCT_EXTENSION_PARAM_FOR_WRITE,
+                        forEachExtensionTransform)))
diff --git a/registry/vulkan/scripts/cereal/unbox.py b/registry/vulkan/scripts/cereal/unbox.py
new file mode 100644
index 0000000..f18fa27
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/unbox.py
@@ -0,0 +1,81 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .common.codegen import CodeGen
+from .common.vulkantypes import \
+        VulkanCompoundType, VulkanAPI, makeVulkanTypeSimple, vulkanTypeNeedsTransform, vulkanTypeGetNeededTransformTypes, VulkanTypeIterator, iterateVulkanType, vulkanTypeforEachSubType, TRANSFORMED_TYPES
+
+from .wrapperdefs import VulkanWrapperGenerator
+from .wrapperdefs import STRUCT_EXTENSION_PARAM, STRUCT_EXTENSION_PARAM_FOR_WRITE
+
+# This is different from others; it operations solely in terms of deepcopy and handlemap
+class VulkanUnbox(VulkanWrapperGenerator):
+    def __init__(self, module, typeInfo):
+        VulkanWrapperGenerator.__init__(self, module, typeInfo)
+
+        self.codegen = CodeGen()
+
+        self.unboxPrefix = "unbox"
+        self.toUnboxVar = "toUnbox"
+        self.poolParam = \
+            makeVulkanTypeSimple(False, "BumpPool", 1, "pool")
+
+        self.knownStructs = {}
+        self.needsTransform = set([])
+
+    def onBegin(self,):
+        VulkanWrapperGenerator.onBegin(self)
+
+    def onGenType(self, typeXml, name, alias):
+        VulkanWrapperGenerator.onGenType(self, typeXml, name, alias)
+
+        if name in self.knownStructs:
+            return
+
+        category = self.typeInfo.categoryOf(name)
+
+        if category in ["struct", "union"] and alias:
+            self.module.appendHeader(
+                self.codegen.makeFuncAlias(self.unboxPrefix + "_" + name,
+                                           self.unboxPrefix + "_" + alias))
+
+        if category in ["struct", "union"] and not alias:
+            structInfo = self.typeInfo.structs[name]
+            self.knownStructs[name] = structInfo
+
+            api = VulkanAPI( \
+                self.unboxPrefix + "_" + name,
+                makeVulkanTypeSimple(False, name, 1),
+                [self.poolParam] + \
+                [makeVulkanTypeSimple( \
+                    True, name, 1, self.toUnboxVar)])
+
+            def funcDefGenerator(cgen):
+                cgen.stmt("BoxedHandleUnwrapMapping unboxMapping")
+                cgen.stmt("%s* res = (%s*)pool->alloc(sizeof(const %s))" % (name, name, name))
+                cgen.stmt("deepcopy_%s(pool, %s, %s)" % (name, self.toUnboxVar, "res"))
+                cgen.stmt("handlemap_%s(%s, %s)" % (name, "&unboxMapping", "res"))
+                cgen.stmt("return res")
+
+            self.module.appendHeader(
+                self.codegen.makeFuncDecl(api))
+            self.module.appendImpl(
+                self.codegen.makeFuncImpl(api, funcDefGenerator))
+
+    def onGenCmd(self, cmdinfo, name, alias):
+        VulkanWrapperGenerator.onGenCmd(self, cmdinfo, name, alias)
+
+    def onEnd(self,):
+        VulkanWrapperGenerator.onEnd(self)
diff --git a/registry/vulkan/scripts/cereal/wrapperdefs.py b/registry/vulkan/scripts/cereal/wrapperdefs.py
new file mode 100644
index 0000000..64cb206
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/wrapperdefs.py
@@ -0,0 +1,106 @@
+# Copyright (c) 2018 The Android Open Source Project
+# Copyright (c) 2018 Google 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.
+
+from .common.codegen import VulkanWrapperGenerator
+from .common.vulkantypes import makeVulkanTypeSimple
+
+# Contains definitions for various Vulkan API wrappers. This information is
+# shared to make it easier for one kind of wrapper to know how to call
+# another one.
+
+API_PREFIX_MARSHAL = "marshal_"
+API_PREFIX_UNMARSHAL = "unmarshal_"
+API_PREFIX_RESERVEDMARSHAL = "reservedmarshal_"
+API_PREFIX_RESERVEDUNMARSHAL = "reservedunmarshal_"
+
+MARSHAL_INPUT_VAR_NAME = "forMarshaling"
+UNMARSHAL_INPUT_VAR_NAME = "forUnmarshaling"
+
+API_PREFIX_VALIDATE = "validate_"
+API_PREFIX_FRONTEND = "goldfish_frontend_"
+
+VULKAN_STREAM_TYPE = "VulkanStream"
+VULKAN_STREAM_TYPE_GUEST = "VulkanStreamGuest"
+VULKAN_STREAM_VAR_NAME = "vkStream"
+
+VALIDATE_RESULT_TYPE = "VkResult"
+VALIDATE_VAR_NAME = "validateResult"
+VALIDATE_GOOD_RESULT = "VK_SUCCESS"
+
+ROOT_TYPE_VAR_NAME = "rootType"
+ROOT_TYPE_DEFAULT_VALUE = "VK_STRUCTURE_TYPE_MAX_ENUM"
+ROOT_TYPE_TYPE = "VkStructureType"
+ROOT_TYPE_PARAM = makeVulkanTypeSimple(
+    False, ROOT_TYPE_TYPE, 0, ROOT_TYPE_VAR_NAME)
+
+PARAMETERS_MARSHALING = [
+    makeVulkanTypeSimple(False, VULKAN_STREAM_TYPE, 1, VULKAN_STREAM_VAR_NAME),
+    ROOT_TYPE_PARAM,
+]
+PARAMETERS_MARSHALING_GUEST = [
+    makeVulkanTypeSimple(False, VULKAN_STREAM_TYPE_GUEST,
+                         1, VULKAN_STREAM_VAR_NAME),
+    ROOT_TYPE_PARAM,
+]
+PARAMETERS_VALIDATE = [
+    makeVulkanTypeSimple(False, VALIDATE_RESULT_TYPE, 1, VALIDATE_VAR_NAME)
+]
+PARAMETERS_COUNTING = [
+    makeVulkanTypeSimple(False, "size_t", 1, VULKAN_STREAM_VAR_NAME)
+]
+
+STRUCT_EXTENSION_PARAM = \
+    makeVulkanTypeSimple(True, "void", 1, "structExtension")
+
+STRUCT_EXTENSION_PARAM2 = \
+    makeVulkanTypeSimple(True, "void", 1, "structExtension2")
+
+STRUCT_EXTENSION_PARAM_FOR_WRITE = \
+    makeVulkanTypeSimple(False, "void", 1, "structExtension_out")
+
+STRUCT_TYPE_API_NAME = "goldfish_vk_struct_type"
+EXTENSION_SIZE_API_NAME = "goldfish_vk_extension_struct_size"
+EXTENSION_SIZE_WITH_STREAM_FEATURES_API_NAME = "goldfish_vk_extension_struct_size_with_stream_features"
+
+VOID_TYPE = makeVulkanTypeSimple(False, "void", 0)
+STREAM_RET_TYPE = makeVulkanTypeSimple(False, "void", 0)
+
+API_PREFIX_EQUALITY = "checkEqual_"
+EQUALITY_VAR_NAMES = ["a", "b"]
+EQUALITY_ON_FAIL_VAR = "onFail"
+EQUALITY_ON_FAIL_VAR_TYPE = makeVulkanTypeSimple(False, "OnFailCompareFunc", 0,
+                                                 EQUALITY_ON_FAIL_VAR)
+EQUALITY_RET_TYPE = makeVulkanTypeSimple(False, "void", 0)
+
+RELAXED_APIS = [
+    "vkWaitForFences",
+    "vkWaitSemaphores",
+    "vkWaitSemaphoresKHR",
+    "vkQueueWaitIdle",
+    "vkDeviceWaitIdle",
+    "vkQueueFlushCommandsGOOGLE",
+]
+
+STYPE_OVERRIDE = {
+    "VkPhysicalDeviceFragmentDensityMapFeaturesEXT": "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT",
+    "VkPhysicalDeviceFragmentDensityMapPropertiesEXT": "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT",
+    "VkRenderPassFragmentDensityMapCreateInfoEXT": "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT",
+    "VkImportColorBufferGOOGLE": "VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE",
+    "VkImportPhysicalAddressGOOGLE": "VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE",
+    "VkImportBufferGOOGLE": "VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE",
+}
+
+
+
diff --git a/registry/vulkan/scripts/cerealgenerator.py b/registry/vulkan/scripts/cerealgenerator.py
new file mode 100644
index 0000000..48fdc69
--- /dev/null
+++ b/registry/vulkan/scripts/cerealgenerator.py
@@ -0,0 +1,703 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2013-2018 The Khronos Group Inc.
+# Copyright (c) 2013-2018 Google 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.
+
+import os, re, sys
+from generator import *
+
+import cereal
+from cereal.wrapperdefs import VULKAN_STREAM_TYPE
+from cereal.wrapperdefs import VULKAN_STREAM_TYPE_GUEST
+
+# CerealGenerator - generates set of driver sources
+# while being agnostic to the stream implementation
+
+copyrightHeader = """// Copyright (C) 2018 The Android Open Source Project
+// Copyright (C) 2018 Google 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.
+"""
+
+autogeneratedHeaderTemplate = """
+// Autogenerated module %s
+// %s
+// Please do not modify directly;
+// re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
+// or directly from Python by defining:
+// VULKAN_REGISTRY_XML_DIR : Directory containing vk.xml
+// VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
+// CEREAL_OUTPUT_DIR: Where to put the generated sources.
+// python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
+"""
+
+autogeneratedMkTemplate = """
+# Autogenerated makefile
+# %s
+# Please do not modify directly;
+# re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
+# or directly from Python by defining:
+# VULKAN_REGISTRY_XML_DIR : Directory containing vk.xml
+# VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
+# CEREAL_OUTPUT_DIR: Where to put the generated sources.
+# python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
+"""
+
+def banner_command(argv):
+    """Return sanitized command-line description.
+       |argv| must be a list of command-line parameters, e.g. sys.argv.
+       Return a string corresponding to the command, with platform-specific
+       paths removed."""
+
+    def makeRelative(someArg):
+        if os.path.exists(someArg):
+            return os.path.relpath(someArg)
+        return someArg
+
+    return ' '.join(map(makeRelative, argv))
+
+suppressEnabled = False
+suppressExceptModule = None
+
+def envGetOrDefault(key, default=None):
+    if key in os.environ:
+        return os.environ[key]
+    print("envGetOrDefault: notfound: %s" % key)
+    return default
+
+def init_suppress_option():
+    global suppressEnabled
+    global suppressExceptModule
+
+    if "ANDROID_EMU_VK_CEREAL_SUPPRESS" in os.environ:
+        option = os.environ["ANDROID_EMU_VK_CEREAL_SUPPRESS"]
+
+        if option != "":
+            suppressExceptModule = option
+            suppressEnabled = True
+            print("suppressEnabled: %s" % suppressExceptModule)
+
+# ---- 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 CerealGenerator(OutputGenerator):
+
+    """Generate serialization code"""
+    def __init__(self, errFile = sys.stderr,
+                       warnFile = sys.stderr,
+                       diagFile = sys.stdout):
+        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
+
+        init_suppress_option()
+
+        self.typeInfo = cereal.VulkanTypeInfo()
+
+        self.modules = {}
+        self.protos = {}
+        self.moduleList = []
+        self.protoList = []
+
+        self.wrappers = []
+
+        self.codegen = cereal.CodeGen()
+
+        self.host_cmake_generator = lambda cerealCppFiles, dispatchCppFiles: """%s
+
+android_add_library(TARGET OpenglRender_vulkan_cereal_dispatch LICENSE Apache-2.0 SRC %s
+)
+target_compile_definitions(OpenglRender_vulkan_cereal_dispatch PRIVATE -DVK_ANDROID_native_buffer -DVK_GOOGLE_gfxstream)
+android_target_compile_definitions(OpenglRender_vulkan_cereal_dispatch windows PRIVATE -DVK_USE_PLATFORM_WIN32_KHR)
+android_target_compile_definitions(OpenglRender_vulkan_cereal_dispatch linux PRIVATE -DVK_USE_PLATFORM_XCB_KHR)
+android_target_compile_definitions(OpenglRender_vulkan_cereal_dispatch darwin PRIVATE -DVK_USE_PLATFORM_METAL_EXT)
+target_include_directories(OpenglRender_vulkan_cereal_dispatch
+                           PUBLIC
+                           ${ANDROID_EMUGL_DIR}/host/libs/libOpenglRender/vulkan/cereal
+                           PRIVATE
+                           ${ANDROID_EMUGL_DIR}/host/include
+                           ${ANDROID_EMUGL_DIR}/host/libs/libOpenglRender/
+                           ${ANDROID_EMUGL_DIR}/host/libs/libOpenglRender/vulkan
+                           ${ANDROID_EMUGL_DIR}/host/include/vulkan)
+
+android_add_library(TARGET OpenglRender_vulkan_cereal LICENSE Apache-2.0 SRC %s
+)
+target_compile_definitions(OpenglRender_vulkan_cereal PRIVATE -DVK_ANDROID_native_buffer -DVK_GOOGLE_gfxstream)
+android_target_compile_definitions(OpenglRender_vulkan_cereal windows PRIVATE -DVK_USE_PLATFORM_WIN32_KHR)
+target_link_libraries(OpenglRender_vulkan_cereal PRIVATE OpenglRender_vulkan_cereal_dispatch)
+target_link_libraries(OpenglRender_vulkan_cereal PRIVATE emugl_base)
+target_link_libraries(OpenglRender_vulkan_cereal PUBLIC android-emu-base)
+
+target_include_directories(OpenglRender_vulkan_cereal
+                           PUBLIC
+                           ${ANDROID_EMUGL_DIR}/host/libs/libOpenglRender/vulkan/cereal
+                           PRIVATE
+                           ${ANDROID_EMUGL_DIR}/host/include
+                           ${ANDROID_EMUGL_DIR}/host/libs/libOpenglRender/
+                           ${ANDROID_EMUGL_DIR}/host/libs/libOpenglRender/vulkan
+                           ${ANDROID_EMUGL_DIR}/host/include/vulkan)
+""" % (autogeneratedMkTemplate % banner_command(sys.argv), dispatchCppFiles, cerealCppFiles)
+
+        encoderInclude = """
+#include "goldfish_vk_private_defs.h"
+#include <memory>
+class IOStream;
+"""
+        encoderImplInclude = """
+#include "IOStream.h"
+#include "Resources.h"
+#include "ResourceTracker.h"
+#include "Validation.h"
+#include "%s.h"
+
+#include "android/base/AlignedBuf.h"
+#include "android/base/BumpPool.h"
+#include "android/base/synchronization/AndroidLock.h"
+
+#include <cutils/properties.h>
+
+#include "goldfish_vk_marshaling_guest.h"
+#include "goldfish_vk_reserved_marshaling_guest.h"
+#include "goldfish_vk_deepcopy_guest.h"
+#include "goldfish_vk_counting_guest.h"
+#include "goldfish_vk_handlemap_guest.h"
+#include "goldfish_vk_private_defs.h"
+#include "goldfish_vk_transform_guest.h"
+
+#include <unordered_map>
+
+""" % VULKAN_STREAM_TYPE_GUEST
+
+        functableImplInclude = """
+#include "VkEncoder.h"
+#include "../OpenglSystemCommon/HostConnection.h"
+#include "ResourceTracker.h"
+
+#include "goldfish_vk_private_defs.h"
+
+#include <log/log.h>
+#include <cstring>
+
+// Stuff we are not going to use but if included,
+// will cause compile errors. These are Android Vulkan
+// required extensions, but the approach will be to
+// implement them completely on the guest side.
+#undef VK_KHR_android_surface
+"""
+        marshalIncludeGuest = """
+#include "goldfish_vk_marshaling_guest.h"
+#include "goldfish_vk_private_defs.h"
+#include "%s.h"
+
+// Stuff we are not going to use but if included,
+// will cause compile errors. These are Android Vulkan
+// required extensions, but the approach will be to
+// implement them completely on the guest side.
+#undef VK_KHR_android_surface
+#undef VK_ANDROID_external_memory_android_hardware_buffer
+""" % VULKAN_STREAM_TYPE_GUEST
+
+        reservedmarshalIncludeGuest = """
+#include "goldfish_vk_marshaling_guest.h"
+#include "goldfish_vk_private_defs.h"
+#include "%s.h"
+
+// Stuff we are not going to use but if included,
+// will cause compile errors. These are Android Vulkan
+// required extensions, but the approach will be to
+// implement them completely on the guest side.
+#undef VK_KHR_android_surface
+#undef VK_ANDROID_external_memory_android_hardware_buffer
+""" % VULKAN_STREAM_TYPE_GUEST
+
+        reservedmarshalImplIncludeGuest = """
+#include "Resources.h"
+"""
+
+        vulkanStreamIncludeHost = """
+#include "goldfish_vk_private_defs.h"
+
+#include "%s.h"
+#include "android/base/files/StreamSerializing.h"
+""" % VULKAN_STREAM_TYPE
+
+        testingInclude = """
+#include "goldfish_vk_private_defs.h"
+#include <string.h>
+#include <functional>
+using OnFailCompareFunc = std::function<void(const char*)>;
+"""
+        poolInclude = """
+#include "goldfish_vk_private_defs.h"
+#include "android/base/BumpPool.h"
+using android::base::Allocator;
+using android::base::BumpPool;
+"""
+        handleMapInclude = """
+#include "goldfish_vk_private_defs.h"
+#include "VulkanHandleMapping.h"
+"""
+        transformIncludeGuest = """
+#include "goldfish_vk_private_defs.h"
+"""
+        transformInclude = """
+#include "goldfish_vk_private_defs.h"
+#include "goldfish_vk_extension_structs.h"
+"""
+        transformImplIncludeGuest = """
+#include "ResourceTracker.h"
+"""
+        transformImplInclude = """
+#include "VkDecoderGlobalState.h"
+"""
+        deepcopyInclude = """
+#include "vk_util.h"
+"""
+        poolIncludeGuest = """
+#include "goldfish_vk_private_defs.h"
+#include "android/base/BumpPool.h"
+using android::base::Allocator;
+using android::base::BumpPool;
+// Stuff we are not going to use but if included,
+// will cause compile errors. These are Android Vulkan
+// required extensions, but the approach will be to
+// implement them completely on the guest side.
+#undef VK_KHR_android_surface
+#undef VK_ANDROID_external_memory_android_hardware_buffer
+"""
+        handleMapIncludeGuest = """
+#include "goldfish_vk_private_defs.h"
+#include "VulkanHandleMapping.h"
+// Stuff we are not going to use but if included,
+// will cause compile errors. These are Android Vulkan
+// required extensions, but the approach will be to
+// implement them completely on the guest side.
+#undef VK_KHR_android_surface
+#undef VK_ANDROID_external_memory_android_hardware_buffer
+"""
+        dispatchHeaderDefs = """
+#include "goldfish_vk_private_defs.h"
+namespace goldfish_vk {
+
+struct VulkanDispatch;
+
+} // namespace goldfish_vk
+using DlOpenFunc = void* (void);
+using DlSymFunc = void* (void*, const char*);
+"""
+
+        extensionStructsInclude = """
+#include "goldfish_vk_private_defs.h"
+"""
+
+        extensionStructsIncludeGuest = """
+#include "vk_platform_compat.h"
+#include "goldfish_vk_private_defs.h"
+// Stuff we are not going to use but if included,
+// will cause compile errors. These are Android Vulkan
+// required extensions, but the approach will be to
+// implement them completely on the guest side.
+#undef VK_KHR_android_surface
+#undef VK_ANDROID_external_memory_android_hardware_buffer
+"""
+        commonCerealImplIncludes = """
+#include "goldfish_vk_extension_structs.h"
+#include "goldfish_vk_private_defs.h"
+"""
+        commonCerealIncludesGuest = """
+#include "vk_platform_compat.h"
+"""
+        commonCerealImplIncludesGuest = """
+#include "goldfish_vk_extension_structs_guest.h"
+#include "goldfish_vk_private_defs.h"
+
+#include <cstring>
+"""
+        countingIncludes = """
+#include "vk_platform_compat.h"
+#include "goldfish_vk_private_defs.h"
+"""
+
+        dispatchImplIncludes = """
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+"""
+
+        decoderSnapshotHeaderIncludes = """
+#include <memory>
+#include "common/goldfish_vk_private_defs.h"
+"""
+        decoderSnapshotImplIncludes = """
+#include "VulkanHandleMapping.h"
+#include "VkDecoderGlobalState.h"
+#include "VkReconstruction.h"
+
+#include "android/base/synchronization/Lock.h"
+"""
+
+        decoderHeaderIncludes = """
+#include <memory>
+
+namespace android {
+namespace base {
+class BumpPool;
+} // namespace android
+} // namespace base
+
+"""
+
+        decoderImplIncludes = """
+#include "common/goldfish_vk_marshaling.h"
+#include "common/goldfish_vk_reserved_marshaling.h"
+#include "common/goldfish_vk_private_defs.h"
+#include "common/goldfish_vk_transform.h"
+
+#include "android/base/BumpPool.h"
+#include "android/base/system/System.h"
+#include "android/base/Tracing.h"
+#include "android/utils/GfxstreamFatalError.h"
+
+#include "IOStream.h"
+#include "emugl/common/feature_control.h"
+#include "emugl/common/logging.h"
+
+#include "VkDecoderGlobalState.h"
+#include "VkDecoderSnapshot.h"
+
+#include "VulkanDispatch.h"
+#include "%s.h"
+
+#include <unordered_map>
+""" % VULKAN_STREAM_TYPE
+
+        self.guest_encoder_tag = "guest_encoder"
+        self.guest_hal_tag = "guest_hal"
+        self.host_tag = "host"
+
+        default_guest_abs_encoder_destination = \
+            os.path.join(
+                os.getcwd(),
+                "..", "..",
+                "device", "generic", "goldfish-opengl",
+                "system", "vulkan_enc")
+        self.guest_abs_encoder_destination = \
+            envGetOrDefault("VK_CEREAL_GUEST_ENCODER_DIR",
+                            default_guest_abs_encoder_destination)
+
+        default_guest_abs_hal_destination = \
+            os.path.join(
+                os.getcwd(),
+                "..", "..",
+                "device", "generic", "goldfish-opengl",
+                "system", "vulkan")
+        self.guest_abs_hal_destination = \
+            envGetOrDefault("VK_CEREAL_GUEST_HAL_DIR",
+                            default_guest_abs_hal_destination)
+
+        default_host_abs_decoder_destination = \
+            os.path.join(
+                os.getcwd(),
+                "android", "android-emugl", "host",
+                "libs", "libOpenglRender", "vulkan")
+        self.host_abs_decoder_destination = \
+            envGetOrDefault("VK_CEREAL_HOST_DECODER_DIR",
+                            default_host_abs_decoder_destination)
+
+        self.addGuestEncoderModule(
+            "VkEncoder",
+            extraHeader = encoderInclude,
+            extraImpl = encoderImplInclude)
+
+        self.addGuestEncoderModule("goldfish_vk_extension_structs_guest",
+                                   extraHeader=extensionStructsIncludeGuest)
+        self.addGuestEncoderModule("goldfish_vk_marshaling_guest",
+                                   extraHeader=commonCerealIncludesGuest + marshalIncludeGuest,
+                                   extraImpl=commonCerealImplIncludesGuest)
+        self.addGuestEncoderModule("goldfish_vk_reserved_marshaling_guest",
+                                   extraHeader=commonCerealIncludesGuest + reservedmarshalIncludeGuest,
+                                   extraImpl=commonCerealImplIncludesGuest + reservedmarshalImplIncludeGuest)
+        self.addGuestEncoderModule("goldfish_vk_deepcopy_guest",
+                                   extraHeader=commonCerealIncludesGuest + poolIncludeGuest,
+                                   extraImpl=commonCerealImplIncludesGuest + deepcopyInclude)
+        self.addGuestEncoderModule("goldfish_vk_counting_guest",
+                                   extraHeader=countingIncludes,
+                                   extraImpl=commonCerealImplIncludesGuest)
+        self.addGuestEncoderModule("goldfish_vk_handlemap_guest",
+                                   extraHeader=commonCerealIncludesGuest + handleMapIncludeGuest,
+                                   extraImpl=commonCerealImplIncludesGuest)
+        self.addGuestEncoderModule("goldfish_vk_transform_guest",
+                                   extraHeader=commonCerealIncludesGuest + transformIncludeGuest,
+                                   extraImpl=commonCerealImplIncludesGuest + transformImplIncludeGuest)
+
+        self.addGuestEncoderModule("func_table", extraImpl=functableImplInclude)
+
+        self.addModule("common", "goldfish_vk_extension_structs",
+                       extraHeader=extensionStructsInclude)
+        self.addModule("common", "goldfish_vk_marshaling",
+                       extraHeader=vulkanStreamIncludeHost,
+                       extraImpl=commonCerealImplIncludes)
+        self.addModule("common", "goldfish_vk_reserved_marshaling",
+                       extraHeader=vulkanStreamIncludeHost,
+                       extraImpl=commonCerealImplIncludes)
+        self.addModule("common", "goldfish_vk_testing",
+                       extraHeader=testingInclude,
+                       extraImpl=commonCerealImplIncludes)
+        self.addModule("common", "goldfish_vk_deepcopy",
+                       extraHeader=poolInclude,
+                       extraImpl=commonCerealImplIncludes + deepcopyInclude)
+        self.addModule("common", "goldfish_vk_handlemap",
+                       extraHeader=handleMapInclude,
+                       extraImpl=commonCerealImplIncludes)
+        self.addModule("common", "goldfish_vk_dispatch",
+                       extraHeader=dispatchHeaderDefs,
+                       extraImpl=dispatchImplIncludes)
+        self.addModule("common", "goldfish_vk_transform",
+                       extraHeader=transformInclude,
+                       extraImpl=transformImplInclude)
+        self.addHostModule("VkDecoder",
+                           extraHeader=decoderHeaderIncludes,
+                           extraImpl=decoderImplIncludes,
+                           useNamespace=False)
+        self.addHostModule("VkDecoderSnapshot",
+                           extraHeader=decoderSnapshotHeaderIncludes,
+                           extraImpl=decoderSnapshotImplIncludes,
+                           useNamespace=False)
+        self.addHostModule("VkSubDecoder",
+                           extraHeader="",
+                           extraImpl="",
+                           useNamespace=False,
+                           implOnly=True)
+
+        self.addWrapper(cereal.VulkanEncoder, "VkEncoder")
+        self.addWrapper(cereal.VulkanExtensionStructs, "goldfish_vk_extension_structs_guest")
+        self.addWrapper(cereal.VulkanMarshaling, "goldfish_vk_marshaling_guest", variant = "guest")
+        self.addWrapper(cereal.VulkanReservedMarshaling, "goldfish_vk_reserved_marshaling_guest", variant = "guest")
+        self.addWrapper(cereal.VulkanDeepcopy, "goldfish_vk_deepcopy_guest")
+        self.addWrapper(cereal.VulkanCounting, "goldfish_vk_counting_guest")
+        self.addWrapper(cereal.VulkanHandleMap, "goldfish_vk_handlemap_guest")
+        self.addWrapper(cereal.VulkanTransform, "goldfish_vk_transform_guest")
+        self.addWrapper(cereal.VulkanFuncTable, "func_table")
+        self.addWrapper(cereal.VulkanExtensionStructs, "goldfish_vk_extension_structs")
+        self.addWrapper(cereal.VulkanMarshaling, "goldfish_vk_marshaling")
+        self.addWrapper(cereal.VulkanReservedMarshaling, "goldfish_vk_reserved_marshaling", variant = "host")
+        self.addWrapper(cereal.VulkanTesting, "goldfish_vk_testing")
+        self.addWrapper(cereal.VulkanDeepcopy, "goldfish_vk_deepcopy")
+        self.addWrapper(cereal.VulkanHandleMap, "goldfish_vk_handlemap")
+        self.addWrapper(cereal.VulkanDispatch, "goldfish_vk_dispatch")
+        self.addWrapper(cereal.VulkanTransform, "goldfish_vk_transform", resourceTrackerTypeName="VkDecoderGlobalState")
+        self.addWrapper(cereal.VulkanDecoder, "VkDecoder")
+        self.addWrapper(cereal.VulkanDecoderSnapshot, "VkDecoderSnapshot")
+        self.addWrapper(cereal.VulkanSubDecoder, "VkSubDecoder")
+
+        self.guestAndroidMkCppFiles = ""
+        self.hostCerealCMakeCppFiles = ""
+        self.hostDispatchCmakeCppFiles = ""
+        self.hostDecoderCMakeCppFiles = ""
+
+        def addSrcEntry(m):
+            mkSrcEntry = m.getMakefileSrcEntry()
+            cmakeSrcEntry = m.getCMakeSrcEntry()
+            if m.directory == self.guest_encoder_tag:
+                self.guestAndroidMkCppFiles += mkSrcEntry
+            elif m.directory == self.host_tag:
+                self.hostDecoderCMakeCppFiles += cmakeSrcEntry
+            elif m.directory != self.guest_hal_tag:
+                if m.basename == "goldfish_vk_dispatch":
+                    self.hostDispatchCmakeCppFiles += cmakeSrcEntry
+                else:
+                    self.hostCerealCMakeCppFiles += cmakeSrcEntry
+
+        self.forEachModule(addSrcEntry)
+
+    def addGuestEncoderModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True):
+        self.addModule(self.guest_encoder_tag,
+                       basename,
+                       extraHeader = extraHeader,
+                       extraImpl = extraImpl,
+                       customAbsDir = self.guest_abs_encoder_destination,
+                       useNamespace = useNamespace)
+
+    def addGuestHalModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True):
+        self.addModule(self.guest_hal_tag,
+                       basename,
+                       extraHeader = extraHeader,
+                       extraImpl = extraImpl,
+                       customAbsDir = self.guest_abs_hal_destination,
+                       useNamespace = useNamespace)
+
+    def addHostModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True, implOnly = False):
+        self.addModule(self.host_tag,
+                       basename,
+                       extraHeader = extraHeader,
+                       extraImpl = extraImpl,
+                       customAbsDir = self.host_abs_decoder_destination,
+                       useNamespace = useNamespace,
+                       implOnly = implOnly)
+
+    def addModule(self, directory, basename,
+                  extraHeader = "", extraImpl = "",
+                  customAbsDir = None,
+                  useNamespace = True,
+                  implOnly = False):
+        self.moduleList.append(basename)
+        self.modules[basename] = \
+            cereal.Module(directory, basename, customAbsDir = customAbsDir, implOnly = implOnly)
+        self.modules[basename].headerPreamble = copyrightHeader
+        self.modules[basename].headerPreamble += \
+                autogeneratedHeaderTemplate % \
+                (basename, "(header) generated by %s" % banner_command(sys.argv))
+
+        namespaceBegin = "namespace goldfish_vk {" if useNamespace else ""
+        namespaceEnd = "} // namespace goldfish_vk" if useNamespace else ""
+
+        self.modules[basename].headerPreamble += """
+#pragma once
+
+#include <vulkan/vulkan.h>
+
+%s
+
+%s
+
+""" % (extraHeader, namespaceBegin)
+
+        self.modules[basename].implPreamble = copyrightHeader
+        self.modules[basename].implPreamble += \
+                autogeneratedHeaderTemplate % \
+                (basename, "(impl) generated by %s" % \
+                    banner_command(sys.argv))
+        if not implOnly:
+            self.modules[basename].implPreamble += """
+#include "%s.h"
+
+%s
+
+%s
+
+""" % (basename, extraImpl, namespaceBegin)
+
+        self.modules[basename].headerPostamble = """
+%s
+""" % namespaceEnd
+        self.modules[basename].implPostamble = """
+%s
+""" % namespaceEnd
+
+    def addWrapper(self, moduleType, moduleName, **kwargs):
+        self.wrappers.append( \
+            moduleType( \
+                self.modules[moduleName],
+                self.typeInfo, **kwargs))
+
+    def forEachModule(self, func):
+        for moduleName in self.moduleList:
+            func(self.modules[moduleName])
+
+    def forEachWrapper(self, func):
+        for wrapper in self.wrappers:
+            func(wrapper)
+
+## Overrides####################################################################
+
+    def beginFile(self, genOpts):
+        OutputGenerator.beginFile(self, genOpts, suppressEnabled)
+
+        if suppressEnabled:
+            def enableSuppression(m):
+                m.suppress = True;
+            self.forEachModule(enableSuppression)
+            self.modules[suppressExceptModule].suppress = False
+
+        if not suppressEnabled:
+            write(self.host_cmake_generator(self.hostCerealCMakeCppFiles,
+                  self.hostDispatchCmakeCppFiles),
+                  file = self.outFile)
+
+            guestEncoderAndroidMkPath = \
+                os.path.join( \
+                    self.guest_abs_encoder_destination,
+                    "Android.mk")
+
+        self.forEachModule(lambda m: m.begin(self.genOpts.directory))
+        self.forEachWrapper(lambda w: w.onBegin())
+
+    def endFile(self):
+        OutputGenerator.endFile(self)
+
+        self.typeInfo.onEnd()
+
+        self.forEachWrapper(lambda w: w.onEnd())
+        self.forEachModule(lambda m: m.end())
+
+    def beginFeature(self, interface, emit):
+        # Start processing in superclass
+        OutputGenerator.beginFeature(self, interface, emit)
+
+        self.typeInfo.onBeginFeature(self.featureName)
+
+        self.forEachModule(lambda m: m.appendHeader("#ifdef %s\n" % self.featureName))
+        self.forEachModule(lambda m: m.appendImpl("#ifdef %s\n" % self.featureName))
+        self.forEachWrapper(lambda w: w.onBeginFeature(self.featureName))
+
+    def endFeature(self):
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+        self.typeInfo.onEndFeature()
+
+        self.forEachModule(lambda m: m.appendHeader("#endif\n"))
+        self.forEachModule(lambda m: m.appendImpl("#endif\n"))
+        self.forEachWrapper(lambda w: w.onEndFeature())
+
+    def genType(self, typeinfo, name, alias):
+        OutputGenerator.genType(self, typeinfo, name, alias)
+        self.typeInfo.onGenType(typeinfo, name, alias)
+        self.forEachWrapper(lambda w: w.onGenType(typeinfo, name, alias))
+
+    def genStruct(self, typeinfo, typeName, alias):
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+        self.typeInfo.onGenStruct(typeinfo, typeName, alias)
+        self.forEachWrapper(lambda w: w.onGenStruct(typeinfo, typeName, alias))
+
+    def genGroup(self, groupinfo, groupName, alias = None):
+        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
+        self.typeInfo.onGenGroup(groupinfo, groupName, alias)
+        self.forEachWrapper(lambda w: w.onGenGroup(groupinfo, groupName, alias))
+
+    def genEnum(self, enuminfo, name, alias):
+        OutputGenerator.genEnum(self, enuminfo, name, alias)
+        self.typeInfo.onGenEnum(enuminfo, name, alias)
+        self.forEachWrapper(lambda w: w.onGenEnum(enuminfo, name, alias))
+
+    def genCmd(self, cmdinfo, name, alias):
+        OutputGenerator.genCmd(self, cmdinfo, name, alias)
+        self.typeInfo.onGenCmd(cmdinfo, name, alias)
+        self.forEachWrapper(lambda w: w.onGenCmd(cmdinfo, name, alias))
diff --git a/registry/vulkan/scripts/cgenerator.py b/registry/vulkan/scripts/cgenerator.py
new file mode 100644
index 0000000..5614602
--- /dev/null
+++ b/registry/vulkan/scripts/cgenerator.py
@@ -0,0 +1,420 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import os
+import re
+from generator import (GeneratorOptions, 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,
+                 apicall='',
+                 apientry='',
+                 apientryp='',
+                 indentFuncProto=True,
+                 indentFuncPointer=False,
+                 alignFuncParam=0,
+                 genEnumBeginEndRange=False,
+                 genAliasMacro=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
+        - 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)
+        - 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.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.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)
+        # C-specific
+        #
+        # Multiple inclusion protection & C++ wrappers.
+        if 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
+        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're only
+        # printed in endFeature().
+        self.sections = {section: [] for section in self.ALL_SECTIONS}
+        self.feature_not_empty = False
+
+    def endFeature(self):
+        "Actually write the interface to the output file."
+        # C-specific
+        if self.emit:
+            if self.feature_not_empty:
+                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()
+                    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)
+                        write('\n'.join(self.sections['command']), end='', file=self.outFile)
+                        if self.genOpts.protectProto:
+                            write('#endif', file=self.outFile)
+                        else:
+                            self.newline()
+                    if self.featureExtraProtect is not None:
+                        write('#endif /*', self.featureExtraProtect, '*/', file=self.outFile)
+                    if self.genOpts.protectFeature:
+                        write('#endif /*', self.featureName, '*/', file=self.outFile)
+        # Finish processing in superclass
+        OutputGenerator.endFeature(self)
+
+    def appendSection(self, section, text):
+        "Append a definition to the specified section"
+        # self.sections[section].append('SECTION: ' + section + '\n')
+        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:
+            # 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, don't 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:
+                # 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 OpenXR 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:
+            # First time we've asked if a type may alias.
+            # So, let's 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.
+            parent_structs = (otherType.elem.get('parentstruct')
+                              for otherType in self.registry.typedict.values())
+            self.may_alias.update(set(x for x in parent_structs
+                                      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)
+
+        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
+            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:
+            (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)."""
+
+        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 = ''
+
+        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/registry/vulkan/scripts/checkXrefs b/registry/vulkan/scripts/checkXrefs
new file mode 100755
index 0000000..6d5dc7d
--- /dev/null
+++ b/registry/vulkan/scripts/checkXrefs
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# Copyright 2015-2021 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/registry/vulkan/scripts/check_html_xrefs.py b/registry/vulkan/scripts/check_html_xrefs.py
new file mode 100755
index 0000000..0081e6c
--- /dev/null
+++ b/registry/vulkan/scripts/check_html_xrefs.py
@@ -0,0 +1,93 @@
+#!/usr/bin/python3
+#
+# Copyright 2020-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# check_html_xrefs - simple-minded check for internal xrefs in spec HTML
+# that don't exist.
+
+# Usage: check_html_xrefs file
+# Just reports bad xrefs, not where they occur
+
+import argparse
+import re
+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're 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's 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
+        print('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]))
diff --git a/registry/vulkan/scripts/check_spec_links.py b/registry/vulkan/scripts/check_spec_links.py
new file mode 100755
index 0000000..16cfe43
--- /dev/null
+++ b/registry/vulkan/scripts/check_spec_links.py
@@ -0,0 +1,164 @@
+#!/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',
+    '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 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 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('**/*.txt'))]
+    all_docs.extend([str(fn)
+                     for fn in sorted((ROOT / 'appendices/').glob('**/*.txt'))])
+
+    checkerMain(default_enabled_messages, makeMacroChecker,
+                all_docs)
diff --git a/registry/vulkan/scripts/ci/check_undefined b/registry/vulkan/scripts/ci/check_undefined
new file mode 100755
index 0000000..b747b1d
--- /dev/null
+++ b/registry/vulkan/scripts/ci/check_undefined
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# Copyright 2020-2021 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/*txt chapters/*/*txt appendices/[A-UW-Za-z]*txt | \
+    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/registry/vulkan/scripts/comment_convert.py b/registry/vulkan/scripts/comment_convert.py
new file mode 100755
index 0000000..f1fa938
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/compImages.sh b/registry/vulkan/scripts/compImages.sh
new file mode 100755
index 0000000..d9f3670
--- /dev/null
+++ b/registry/vulkan/scripts/compImages.sh
@@ -0,0 +1,127 @@
+#!/bin/bash
+#
+# Copyright 2020-2021 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 "Can't 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 "Can't 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.txt[]
+" > $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/registry/vulkan/scripts/conventions.py b/registry/vulkan/scripts/conventions.py
new file mode 100644
index 0000000..edf9059
--- /dev/null
+++ b/registry/vulkan/scripts/conventions.py
@@ -0,0 +1,358 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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
+
+# 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',
+                                'int32_t', 'uint32_t',
+                                'int64_t', 'uint64_t',
+                                'size_t',
+                                'uintptr_t',
+                                'int',
+                                ))
+
+
+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
+        return None
+
+    @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:
+    """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 '`apiext:{}`'.format(name)
+
+    @property
+    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:'
+
+    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.
+
+        Don't edit these defaults, override self.makeProseList().
+        """
+        assert(serial_comma)  # didn't implement what we didn't 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
+    def file_suffix(self):
+        """Return suffix of generated Asciidoctor files"""
+        raise NotImplementedError
+
+    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
+    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
+
+
+    def extension_include_string(self, ext):
+        """Return format string for include:: line for an extension appendix
+           file. ext is an object with the following members:
+            - name - extension string string
+            - vendor - vendor portion of name
+            - barename - remainder of name
+
+        Must implement."""
+        raise NotImplementedError
+
+    @property
+    def refpage_generated_include_path(self):
+        """Return path relative to the generated reference pages, to the
+           generated API include files.
+
+        Must implement."""
+        raise NotImplementedError
+
+    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
diff --git a/registry/vulkan/scripts/deperiodize_vuids.py b/registry/vulkan/scripts/deperiodize_vuids.py
new file mode 100755
index 0000000..c02a158
--- /dev/null
+++ b/registry/vulkan/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(".txt"):
+                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/registry/vulkan/scripts/docgenerator.py b/registry/vulkan/scripts/docgenerator.py
new file mode 100644
index 0000000..bb86eb5
--- /dev/null
+++ b/registry/vulkan/scripts/docgenerator.py
@@ -0,0 +1,482 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from pathlib import Path
+
+from generator import GeneratorOptions, OutputGenerator, noneStr, write
+
+ENUM_TABLE_PREFIX = """
+[cols=",",options="header",]
+|=======================================================================
+|Enum |Description"""
+
+ENUM_TABLE_SUFFIX = """|======================================================================="""
+
+FLAG_BLOCK_PREFIX = """.Flag Descriptions
+****"""
+
+FLAG_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)
+        # Keep track of all extension numbers
+        self.extension_numbers = set()
+
+    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're in a core <feature> or an <extension>
+        self.in_core = (interface.tag == 'feature')
+
+        # Verify that each <extension> has a unique number during doc
+        # generation
+        # TODO move this to consistency_tools
+        if not self.in_core:
+            extension_number = interface.get('number')
+            if extension_number is not None and extension_number != "0":
+                if extension_number in self.extension_numbers:
+                    self.logMsg('error', 'Duplicate extension number ', extension_number, ' detected in feature ', interface.get('name'), '\n')
+                    exit(1)
+                else:
+                    self.extension_numbers.add(extension_number)
+
+    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 api.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's 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're unique.
+                features = set()
+                for (base,dependency) in self.apidict.requiredBy[name]:
+                    if dependency is not None:
+                        l = sorted(
+                                sorted((base, dependency)),
+                                key=orgLevelKey)
+                        features.add(' with '.join(l))
+                    else:
+                        features.add(base)
+                # Sort the overall dependencies so core versions are first
+                provider = ', '.join(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 + '.txt'
+        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},{0}]]'.format(basename), file=fp)
+
+        if self.genOpts.conventions.generate_index_terms:
+            index_terms = []
+            if basename.startswith(self.conventions.command_prefix):
+                index_terms.append(basename[2:] + " (function)")
+            elif basename.startswith(self.conventions.type_prefix):
+                index_terms.append(basename[2:] + " (type)")
+            elif basename.startswith(self.conventions.api_prefix):
+                index_terms.append(basename[len(self.conventions.api_prefix):] + " (define)")
+            index_terms.append(basename)
+            write('indexterm:[{}]'.format(','.join(index_terms)), 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 = directory + '/' + basename + '.no-xref.txt'
+            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 writeTable(self, basename, values):
+        """Output a table of enumerants."""
+        directory = Path(self.genOpts.directory) / 'enums'
+        self.makeDir(str(directory))
+
+        filename = str(directory / '{}.comments.txt'.format(basename))
+        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(ENUM_TABLE_SUFFIX, file=fp)
+
+    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 / '{}.comments.txt'.format(basename))
+        self.logMsg('diag', '# Generating include file:', filename)
+
+        with open(filename, 'w', encoding='utf-8') as fp:
+            write(self.conventions.warning_comment, file=fp)
+            write(FLAG_BLOCK_PREFIX, file=fp)
+
+            for data in values:
+                write("* ename:{} -- {}".format(data['name'],
+                                                data['comment']),
+                      file=fp)
+
+            write(FLAG_BLOCK_SUFFIX, file=fp)
+
+    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's no path, don't 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, don't 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 genStruct(self, typeinfo, typeName, alias):
+        """Generate struct."""
+        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
+
+        typeElem = typeinfo.elem
+
+        body = self.genRequirements(typeName)
+        if alias:
+            body += 'typedef ' + alias + ' ' + typeName + ';\n'
+        else:
+            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 + ';'
+
+        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, strVal) = 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're 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's 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.writeTable(groupName + '.success',
+                                (data for data in values
+                                 if data['value'] >= 0))
+                self.writeTable(groupName + '.error',
+                                (data for data in values
+                                 if data['value'] < 0))
+            elif group_type == 'bitmask':
+                self.writeFlagBox(groupName, values)
+            elif group_type == 'enum':
+                self.writeTable(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)
+
+        return_type = cmdinfo.elem.find('proto/type')
+        if self.genOpts.conventions.requires_error_validation(return_type):
+            # This command returns an API result code, so check that it
+            # returns at least the required errors.
+            # TODO move this to consistency_tools
+            required_errors = set(self.genOpts.conventions.required_errors)
+            errorcodes = cmdinfo.elem.get('errorcodes').split(',')
+            if not required_errors.issubset(set(errorcodes)):
+                self.logMsg('error', 'Missing required error code for command: ', name, '\n')
+                exit(1)
+
+        body = self.genRequirements(name)
+        decls = self.makeCDecls(cmdinfo.elem)
+        body += decls[0]
+        self.writeInclude('protos', name, body)
diff --git a/registry/vulkan/scripts/extensionmetadocgenerator.py b/registry/vulkan/scripts/extensionmetadocgenerator.py
new file mode 100644
index 0000000..07d2c94
--- /dev/null
+++ b/registry/vulkan/scripts/extensionmetadocgenerator.py
@@ -0,0 +1,665 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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
+
+class ExtensionMetaDocGeneratorOptions(GeneratorOptions):
+    """ExtensionMetaDocGeneratorOptions - subclass of GeneratorOptions.
+
+    Represents options during extension metainformation generation for Asciidoc"""
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+
+EXT_NAME_DECOMPOSE_RE = re.compile(r'[A-Z]+_(?P<tag>[A-Z]+)_(?P<name>[\w_]+)')
+
+
+@total_ordering
+class Extension:
+    def __init__(self,
+                 generator, # needed for logging and API conventions
+                 filename,
+                 name,
+                 number,
+                 ext_type,
+                 requires,
+                 requiresCore,
+                 contact,
+                 promotedTo,
+                 deprecatedBy,
+                 obsoletedBy,
+                 provisional,
+                 revision,
+                 specialuse ):
+        self.generator = generator
+        self.conventions = generator.genOpts.conventions
+        self.filename = filename
+        self.name = name
+        self.number = number
+        self.ext_type = ext_type
+        self.requires = requires
+        self.requiresCore = requiresCore
+        self.contact = contact
+        self.promotedTo = promotedTo
+        self.deprecatedBy = deprecatedBy
+        self.obsoletedBy = obsoletedBy
+        self.provisional = provisional
+        self.revision = revision
+        self.specialuse = specialuse
+
+        self.deprecationType = None
+        self.supercedingAPIVersion = None
+        self.supercedingExtension = None
+
+        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 + '\'!')
+
+        match = EXT_NAME_DECOMPOSE_RE.match(self.name)
+        self.vendor = match.group('tag')
+        self.bare_name = match.group('name')
+
+    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, extensionsList, succeededBy, isRefpage, file):
+        ext = next(x for x in extensionsList if x.name == 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(extensionsList, 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(extensionsList, 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(extensionsList, 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.
+
+        - 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 = '*::'
+
+        write(tagPrefix + tag + tagSuffix, file=fp)
+        if value is not None:
+            write(value, file=fp)
+
+        if isRefpage:
+            write('', file=fp)
+
+    def makeMetafile(self, extensionsList, isRefpage = False):
+        """Generate a file containing extension metainformation in
+           asciidoctor markup form.
+
+        - extensionsList - list of 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)
+
+        # Only API extension dependencies are coded in XML, others are explicit
+        self.writeTag('Extension and Version Dependencies', None, isRefpage, fp)
+
+        write('  * Requires ' + self.conventions.api_name() + ' ' + self.requiresCore, file=fp)
+        if self.requires:
+            for dep in self.requires.split(','):
+                write('  * Requires', self.conventions.formatExtension(dep),
+                      file=fp)
+        if self.provisional == 'true':
+            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(extensionsList, 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(extensionsList, 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(extensionsList, 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.asciidoc' relative
+        # to the repository root, and that this script will be invoked from
+        # the repository root.
+        path = 'proposals/{}.asciidoc'.format(self.name)
+        if os.path.exists(path) and os.access(path, os.R_OK):
+            self.writeTag('Extension Proposal',
+                'link:{{specRepositoryURL}}/{}[{}]'.format(path, self.name), isRefpage, fp)
+
+        # 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:
+            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)
+    - requires      list of comma-separated required API extensions (optional)
+    - requiresCore  required core version of API (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, ext):
+        return self.conventions.extension_include_string(ext)
+
+    def endFile(self):
+        self.extensions.sort()
+
+        # Generate metadoc extension files, in refpage and non-refpage form
+        for ext in self.extensions:
+            ext.makeMetafile(self.extensions, isRefpage = False)
+            if self.conventions.write_refpage_include:
+                ext.makeMetafile(self.extensions, isRefpage = True)
+
+        # Generate list of promoted extensions
+        promotedExtensions = {}
+        for ext in self.extensions:
+            if ext.deprecationType == 'promotion' and ext.supercedingAPIVersion:
+                promotedExtensions.setdefault(ext.supercedingAPIVersion, []).append(ext)
+
+        for coreVersion, extensions in promotedExtensions.items():
+            promoted_extensions_fp = self.newFile(self.directory + '/promoted_extensions_' + coreVersion + self.file_suffix)
+
+            for ext in extensions:
+                indent = ''
+                write('  * {blank}\n+\n' + ext.conditionalLinkExt(ext.name, indent), file=promoted_extensions_fp)
+
+            promoted_extensions_fp.close()
+
+        # Re-sort to match earlier behavior
+        # TODO: Remove this extra sort when re-arranging section order OK.
+
+        def makeSortKey(ext):
+            name = ext.name.lower()
+            prefixes = self.conventions.extension_index_prefixes
+            for i, prefix in enumerate(prefixes):
+                if ext.name.startswith(prefix):
+                    return (i, name)
+            return (len(prefixes), name)
+
+        self.extensions.sort(key=makeSortKey)
+
+        # 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:
+
+            write('', file=current_extensions_appendix_fp)
+            write('include::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::current_extension_appendices_toc' + self.file_suffix + '[]', file=current_extensions_appendix_fp)
+            write('\n<<<\n', file=current_extensions_appendix_fp)
+            write('include::current_extension_appendices' + self.file_suffix + '[]', file=current_extensions_appendix_fp)
+
+            write('', file=deprecated_extensions_appendix_fp)
+            write('include::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::deprecated_extension_appendices_toc' + self.file_suffix + '[]', file=deprecated_extensions_appendix_fp)
+            write('\n<<<\n', file=deprecated_extensions_appendix_fp)
+            write('include::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::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::provisional_extension_appendices_toc' + self.file_suffix + '[]', file=provisional_extensions_appendix_fp)
+            write('\n<<<\n', file=provisional_extensions_appendix_fp)
+            write('include::provisional_extension_appendices' + self.file_suffix + '[]', file=provisional_extensions_appendix_fp)
+            write('endif::HAS_PROVISIONAL_EXTENSIONS[]', file=provisional_extensions_appendix_fp)
+
+            for ext in self.extensions:
+                include = self.makeExtensionInclude(ext)
+                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
+        requires = self.getAttrib(interface, 'requires', OPTIONAL)
+        requiresCore = self.getAttrib(interface, 'requiresCore', OPTIONAL, '1.0') # TODO update this line with update_version.py
+        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)
+
+        filename = self.directory + '/' + name + self.file_suffix
+
+        extdata = Extension(
+            generator = self,
+            filename = filename,
+            name = name,
+            number = number,
+            ext_type = ext_type,
+            requires = requires,
+            requiresCore = requiresCore,
+            contact = contact,
+            promotedTo = promotedTo,
+            deprecatedBy = deprecatedBy,
+            obsoletedBy = obsoletedBy,
+            provisional = provisional,
+            revision = revision,
+            specialuse = specialuse)
+        self.extensions.append(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/registry/vulkan/scripts/genRef.py b/registry/vulkan/scripts/genRef.py
new file mode 100755
index 0000000..f108204
--- /dev/null
+++ b/registry/vulkan/scripts/genRef.py
@@ -0,0 +1,1087 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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,
+                    printPageInfo, setLogFile)
+from reg import Registry
+from vkconventions import VulkanConventions as 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, given an extension name."""
+    return 'include::{}/refpage.{}{}[]'.format(
+        conventions.specification_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.refpage_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-2021 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.txt[]',
+          '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:
+                    refs.add(dependency)
+
+    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',
+          conventions.extra_refpage_headers,
+          '',
+          sep='\n', file=fp)
+
+    s = '{}({})'.format(pageName, man_section)
+    print('= ' + s,
+          '',
+          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's
+      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 Vulkan 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][^>,]+)>>')
+    refLinkSubstitute = r'link:\1.html[\1^]'
+
+    refLinkTextPattern = re.compile(r'<<([Vv][Kk][^>,]+)[,]?[ \t\n]*([^>,]*)>>')
+    refLinkTextSubstitute = r'link:\1.html[\2^]'
+
+    # These are xrefs to other anchors, rewritten to link to the spec
+    specLinkPattern = re.compile(r'<<([^>,]+)[,]?[ \t\n]*([^>,]*)>>')
+
+    # Unfortunately, specLinkSubstitute depends on the link target,
+    # so can't be constructed in advance.
+    specLinkSubstitute = None
+
+
+def xrefRewrite(text, specURL):
+    """Rewrite asciidoctor xrefs in text to resolve properly in refpages.
+    Xrefs which are to Vulkan 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 = baseDir + '/' + pi.name + '.txt'
+
+    # 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 = baseDir + '/' + pi.name + '.txt'
+    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 = baseDir + '/' + flagName + '.txt'
+    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 = baseDir + '/' + handleName + '.txt'
+    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"""
+    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's in the requested build
+        # 'freeform' pages are always generated
+        # 'feature' pages (core versions & extensions) are generated if they're in
+        # the requested feature list
+        # All other pages (APIs) are generated if they're 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:
+            # Don't 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 baseDir/apispec.txt, the single-page version of the ref pages.
+
+    This assumes there's 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',
+          '',
+          sep='\n', file=head)
+
+    print('== Copyright', file=head)
+    print('', file=head)
+    print('include::{config}/copyright-ccby.txt[]', 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:
+            # Don't 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('include::' + refPage + '.txt[]', 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 = baseDir + '/apispec.txt'
+    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 isn't what we're looking for
+            continue
+        if req_name.endswith('_SPEC_VERSION') or req_name.endswith('_EXTENSION_NAME'):
+            # Don't link to spec version or extension name - those ref pages aren't 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:
+            logWarn('ERROR: {} (in extension {}) does not have a ref page.'.format(req_name, name))
+
+        declares.append(req_name)
+
+    # import pdb
+    # pdb.set_trace()
+
+    appbody = None
+    if extpath is not None:
+        appfp = open('{}/{}.txt'.format(extpath, name), 'r', encoding='utf-8')
+        if appfp is not None:
+            appbody = appfp.read()
+
+            # Transform internal links to crosslinks
+            specURL = conventions.specURL()
+            appbody = xrefRewrite(appbody, specURL)
+        else:
+            logWarn('Cannot find extension appendix for', name)
+
+            # Fall through to autogenerated page
+            extpath = None
+            appbody = None
+        appfp.close()
+
+    # Include the extension appendix without an extra title
+    # head_content = 'include::{{appendices}}/{}.txt[]'.format(name)
+
+    # Write the extension refpage
+    pageName = baseDir + '/' + name + '.txt'
+    logDiag('genExtension:', pageName)
+    fp = open(pageName, 'w', encoding='utf-8')
+
+    # There are no generated titled sections
+    sections = None
+
+    # 'See link:{html_spec_relative}#%s[ %s] in the main specification for complete information.' % (
+    #     name, name)
+    refPageShell(name,
+                 "{} extension".format(ext_type),
+                 fp,
+                 appbody,
+                 sections=sections)
+
+    # The generated metadata include 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.
+    refPageTail(pageName=name,
+                specType=None,
+                specAnchor=name,
+                seeAlso=seeAlsoList(name, declares),
+                fp=fp,
+                auto=True,
+                leveloffset=1)
+    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()
+
+    # Look for api.py in the specified directory
+    if results.genpath is not None:
+        sys.path.insert(0, results.genpath)
+    import 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 *weren't* generated from the spec.
+    # This relies on the dictionaries of API constructs in the api module.
+
+    if not results.noauto:
+        registry = Registry()
+        registry.loadFile(results.registry)
+
+        if conventions.write_refpage_include:
+            # Only extensions with a supported="..." attribute in this set
+            # will be considered for extraction/generation.
+            supported_strings = set((conventions.xml_api_name,))
+            ext_names = set(k for k, v in registry.extdict.items()
+                            if v.supported in supported_strings)
+
+            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 weren't 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 doesn't seem helpful.
+            for page in apiDict:
+                if page not in genDict:
+                    # Page was not generated - why not?
+                    if page in api.alias:
+                        logWarn('(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:
+                        logWarn('(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/registry/vulkan/scripts/genRelease b/registry/vulkan/scripts/genRelease
new file mode 100755
index 0000000..f3c4a2a
--- /dev/null
+++ b/registry/vulkan/scripts/genRelease
@@ -0,0 +1,211 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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 extDependency.py
+allVersions = [ '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('-nov12', action='store_false', dest='v12',
+                        help='Suppress 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('-nokhrspec', action='store_false', dest='khrspec',
+                        help='Do not generate core API + KHR extensions-only targets')
+    parser.add_argument('-noallspec', action='store_false', dest='allspec',
+                        help='Do not generate full API + all extensions targets')
+
+    parser.add_argument('-genpath', action='store',
+                        default='gen',
+                        help='Path to directory containing generated files')
+    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()
+
+    # Ensure gen/extDependency.py is up-to-date before we import it.
+    # If it is up to date, 'make' will print a useless warning without '-s'.
+    subprocess.check_call(['make', '-s', 'GENERATED=' + args.genpath, 'extDependency'])
+
+    # Alter sys.path to import extDependency.py
+    sys.path.insert(0, args.genpath)
+
+    from extDependency import allExts, khrExts
+
+    if args.internal:
+        # For internal build & pseudo-release
+        if args.repoDir == None:
+            args.repoDir = '/home/tree/git/vulkan'
+        if args.outDir == None:
+            args.outDir = '/home/tree/git/vulkan/out'
+    else:
+        # For public release
+        if args.repoDir == None:
+            args.repoDir = '/home/tree/git/Vulkan-Docs'
+        if args.outDir == None:
+            args.outDir = '/home/tree/git/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.2 specs
+    if args.v12:
+        if args.allspec:
+            # Build ref pages and validusage targets only for 1.2 + all exts
+            # Formerly set xmlTargets = 'clobber install', but we no longer
+            # generate headers in the registry tree.
+            buildBranch(targetDir = '1.2-extensions',
+                        versions = allVersions,
+                        extensions = allExts,
+                        ratified = False,
+                        apititle = '(with all registered Vulkan extensions)',
+                        specTargets = specTargets + ' validusage' + refPageTargets,
+                        repoDir = args.repoDir,
+                        outDir = args.outDir)
+
+        if args.khrspec:
+            buildBranch(targetDir = '1.2-khr-extensions',
+                        versions = allVersions,
+                        extensions = khrExts,
+                        ratified = True,
+                        apititle = '(with KHR 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 = allVersions,
+                        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.khrspec:
+            buildBranch(targetDir = '1.1-khr-extensions',
+                        versions = Version1_1,
+                        extensions = khrExts,
+                        ratified = True,
+                        apititle = '(with KHR 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.khrspec:
+            buildBranch(targetDir = '1.0-wsi_extensions',
+                        versions = Version1_0,
+                        extensions = khrExts,
+                        ratified = True,
+                        apititle = '(with KHR 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/registry/vulkan/scripts/genanchorlinks.py b/registry/vulkan/scripts/genanchorlinks.py
new file mode 100644
index 0000000..c589bb3
--- /dev/null
+++ b/registry/vulkan/scripts/genanchorlinks.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python3
+#
+# Copyright 2020-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Script that adds href to <a> anchors
+
+import os,sys,re
+
+def genAnchorLinks(in_file, out_file):
+        try:
+                with open(in_file, 'r', encoding='utf8') as f: data = f.read()
+        except FileNotFoundError:
+                print('Error: File %s does not exist.' % in_file)
+                sys.exit(2)
+
+        data = re.sub( r'(<a )(id="(VUID\-[\w\-:]+)")(>)', '\g<1>\g<2> href="#\g<3>"\g<4>', data)
+        with open(out_file, 'w', encoding='utf8') as f: data = f.write(data)
+
+if __name__ == '__main__':
+        if len(sys.argv) != 3:
+                print('Error: genanchorlinks.py requires two arguments.')
+                print('Usage: genanchorlinks.py infile.html outfile.html')
+                sys.exit(1)
+        genAnchorLinks(sys.argv[1], sys.argv[2])
diff --git a/registry/vulkan/scripts/generator.py b/registry/vulkan/scripts/generator.py
new file mode 100644
index 0000000..407a7cc
--- /dev/null
+++ b/registry/vulkan/scripts/generator.py
@@ -0,0 +1,1201 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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
+
+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 "'{}'".format(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)
+    - ARB/KHR/OES (Khronos extensions)
+    - other       (EXT/vendor extensions)"""
+
+    if feature.elem.tag == 'feature':
+        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."""
+
+    # print("regSortOrderKey {} -> {}".format(feature.name, feature.sortorder))
+    return feature.sortorder
+
+
+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 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,
+                 profile=None,
+                 versions='.*',
+                 emitversions='.*',
+                 defaultExtensions=None,
+                 addExtensions=None,
+                 removeExtensions=None,
+                 emitExtensions=None,
+                 emitSpirv=None,
+                 reparentEnums=True,
+                 sortProcedure=regSortFeatures,
+                 requireCommandAliases=False,
+                ):
+        """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 files
+        - genpath - path to previously generated files, such as api.py
+        - apiname - string matching `<api>` 'apiname' attribute, e.g. 'gl'.
+        - 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).
+        to None.
+        - emitSpirv - regex matching names of extensions and capabilities
+        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.
+        Default is core API versions, 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 api.py"""
+
+        self.directory = directory
+        "directory in which to generate filename"
+
+        self.apiname = apiname
+        "string matching `<api>` 'apiname' attribute, e.g. 'gl'."
+
+        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.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.requireCommandAliases = requireCommandAliases
+        """True if alias= attributes of <command> 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
+        self.genOpts = None
+        self.registry = None
+        self.featureDictionary = {}
+        # 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
+
+    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):
+        """Parse and convert an `<enum>` tag into a value.
+
+        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."""
+        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's 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:
+              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():
+            return [None, elem.get('alias')]
+        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)
+
+                # Don't 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"""
+        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 doesn't 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 + "']")
+                        (numVal, strVal) = self.enumToValue(alias, True, bitwidth, True)
+                    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 doesn't do a topological sort yet, so aliases of
+        # aliases can still get in the wrong order.
+        aliasText = []
+
+        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)
+
+            # Don't 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 numVal < minValue:
+                    minName = name
+                    minValue = numVal
+                elif 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(("    {}_BEGIN_RANGE{} = {},".format(expandPrefix, expandSuffix, minName),
+                         "    {}_END_RANGE{} = {},".format(
+                             expandPrefix, expandSuffix, maxName),
+                         "    {}_RANGE_SIZE{} = ({} - {} + 1),".format(expandPrefix, expandSuffix, maxName, minName)))
+
+        # Generate a range-padding value to ensure the enum is 32 bits, but
+        # only in code generators, so it doesn't appear in documentation
+        if (self.genOpts.codeGenerator or
+            self.conventions.generate_max_enum_in_docs):
+            body.append("    {}_MAX_ENUM{} = 0x7FFFFFFF".format(
+                expandPrefix, expandSuffix))
+
+        # 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, suppress = False):
+        """Start a new interface file
+
+        - genOpts - GeneratorOptions controlling what's generated and how"""
+        self.suppress = suppress
+        self.genOpts = genOpts
+        self.should_insert_may_alias_macro = \
+            self.genOpts.conventions.should_insert_may_alias_macro(self.genOpts)
+
+        # Try to import the API dictionary, api.py, if it exists. Nothing in
+        # api.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 api
+                self.apidict = api
+            except ImportError:
+                self.apidict = None
+
+        self.conventions = genOpts.conventions
+
+        # Open a temporary file for accumulating output.
+        if self.genOpts.filename is not None and not self.suppress:
+            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 != sys.stdout and self.outFile != sys.stderr:
+            self.outFile.close()
+
+        # 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's 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's 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're 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 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"""
+        return self.genOpts.apientry + name + tail
+
+    def makeTypedefName(self, name, tail):
+        """Make the function-pointer typedef name for a command."""
+        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"""
+        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 = ''
+        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"""
+
+        # 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."""
+        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."""
+        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's 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.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)
+        assert(info is not None)
+
+        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 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"""
+        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's 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/registry/vulkan/scripts/genspec.py b/registry/vulkan/scripts/genspec.py
new file mode 100644
index 0000000..dfa55cc
--- /dev/null
+++ b/registry/vulkan/scripts/genspec.py
@@ -0,0 +1,164 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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 aren't 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 + '/*.txt', 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 registy 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.2.' +
+          releaseNum, 'release\\"', 'v1.2.' + releaseNum)
diff --git a/registry/vulkan/scripts/genvk.py b/registry/vulkan/scripts/genvk.py
new file mode 100755
index 0000000..ec8b9a0
--- /dev/null
+++ b/registry/vulkan/scripts/genvk.py
@@ -0,0 +1,738 @@
+#!/usr/bin/python3
+#
+# Copyright 2013-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import argparse
+import pdb
+import re
+import sys
+import time
+import xml.etree.ElementTree as etree
+
+from cgenerator import CGeneratorOptions, COutputGenerator
+from cerealgenerator import CerealGenerator
+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 pygenerator import PyOutputGenerator
+from rubygenerator import RubyOutputGenerator
+from reflib import logDiag, logWarn, setLogFile
+from reg import Registry
+from validitygenerator import ValidityOutputGenerator
+from vkconventions import VulkanConventions
+
+
+# Simple timer functions
+startTime = None
+
+
+def startTimer(timeit):
+    global startTime
+    if timeit:
+        startTime = time.process_time()
+
+
+def endTimer(timeit, msg):
+    global startTime
+    if timeit:
+        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
+
+    # 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 api.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
+    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)
+    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-2021 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.',
+        '**',
+        '*/',
+        ''
+    ]
+
+    # Defaults for generating re-inclusion protection wrappers (or not)
+    protectFile = protect
+
+    # An API style conventions object
+    conventions = VulkanConventions()
+
+    # 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           = 'vulkan',
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            prefixText        = prefixStrings + vkPrefixStrings,
+            apicall           = '',
+            apientry          = '',
+            apientryp         = '*',
+            alignFuncParam    = 48,
+            expandEnumerants  = False)
+        ]
+
+    # Python representation of API information, used by scripts that
+    # don't need to load the full XML.
+    genOpts['api.py'] = [
+          PyOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'api.py',
+            directory         = directory,
+            genpath           = None,
+            apiname           = 'vulkan',
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            reparentEnums     = False)
+        ]
+
+    # Ruby representation of API information, used by scripts that
+    # don't need to load the full XML.
+    genOpts['api.rb'] = [
+          RubyOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'api.rb',
+            directory         = directory,
+            genpath           = None,
+            apiname           = 'vulkan',
+            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           = 'vulkan',
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            requireCommandAliases = True,
+            )
+        ]
+
+    # Serializer for spec
+    genOpts['cereal'] = [
+            CerealGenerator,
+            CGeneratorOptions(
+                conventions       = conventions,
+                filename          = "CMakeLists.txt",
+                directory         = directory,
+                apiname           = 'vulkan',
+                profile           = None,
+                versions          = featuresPat,
+                emitversions      = featuresPat,
+                defaultExtensions = defaultExtensions,
+                addExtensions     = None,
+                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)
+        ]
+
+    # API host sync table files for spec
+    genOpts['hostsyncinc'] = [
+          HostSynchronizationOutputGenerator,
+          DocGeneratorOptions(
+            conventions       = conventions,
+            filename          = 'timeMarker',
+            directory         = directory,
+            genpath           = None,
+            apiname           = 'vulkan',
+            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           = 'vulkan',
+            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           = 'vulkan',
+            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           = 'vulkan',
+            profile           = None,
+            versions          = featuresPat,
+            emitversions      = featuresPat,
+            defaultExtensions = None,
+            addExtensions     = addExtensionsPat,
+            removeExtensions  = removeExtensionsPat,
+            emitExtensions    = emitExtensionsPat,
+            emitSpirv         = emitSpirvPat,
+            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_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',
+        'VK_EXT_video_encode_h265',
+    ]
+
+    betaSuppressExtensions = []
+
+    platforms = [
+        [ 'vulkan_android.h',     [ 'VK_KHR_android_surface',
+                                    'VK_ANDROID_external_memory_android_hardware_buffer'
+                                                                  ], 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_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'        ], commonSuppressExtensions ],
+        [ 'vulkan_screen.h',      [ 'VK_QNX_screen_surface'       ], 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           = 'vulkan',
+            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           = 'vulkan',
+            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)
+        ]
+
+    # 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           = 'vulkan',
+            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)
+        ]
+
+    # 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           = 'vulkan',
+            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           = 'vulkan',
+            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)
+
+    # pdb.set_trace()
+
+    # 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)
+
+        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('-defaultExtensions', action='store',
+                        default='vulkan',
+                        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('-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('-validate', action='store_true',
+                        help='Validate the registry properties and exit')
+    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('-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')
+
+    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 = '-')
+
+    (gen, options) = (None, None)
+    if not args.validate:
+      # 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.validate:
+        success = reg.validateRegistry()
+        sys.exit(0 if success else 1)
+
+    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/registry/vulkan/scripts/globalizeIncludes b/registry/vulkan/scripts/globalizeIncludes
new file mode 100755
index 0000000..3fad777
--- /dev/null
+++ b/registry/vulkan/scripts/globalizeIncludes
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# Copyright 2019-2021 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're 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/registry/vulkan/scripts/hostsyncgenerator.py b/registry/vulkan/scripts/hostsyncgenerator.py
new file mode 100644
index 0000000..a94db14
--- /dev/null
+++ b/registry/vulkan/scripts/hostsyncgenerator.py
@@ -0,0 +1,154 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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.txt',
+                        'Externally Synchronized Parameters',
+                        self.threadsafety['parameters'])
+        self.writeBlock('parameterlists.txt',
+                        'Externally Synchronized Parameter Lists',
+                        self.threadsafety['parameterlists'])
+        self.writeBlock('implicit.txt',
+                        'Implicit Externally Synchronized Parameters',
+                        self.threadsafety['implicit'])
+
+    def paramIsArray(self, param):
+        """Check if the parameter passed in is a pointer to an array."""
+        return param.get('len') is not None
+
+    def paramIsPointer(self, param):
+        """Check if the parameter passed in is a pointer."""
+        tail = param.find('type').tail
+        return tail is not None and '*' in tail
+
+    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/registry/vulkan/scripts/htmldiff/htmldiff b/registry/vulkan/scripts/htmldiff/htmldiff
new file mode 100755
index 0000000..a3361c7
--- /dev/null
+++ b/registry/vulkan/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 (c) 2016-2021, 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():
+    # didn't 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/registry/vulkan/scripts/htmldiff/htmldiff.pl b/registry/vulkan/scripts/htmldiff/htmldiff.pl
new file mode 100755
index 0000000..af2a6cd
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/indexExt.py b/registry/vulkan/scripts/indexExt.py
new file mode 100755
index 0000000..4eeb4f3
--- /dev/null
+++ b/registry/vulkan/scripts/indexExt.py
@@ -0,0 +1,90 @@
+#!/usr/bin/python3
+#
+# Copyright 2017-2021 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
+
+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.2-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.
+    fmtString = '    <li> <a href="specs/1.2-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 supported == 'vulkan':
+            # 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/registry/vulkan/scripts/interfacedocgenerator.py b/registry/vulkan/scripts/interfacedocgenerator.py
new file mode 100644
index 0000000..05fafbc
--- /dev/null
+++ b/registry/vulkan/scripts/interfacedocgenerator.py
@@ -0,0 +1,118 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import re
+from generator import OutputGenerator, write
+
+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):
+                if required is not None:
+                    requiredlink = 'apiext:' + required
+                    match = re.search("[A-Z]+_VERSION_([0-9]+)_([0-9]+)",required)
+                    if match is not None:
+                        major = match.group(1)
+                        minor = match.group(2)
+                        version = major + '.' + minor
+                        requiredlink = '<<versions-' + version + ', Version ' + version + '>>'
+
+                    write('ifdef::' + required + '[]', file=fp)
+                    write('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/registry/vulkan/scripts/linkcheck.py b/registry/vulkan/scripts/linkcheck.py
new file mode 100755
index 0000000..252112b
--- /dev/null
+++ b/registry/vulkan/scripts/linkcheck.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python3
+# Copyright 2013-2021 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:
+        # Don't 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:
+        # Don't 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/registry/vulkan/scripts/make_ext_dependency.py b/registry/vulkan/scripts/make_ext_dependency.py
new file mode 100755
index 0000000..5157128
--- /dev/null
+++ b/registry/vulkan/scripts/make_ext_dependency.py
@@ -0,0 +1,243 @@
+#!/usr/bin/env python3
+#
+# Copyright 2017-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+"""Generate a mapping of extension name -> all required extension names for that extension.
+
+This script generates a list of all extensions, and of just KHR
+extensions, that are placed into a Bash script and/or Python script. This
+script can then be sources or executed to set a variable (e.g. khrExts),
+Frontend scripts such as 'makeAllExts' and 'makeKHR' use this information
+to set the EXTENSIONS Makefile variable when building the spec.
+
+Sample Usage:
+
+python3 scripts/make_ext_dependency.py -outscript=temp.sh
+source temp.sh
+make EXTENSIONS="$khrExts" html
+rm temp.sh
+"""
+
+import argparse
+import errno
+import xml.etree.ElementTree as etree
+from pathlib import Path
+
+from vkconventions import VulkanConventions as APIConventions
+
+
+def enQuote(key):
+    return "'" + str(key) + "'"
+
+
+def shList(names):
+    """Return a sortable (list or set) of names as a string encoding
+    of a Bash or Python list, sorted on the names."""
+    s = ('"' +
+         ' '.join(str(key) for key in sorted(names)) +
+         '"')
+    return s
+
+
+def pyList(names):
+    if names is not None:
+        return ('[ ' +
+                ', '.join(enQuote(key) for key in sorted(names)) +
+                ' ]')
+    else:
+        return '[ ]'
+
+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's 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's
+        # 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()
+
+
+def make_dir(fn):
+    outdir = Path(fn).parent
+    try:
+        outdir.mkdir(parents=True)
+    except OSError as e:
+        if e.errno != errno.EEXIST:
+            raise
+
+
+# API conventions object
+conventions = APIConventions()
+
+# -extension name - may be a single extension name, a space-separated list
+# of names, or a regular expression.
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-registry', action='store',
+                        default=conventions.registry_path,
+                        help='Use specified registry file instead of ' + conventions.registry_path)
+    parser.add_argument('-outscript', action='store',
+                        default=None,
+                        help='Shell script to create')
+    parser.add_argument('-outpy', action='store',
+                        default=None,
+                        help='Python script to create')
+    parser.add_argument('-test', action='store',
+                        default=None,
+                        help='Specify extension to find dependencies of')
+    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)
+
+    # Loop over all supported extensions, creating a digraph of the
+    # extension dependencies in the 'requires' attribute, which is a
+    # comma-separated list of extension names. Also track lists of
+    # all extensions and all KHR extensions.
+
+    allExts = set()
+    khrExts = set()
+    g = DiGraph()
+
+    for elem in tree.findall('extensions/extension'):
+        name = elem.get('name')
+        supported = elem.get('supported')
+
+        # This works for the present form of the 'supported' attribute,
+        # which is a comma-separate list of XML API names
+        if conventions.xml_api_name in supported.split(','):
+            allExts.add(name)
+
+            if 'KHR' in name:
+                khrExts.add(name)
+
+            deps = elem.get('requires')
+            if deps:
+                deps = deps.split(',')
+
+                for dep in deps:
+                    g.add_edge(name, dep)
+            else:
+                g.add_node(name)
+        else:
+            # Skip unsupported extensions
+            pass
+
+    if args.outscript:
+        make_dir(args.outscript)
+        fp = open(args.outscript, 'w', encoding='utf-8')
+
+        print('#!/bin/bash', file=fp)
+        print('# Generated from make_ext_dependency.py', file=fp)
+        print('# Specify maps of all extensions required by an enabled extension', file=fp)
+        print('', file=fp)
+        print('declare -A extensions', file=fp)
+
+        # When printing lists of extensions, sort them so that the output script
+        # remains as stable as possible as extensions are added to the API XML.
+
+        for ext in sorted(g.nodes()):
+            children = list(g.descendants(ext))
+
+            # Only emit an ifdef block if an extension has dependencies
+            if children:
+                print('extensions[' + ext + ']=' + shList(children), file=fp)
+
+        print('', file=fp)
+        print('# Define lists of all extensions and KHR extensions', file=fp)
+        print('allExts=' + shList(allExts), file=fp)
+        print('khrExts=' + shList(khrExts), file=fp)
+
+        fp.close()
+
+    if args.outpy:
+        make_dir(args.outpy)
+        fp = open(args.outpy, 'w', encoding='utf-8')
+
+        print('#!/usr/bin/env python', file=fp)
+        print('# Generated from make_ext_dependency.py', file=fp)
+        print('# Specify maps of all extensions required by an enabled extension', file=fp)
+        print('', file=fp)
+        print('extensions = {}', file=fp)
+
+        # When printing lists of extensions, sort them so that the output script
+        # remains as stable as possible as extensions are added to the API XML.
+
+        for ext in sorted(g.nodes()):
+            children = list(g.descendants(ext))
+            print("extensions['" + ext + "'] = " + pyList(children), file=fp)
+
+        print('', file=fp)
+        print('# Define lists of all extensions and KHR extensions', file=fp)
+        print('allExts = ' + pyList(allExts), file=fp)
+        print('khrExts = ' + pyList(khrExts), file=fp)
+
+        fp.close()
diff --git a/registry/vulkan/scripts/makemanaliases.py b/registry/vulkan/scripts/makemanaliases.py
new file mode 100755
index 0000000..df44a8a
--- /dev/null
+++ b/registry/vulkan/scripts/makemanaliases.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python3
+#
+# Copyright 2020-2021 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 *api.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 api.py in the specified directory
+    if args.genpath is not None:
+        sys.path.insert(0, args.genpath)
+    import 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
+    # doesn't exist - and warn if it does exist.
+
+    for key in api.alias:
+        alias = key + '.html'
+        src = api.alias[key] + '.html'
+
+        if not os.access(src, os.R_OK):
+            # This shouldn't happen, but is possible if the api module isn't
+            # 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's not necc. a problem, so
+            # don't fail, but it should be checked out
+            print('Unexpected alias file "' + alias + '" exists, skipping',
+                  file=sys.stderr)
+        else:
+            # Create link from alias refpage to page for what it's aliasing
+            os.symlink(src, alias)
diff --git a/registry/vulkan/scripts/promote.py b/registry/vulkan/scripts/promote.py
new file mode 100755
index 0000000..c6b73ba
--- /dev/null
+++ b/registry/vulkan/scripts/promote.py
@@ -0,0 +1,173 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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.txt[]', 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.txt[]', 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's 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(".txt"):
+                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/registry/vulkan/scripts/pygenerator.py b/registry/vulkan/scripts/pygenerator.py
new file mode 100644
index 0000000..798ac32
--- /dev/null
+++ b/registry/vulkan/scripts/pygenerator.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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's 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/registry/vulkan/scripts/reflib.py b/registry/vulkan/scripts/reflib.py
new file mode 100644
index 0000000..bab7d30
--- /dev/null
+++ b/registry/vulkan/scripts/reflib.py
@@ -0,0 +1,666 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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())
+    sys.exit(1)
+
+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's extracted from."""
+    def __init__(self):
+        self.extractPage = True
+        """True if page should be extracted"""
+
+        self.Warning  = None
+        """string warning if page is suboptimal or can't 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 or None on failure"""
+    try:
+        fp = open(filename, 'r', encoding='utf-8')
+    except:
+        logWarn('Cannot open file', filename, ':', sys.exc_info()[0])
+        return None
+
+    file = fp.readlines()
+    fp.close()
+
+    return file
+
+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, don't 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.txt and the table of Vk*Flag types in
+        # # appendices/boilerplate.txt.
+        # 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's 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's 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's 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 weren't 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's 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]
+                # Don't 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)
+
+
+# Patterns used to recognize interesting lines in an asciidoc source file.
+# These patterns are only compiled once.
+INCSVAR_DEF = re.compile(r':INCS-VAR: (?P<value>.*)')
+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}|\{INCS-VAR\}/|\{generated\}/)(generated/)?)(?P<generated_type>[\w]+)/(?P<category>\w+)/(?P<entity_name>[^./]+).txt[\[][\]]')
+
+
+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 can't 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
+    incsvar = None
+
+    while (line < numLines):
+        setLogLine(line)
+
+        # Look for a file-wide definition
+        matches = INCSVAR_DEF.match(file[line])
+        if matches:
+            incsvar = matches.group('value')
+            logDiag('Matched INCS-VAR definition:', incsvar)
+
+            line = line + 1
+            continue
+
+        # Perform INCS-VAR substitution immediately.
+        if incsvar and '{INCS-VAR}' in file[line]:
+            newLine = file[line].replace('{INCS-VAR}', incsvar)
+            logDiag('PERFORMING SUBSTITUTION', file[line], '->', newLine)
+            file[line] = newLine
+
+        # 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 wasn't 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 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 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
+    can't 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/registry/vulkan/scripts/reflow.py b/registry/vulkan/scripts/reflow.py
new file mode 100755
index 0000000..1897b05
--- /dev/null
+++ b/registry/vulkan/scripts/reflow.py
@@ -0,0 +1,912 @@
+#!/usr/bin/python3
+#
+# Copyright 2016-2021 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. Most of the logic has to do with detecting asciidoc
+markup or block types that *shouldn't* be reflowed (tables, code) and
+ignoring them. It's very likely there are many asciidoc constructs not yet
+accounted for in the script, our usage of asciidoc markup is intentionally
+somewhat limited.
+
+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
+  don't 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 simple sanity 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
+
+# Vulkan-specific - will consolidate into scripts/ like OpenXR soon
+sys.path.insert(0, 'xml')
+
+from vkconventions import VulkanConventions as APIConventions
+conventions = APIConventions()
+
+# 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}|\{INCS-VAR\}/|\{generated\}/)(generated/)?)(?P<generated_type>[\w]+)/(?P<category>\w+)/(?P<entity_name>[^./]+).txt[\[][\]]')
+
+# Find the first pname: or code: pattern in a Valid Usage statement
+pnamePat = re.compile(r'pname:(?P<param>\{?\w+\}?)')
+codePat = re.compile(r'code:(?P<param>\w+)')
+
+# Markup that's OK in a contiguous paragraph but otherwise passed through
+#   .anything (except .., which indicates a literal block)
+#   === Section Titles
+endParaContinue = re.compile(r'^(\.[^.].*|=+ .*)$')
+
+# Markup for block delimiters whose contents *should* be reformatted
+#   --   (exactly two)  (open block)
+#   **** (4 or more)    (sidebar block - why do we have these?!)
+#   ==== (4 or more)    (example block)
+#   ____ (4 or more)    (quote block)
+blockReflow = re.compile(r'^(--|[*=_]{4,})$')
+
+# Fake block delimiters for "common" VU statements
+blockCommonReflow = '// Common Valid Usage\n'
+
+# Markup for block delimiters whose contents should *not* be reformatted
+#   |=== (3 or more)  (table)
+#   ++++ (4 or more)  (passthrough block)
+#   .... (4 or more)  (literal block)
+#   //// (4 or more)  (comment block)
+#   ---- (4 or more)  (listing block)
+#   ```  (3 or more)  (listing block)
+#   **** (4 or more)  (sidebar 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
+beginBullet = re.compile(r'^ *([*\-.]+|\{empty\}::|::|[0-9]+[.]) ')
+
+# Start of an asciidoctor conditional
+#   ifdef::
+#   ifndef::
+conditionalStart = re.compile(r'^(ifdef|ifndef)::')
+
+# 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 doesn't (usually) end a line.
+endAbbrev = re.compile(r'(e\.g|i\.e|c\.f|vs)\.$', re.IGNORECASE)
+
+class ReflowState:
+    """State machine for reflowing.
+
+    Represents the state of the reflow operation"""
+    def __init__(self,
+                 filename,
+                 margin = 76,
+                 file = sys.stdout,
+                 breakPeriod = True,
+                 reflow = True,
+                 nextvu = None,
+                 maxvu = None):
+
+        self.blockStack = [ None ]
+        """The last element is a line with the asciidoc block delimiter that's currently in effect,
+        such as '--', '----', '****', '======', or '+++++++++'.
+        This affects whether or not the block contents should be formatted."""
+
+        self.reflowStack = [ True ]
+        """The last element is True or False if the current blockStack contents
+        should be reflowed."""
+        self.vuStack = [ False ]
+        """the last element is True or False if the current blockStack contents
+        are an explicit Valid Usage block."""
+
+        self.margin = margin
+        """margin to reflow text to."""
+
+        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.file = file
+        """file handle to write to."""
+
+        self.filename = filename
+        """base name of file being read from."""
+
+        self.lineNumber = 0
+        """line number being read from the input file."""
+
+        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.defaultApiName = '{refpage}'
+        self.apiName = self.defaultApiName
+        """String name of a Vulkan structure or command for VUID tag
+        generation, or {refpage} if one hasn't been included in this file
+        yet."""
+
+    def incrLineNumber(self):
+        self.lineNumber = self.lineNumber + 1
+
+    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.file is not None:
+            for line in lines:
+                print(line, file=self.file, end='')
+
+    def endSentence(self, word):
+        """Return True if word ends with a sentence-period, False otherwise.
+
+        Allows for contraction cases which won't 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 isOpenBlockDelimiter(self, line):
+        """Returns True if line is an open block delimiter."""
+        return line[0:2] == '--'
+
+    def reflowPara(self):
+        """Reflow the current 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."""
+        if not self.reflow:
+            return self.para
+
+        logDiag('reflowPara lead indent = ', self.leadIndent,
+                'hangIndent =', self.hangIndent,
+                'para:', self.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 self.para:
+            line = line.rstrip()
+            words = line.split()
+
+            # logDiag('reflowPara: 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 == '+':
+                    # Trailing ' +' must stay on the same line
+                    endEscape = word
+                    # logDiag('reflowPara last word of line =', word, 'prevWord =', prevWord, 'endEscape =', endEscape)
+                else:
+                    pass
+                    # logDiag('reflowPara wordCount =', wordCount, 'word =', word, 'prevWord =', prevWord)
+
+                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.
+
+                    outPara = []
+                    outLine = ''.ljust(self.leadIndent) + word
+                    outLineLen = self.leadIndent + wordLen
+
+                    # If the paragraph begins with a bullet point, generate
+                    # a hanging indent level if there isn't one already.
+                    if beginBullet.match(self.para[0]):
+                        bulletPoint = True
+                        if len(self.para) > 1:
+                            logDiag('reflowPara first line matches bullet point',
+                                    'but indent already hanging @ input line',
+                                    self.lineNumber)
+                        else:
+                            logDiag('reflowPara first line matches bullet point -'
+                                    'single line, assuming hangIndent @ input line',
+                                    self.lineNumber)
+                            self.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 don't
+                        # 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 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's no
+                            # current line yet.
+                            startLine = True
+
+                    # Add current line to the output paragraph. Force
+                    # starting a new line, although we don't 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(self.hangIndent) + word
+                        outLineLen = self.hangIndent + wordLen
+
+                # Track the previous word, for use in breaking at end of
+                # a sentence
+                prevWord = word
+
+        # Add this line to the output paragraph.
+        if outLine:
+            outPara.append(outLine + '\n')
+
+        return outPara
+
+    def emitPara(self):
+        """Emit a paragraph, possibly reflowing it depending on the block context.
+
+        Resets the paragraph accumulator."""
+        if self.para != []:
+            if self.vuStack[-1] and self.nextvu is not None:
+                # If:
+                #   - this paragraph is in a Valid Usage block,
+                #   - VUID tags are being assigned,
+                # Try to assign VUIDs
+
+                if nestedVuPat.search(self.para[0]):
+                    # Check for nested bullet points. These should not be
+                    # assigned VUIDs, nor present at all, because they break
+                    # the VU extractor.
+                    logWarn(self.filename + ': Invalid nested bullet point in VU block:', self.para[0])
+                elif self.vuPrefix not in self.para[0]:
+                    # 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(self.para[0])
+                    if matches is not None:
+                        logDiag('findRefs: Matched vuPat on line:', self.para[0], end='')
+                        head = matches.group('head')
+                        tail = matches.group('tail')
+
+                        # Use the first pname: or code: tag in the paragraph as
+                        # the parameter name in the VUID tag. This won't always
+                        # be correct, but should be highly reliable.
+                        for vuLine in self.para:
+                            matches = pnamePat.search(vuLine)
+                            if matches is not None:
+                                break
+                            matches = codePat.search(vuLine)
+                            if matches is not None:
+                                break
+
+                        if matches is not None:
+                            paramName = matches.group('param')
+                        else:
+                            paramName = 'None'
+                            logWarn(self.filename,
+                                    'No param name found for VUID tag on line:',
+                                    self.para[0])
+
+                        newline = (head + ' [[' +
+                                   self.vuFormat.format(self.vuPrefix,
+                                                        self.apiName,
+                                                        paramName,
+                                                        self.nextvu) + ']] ' + tail)
+
+                        logDiag('Assigning', self.vuPrefix, self.apiName, self.nextvu,
+                                ' on line:', self.para[0], '->', newline, 'END')
+
+                        # Don't actually assign the VUID unless it's in the reserved range
+                        if self.nextvu <= self.maxvu:
+                            if self.nextvu == self.maxvu:
+                                logWarn('Skipping VUID assignment, no more VUIDs available')
+                            self.para[0] = newline
+                            self.nextvu = self.nextvu + 1
+                # else:
+                #     There are only a few cases of this, and they're 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):',
+                #             self.para[0])
+
+            if self.reflowStack[-1]:
+                self.printLines(self.reflowPara())
+            else:
+                self.printLines(self.para)
+
+        # Reset the paragraph, including its indentation level
+        self.para = []
+        self.leadIndent = 0
+        self.hangIndent = 0
+
+    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.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's already a paragraph being
+        accumulated, e.g. len(para) > 0 - currently not implemented)"""
+        self.endPara(line)
+
+    def endBlock(self, line, reflow = False, vuBlock = False):
+        """'line' begins or ends a block.
+
+        If beginning a block, tag whether or not to reflow the contents.
+
+        vuBlock is True if the previous line indicates this is a Valid Usage block."""
+        self.endPara(line)
+
+        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.reflowStack.pop()
+            self.vuStack.pop()
+        else:
+            # Start a block
+            self.blockStack.append(line)
+            self.reflowStack.append(reflow)
+            self.vuStack.append(vuBlock)
+
+            logDiag('endBlock reflow =', reflow, ' line', self.lineNumber,
+                    ': pushing block start depth', len(self.blockStack),
+                    ':', line, end='')
+
+    def endParaBlockReflow(self, line, vuBlock):
+        """'line' begins or ends a block. The paragraphs in the block *should* be
+        reformatted (e.g. a NOTE)."""
+        self.endBlock(line, reflow = 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, reflow = 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.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.para != [] and indent < self.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()
+
+        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)
+
+def apiMatch(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 VkPhysicalDeviceVariablePointerFeatures ->
+       VkPhysicalDeviceVariablePointersFeatures are not recognized."""
+    upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+    return oldname.rstrip(upper) == newname.rstrip(upper)
+
+def reflowFile(filename, args):
+    logDiag('reflow: filename', filename)
+
+    lines = loadFile(filename)
+    if lines is None:
+        return
+
+    # Output file handle and reflow object for this file. There are no race
+    # conditions on overwriting the input, but it's 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
+
+    if args.nowrite:
+        fp = None
+    else:
+        try:
+            fp = open(outFilename, 'w', encoding='utf8')
+        except:
+            logWarn('Cannot open output file', outFilename, ':', sys.exc_info()[0])
+            return
+
+    state = ReflowState(filename,
+                        margin = args.margin,
+                        file = fp,
+                        reflow = not args.noflow,
+                        nextvu = args.nextvu,
+                        maxvu = args.maxvu)
+
+    for line in lines:
+        state.incrLineNumber()
+
+        # Is this a title line (leading '= ' followed by text)?
+        thisTitle = False
+
+        matches = vuidPat.search(line)
+        if matches is not None:
+            # If we found a VUID pattern, add the (filename,line) it was
+            # found at to a list for that VUID, to find duplicates.
+            vuid = matches.group('vuid')
+            if vuid not in args.vuidDict:
+                args.vuidDict[vuid] = []
+            args.vuidDict[vuid].append([filename, line])
+
+        # The logic here is broken. If we're in a non-reflowable block and
+        # this line *doesn't* end the block, it should always be
+        # accumulated.
+
+        # Test for a blockCommonReflow delimiter comment first, to avoid
+        # treating it solely as a end-Paragraph marker comment.
+        if line == blockCommonReflow:
+            # Starting or ending a pseudo-block for "common" VU statements.
+            state.endParaBlockReflow(line, vuBlock = True)
+
+        elif blockReflow.match(line):
+            # Starting or ending a block whose contents may be reflowed.
+            # Blocks cannot be nested.
+
+            # Is this is an explicit Valid Usage block?
+            vuBlock = (state.lineNumber > 1 and
+                       lines[state.lineNumber-2] == '.Valid Usage\n')
+
+            state.endParaBlockReflow(line, vuBlock)
+
+        elif endPara.match(line):
+            # Ending a paragraph. Emit the current paragraph, if any, and
+            # prepare to begin a new paragraph.
+
+            state.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 state.apiName != 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 apiMatch(state.apiName, apiName):
+                            logDiag(f'Promoted API name mismatch at line {state.lineNumber}: {apiName} does not match state.apiName (this is OK if it is just a spelling alias)')
+                    else:
+                        state.apiName = apiName
+
+        elif endParaContinue.match(line):
+            # For now, always just end the paragraph.
+            # Could check see if len(para) > 0 to accumulate.
+
+            state.endParaContinue(line)
+
+            # If it's 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 reflowed.
+            # These are tables, etc. Blocks cannot be nested.
+
+            state.endParaBlockPassthrough(line)
+        elif state.lastTitle:
+            # The previous line was a document title line. This line
+            # is the author / credits line and must not be reflowed.
+
+            state.endPara(line)
+        else:
+            # Just accumulate a line to the current paragraph. Watch out for
+            # hanging indents / bullet-points and track that indent level.
+
+            state.addLine(line)
+
+            # 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 (args.check
+                and state.vuStack[-1]
+                and not beginBullet.match(line)
+                and conditionalStart.match(lines[state.lineNumber-2])):
+
+                logWarn('Detected embedded Valid Usage conditional: {}:{}'.format(
+                        filename, state.lineNumber - 1))
+                # Keep track of warning check count
+                args.warnCount = args.warnCount + 1
+
+        state.lastTitle = thisTitle
+
+    # Cleanup at end of file
+    state.endPara(None)
+
+    # Check for sensible block nesting
+    if len(state.blockStack) > 1:
+        logWarn('file', filename,
+                'mismatched asciidoc block delimiters at EOF:',
+                state.blockStack[-1])
+
+    if fp is not None:
+        fp.close()
+
+    # Update the 'nextvu' value
+    if args.nextvu != state.nextvu:
+        logWarn('Updated nextvu to', state.nextvu, 'after file', filename)
+        args.nextvu = state.nextvu
+
+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)
+
+# Patterns used to recognize interesting lines in an asciidoc source file.
+# These patterns are only compiled once.
+
+# 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'^  \*\*')
+
+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='Specify start VUID to use instead of the value wired into vuidCounts.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)
+
+    print('args.margin = ', args.margin)
+
+    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, line) 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, line) in found:
+                    logWarn('    {}: {}'.format(file, line))
+                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!', 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('vuidCounts = {', file=reflow_count_file)
+            for key in sorted(vuidCounts):
+                print("    '{}': [ {}, {}, {} ],".format(
+                    key,
+                    vuidCounts[key][0],
+                    vuidCounts[key][1],
+                    vuidCounts[key][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/registry/vulkan/scripts/reg.py b/registry/vulkan/scripts/reg.py
new file mode 100644
index 0000000..254cfbd
--- /dev/null
+++ b/registry/vulkan/scripts/reg.py
@@ -0,0 +1,1466 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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, namedtuple
+from generator import OutputGenerator, GeneratorOptions, write
+import pdb
+
+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'
+    - supported - comma-separated list of XML API names"""
+
+    return (str is not None and str in supported.split(','))
+
+
+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. Can't 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 isn't 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 doesn't 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 doesn't match attribute
+            return False
+    return True
+
+
+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're 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're 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 can't 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 = elem.get('number')
+            """extension number, used for ordering and for assigning
+            enumerant offsets. <feature> features do not have extension
+            numbers and are assigned number 0."""
+
+            # If there's no 'number' attribute, use 0, so sorting works
+            if self.number is None:
+                self.number = 0
+            self.supported = elem.get('supported')
+
+class SpirvInfo(BaseInfo):
+    """Registry information about an API <spirvextensions>
+    or <spirvcapability>."""
+
+    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:
+            self.genOpts = GeneratorOptions()
+        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.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>` Element
+        - info - corresponding {Type|Group|Enum|Cmd|Feature|Spirv}Info object
+        - infoName - 'type' / 'group' / 'enum' / 'command' / 'feature' / 'extension' / 'spirvextension' / 'spirvcapability'
+        - dictionary - self.{type|group|enum|cmd|api|ext|spirvext|spirvcap}dict
+
+        If the Element has an 'api' attribute, the dictionary key is the
+        tuple (name,api). If not, the key is the name. 'name' is an
+        attribute of the Element"""
+        # self.gen.logMsg('diag', 'Adding ElementInfo.required =',
+        #     info.required, 'name =', elem.get('name'))
+        api = elem.get('api')
+        if api:
+            key = (elem.get('name'), api)
+        else:
+            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:
+                True
+        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>
+        self.reg = self.tree.getroot()
+
+        # 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's 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> doesn't already have a 'name' attribute, set
+            # it from contents of its <name> tag.
+            if type_elem.get('name') is None:
+                type_elem.set('name', type_elem.find('name').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 can't be identified and turned into an
+        # enum type definition - it's 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's 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> doesn't already have a 'name' attribute, set
+            # it from contents of its <proto><name> tag.
+            name = cmd.get('name')
+            if name is None:
+                name = cmd.set('name', cmd.find('proto/name').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 = {}
+        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's
+            # 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
+            # doesn't 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.')
+                        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)
+
+        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', featureInfo.number)
+
+                        enum.set('extname', featureInfo.name)
+                        enum.set('supported', 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.')
+                        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)
+
+        # Construct a "validextensionstructs" list for parent structures
+        # based on "structextends" tags in child structures
+        disabled_types = []
+        for disabled_ext in self.reg.findall('extensions/extension[@supported="disabled"]'):
+            for type_elem in disabled_ext.findall("*/type"):
+                disabled_types.append(type_elem.get('name'))
+        for type_elem in self.reg.findall('types/type'):
+            if type_elem.get('name') not in disabled_types:
+                parentStructs = type_elem.get('structextends')
+                if parentStructs is not None:
+                    for parent in parentStructs.split(','):
+                        # self.gen.logMsg('diag', type.get('name'), 'extends', parent)
+                        self.validextensionstructs[parent].append(type_elem.get('name'))
+        # Sort the lists so they don't depend on the XML order
+        for parent in self.validextensionstructs:
+            self.validextensionstructs[parent].sort()
+
+        # 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)
+
+    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)
+
+    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)
+                        # Don't 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', '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 <group> tag and remove it there, so that it
+            # isn't visible to generators (which traverse the <group> tag
+            # elements themselves).
+            # This isn't the most robust way of doing this, since a removed
+            # enum that's later required again will no longer have a group
+            # element, but it makes the change non-intrusive on generator
+            # code.
+            if required is False:
+                groupName = enum.elem.get('extends')
+                if groupName is not None:
+                    # 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', 'Cannot remove enum',
+                                            enumname, 'not found in group',
+                                            groupName)
+                    else:
+                        self.gen.logMsg('warn', 'Cannot remove enum',
+                                        enumname, 'from nonexistent group',
+                                        groupName)
+
+            enum.required = required
+            # Tag enum dependencies in 'alias' attribute as required
+            depname = enum.elem.get('alias')
+            if depname:
+                self.gen.logMsg('diag', 'Generating dependent enum',
+                                depname, 'for alias', enumname, 'required =', enum.required)
+                self.markEnumRequired(depname, required)
+        else:
+            self.gen.logMsg('warn', 'enum:', 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's 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)
+            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
+                required_key = require.get('feature')
+                if required_key is None:
+                    required_key = require.get('extension')
+
+                # 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. Don't 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. Don't 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. Don't 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 requireAndRemoveFeatures(self, interface, featurename, api, profile):
+        """Process `<require>` and `<remove>` tags 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"""
+
+        # <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)
+
+        # <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))
+
+        # 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):
+        """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"""
+
+        self.gen.logMsg('diag', 'generateFeature: generating', ftype, fname)
+        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 isn't 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're 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()
+                            if self.genOpts.defaultExtensions == elem.get('supported'):
+                                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's 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.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)
+            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)
+            for e in features.findall('enum'):
+                # If this is an enum extending an enumerated type, don't
+                # 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)
+            for c in features.findall('command'):
+                self.generateFeature(c.get('name'), 'command', self.cmddict)
+
+    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 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's not a clear win
+                if stripped:
+                    eleminfo.elem.set(attribute, ','.join(apis))
+
+    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)
+
+        # 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 tagged with 'api' pattern matching 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're 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're 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'm 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)
+
+        # Sort the features list, if a sort procedure is defined
+        if self.genOpts.sortProcedure:
+            self.genOpts.sortProcedure(features)
+            # print('sortProcedure ->', [f.name for f in features])
+
+        # Pass 1: 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). It is possible to remove
+        #   a feature in one version and restore it later by requiring it in
+        #   a later version.
+        # 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 removed features for',
+                            f.name)
+            self.fillFeatureDictionary(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile)
+            self.requireAndRemoveFeatures(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile)
+            self.assignAdditionalValidity(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)
+
+        # @@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 2: loop over specified API versions and extensions printing
+        #   declarations for required things which haven't already been
+        #   generated.
+        self.gen.logMsg('diag', 'PASS 2: GENERATE INTERFACES FOR FEATURES')
+        self.gen.beginFile(self.genOpts)
+        for f in features:
+            self.gen.logMsg('diag', 'PASS 2: Generating interface for',
+                            f.name)
+            emit = self.emitFeatures = f.emit
+            if not emit:
+                self.gen.logMsg('diag', 'PASS 2: 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 haven't 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)
+        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()
+
+    def __validateStructLimittypes(self, struct):
+        """Validate 'limittype' attributes for a single struct."""
+        limittypeDiags = namedtuple('limittypeDiags', ['missing', 'invalid'])
+        badFields = defaultdict(lambda : limittypeDiags(missing=[], invalid=[]))
+        validLimittypes = { 'min', 'max', 'bitmask', 'range', 'struct', 'noauto' }
+        for member in struct.getMembers():
+            memberName = member.findtext('name')
+            if memberName in ['sType', 'pNext']:
+                continue
+            limittype = member.get('limittype')
+            if not limittype:
+                badFields[struct.elem.get('name')].missing.append(memberName)
+            elif limittype == 'struct':
+                typeName = member.findtext('type')
+                memberType = self.typedict[typeName]
+                badFields.update(self.__validateStructLimittypes(memberType))
+            elif limittype not in validLimittypes:
+                badFields[struct.elem.get('name')].invalid.append(memberName)
+        return badFields
+
+    def __validateLimittype(self):
+        """Validate 'limittype' attributes."""
+        self.gen.logMsg('diag', 'VALIDATING LIMITTYPE ATTRIBUTES')
+        badFields = self.__validateStructLimittypes(self.typedict['VkPhysicalDeviceProperties2'])
+        for featStructName in self.validextensionstructs['VkPhysicalDeviceProperties2']:
+            featStruct = self.typedict[featStructName]
+            badFields.update(self.__validateStructLimittypes(featStruct))
+
+        if badFields:
+            self.gen.logMsg('diag', 'SUMMARY OF FIELDS WITH INCORRECT LIMITTYPES')
+            for key in sorted(badFields.keys()):
+                diags = badFields[key]
+                if diags.missing:
+                    self.gen.logMsg('diag', '    ', key, 'missing limittype:', ', '.join(badFields[key].missing))
+                if diags.invalid:
+                    self.gen.logMsg('diag', '    ', key, 'invalid limittype:', ', '.join(badFields[key].invalid))
+            return False
+        return True
+
+    def validateRegistry(self):
+        """Validate properties of the registry."""
+        return self.__validateLimittype()
diff --git a/registry/vulkan/scripts/rubygenerator.py b/registry/vulkan/scripts/rubygenerator.py
new file mode 100644
index 0000000..8042d9b
--- /dev/null
+++ b/registry/vulkan/scripts/rubygenerator.py
@@ -0,0 +1,120 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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/registry/vulkan/scripts/scriptgenerator.py b/registry/vulkan/scripts/scriptgenerator.py
new file mode 100644
index 0000000..204639d
--- /dev/null
+++ b/registry/vulkan/scripts/scriptgenerator.py
@@ -0,0 +1,380 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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/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' """
+
+        # 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 don't 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's how the spec sources
+          tag these types even though they aren't 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, don't 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 doesn't 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':
+                    # Don't add an entry for base types that are not API types
+                    # e.g. an API Bool type gets an entry, uint32_t does not
+                    if self.apiName(name):
+                        self.basetypes[name] = None
+                        self.addName(self.typeCategory, name, 'basetype')
+                    else:
+                        self.logMsg('diag', 'ScriptOutputGenerator::genType: unprocessed type:', name, 'category:', category)
+            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 constants).
+
+        - Add the constant name to the 'consts' dictionary, with the
+          value being None to indicate that the constant isn't
+          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
+        # Otherwise, don't add it to the consts dictionary because it's
+        # 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 doesn't exist,
+            # then add the thing that doesn't 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/registry/vulkan/scripts/spec_tools/__init__.py b/registry/vulkan/scripts/spec_tools/__init__.py
new file mode 100644
index 0000000..34c01f3
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/spec_tools/algo.py b/registry/vulkan/scripts/spec_tools/algo.py
new file mode 100644
index 0000000..3b4c81f
--- /dev/null
+++ b/registry/vulkan/scripts/spec_tools/algo.py
@@ -0,0 +1,69 @@
+#!/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
diff --git a/registry/vulkan/scripts/spec_tools/attributes.py b/registry/vulkan/scripts/spec_tools/attributes.py
new file mode 100644
index 0000000..ef77181
--- /dev/null
+++ b/registry/vulkan/scripts/spec_tools/attributes.py
@@ -0,0 +1,114 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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."""
+        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)
+
diff --git a/registry/vulkan/scripts/spec_tools/base_printer.py b/registry/vulkan/scripts/spec_tools/base_printer.py
new file mode 100644
index 0000000..f48905a
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/spec_tools/consistency_tools.py b/registry/vulkan/scripts/spec_tools/consistency_tools.py
new file mode 100644
index 0000000..c256a72
--- /dev/null
+++ b/registry/vulkan/scripts/spec_tools/consistency_tools.py
@@ -0,0 +1,697 @@
+#!/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
+
+import networkx as nx
+
+from .algo import RecursiveMemoize
+from .attributes import ExternSyncEntry, LengthEntry
+from .data_structures import DictOfStringSets
+from .util import findNamedElem, getElemName
+
+
+class XMLChecker:
+    def __init__(self, entity_db,  conventions, manual_types_to_codes=None,
+                 forward_only_types_to_codes=None,
+                 reverse_only_types_to_codes=None,
+                 suppressions=None):
+        """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.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)
+
+        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_api_types = ReferencedTypes(self.db, self.is_api_type)
+        if not suppressions:
+            suppressions = {}
+        self.suppressions = DictOfStringSets(suppressions)
+
+    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 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 error codes expected due to having
+        an input argument of type type_name.
+
+        The cmd_name is passed for use by extending methods.
+
+        May extend."""
+        return self.input_type_to_codes.get(type_name, 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)
+
+        # check_extension is called for all extensions, even 'disabled'
+        # ones, but some checks may be skipped depending on extension
+        # status.
+        for name, info in self.reg.extdict.items():
+            self.set_error_context(entity=name, elem=info.elem)
+            self.check_extension(name, info)
+
+        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:
+            print()
+            print('-------------------')
+            print('Messages for', entity)
+            print()
+            messages = self.errors.get(entity)
+            if messages:
+                for m in messages:
+                    print('Error:', m)
+
+            messages = self.warnings.get(entity)
+            if messages:
+                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)
+        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_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)
+
+        elif category == "bitmask":
+            if 'Flags' not in name:
+                self.record_error("Name of bitmask doesn't include 'Flags'")
+
+    def check_extension(self, name, info):
+        """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_api_types[name]
+
+        # 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, 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 nx.algorithms.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()
+
+            # 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():
+        codes = set()
+        # The sets of return codes corresponding to each ancestor type.
+        ancestors_codes = (types_to_codes.get(ancestor, set())
+                           for ancestor in ancestors)
+        codes.union(*ancestors_codes)
+        # for parent_codes in ancestors_codes:
+        #     codes.update(parent_codes)
+        extra_handle_codes[handle_type] = 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/registry/vulkan/scripts/spec_tools/console_printer.py b/registry/vulkan/scripts/spec_tools/console_printer.py
new file mode 100644
index 0000000..18acabf
--- /dev/null
+++ b/registry/vulkan/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.
+    Replacment, 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/registry/vulkan/scripts/spec_tools/data_structures.py b/registry/vulkan/scripts/spec_tools/data_structures.py
new file mode 100644
index 0000000..f2808cf
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/spec_tools/entity_db.py b/registry/vulkan/scripts/spec_tools/entity_db.py
new file mode 100644
index 0000000..9a8dcfb
--- /dev/null
+++ b/registry/vulkan/scripts/spec_tools/entity_db.py
@@ -0,0 +1,659 @@
+"""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()
+
+    ###
+    # 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 = '{}/{}.txt'.format(directory, entityName)
+
+        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.txt 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/registry/vulkan/scripts/spec_tools/file_process.py b/registry/vulkan/scripts/spec_tools/file_process.py
new file mode 100644
index 0000000..f0d4c60
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/spec_tools/html_printer.py b/registry/vulkan/scripts/spec_tools/html_printer.py
new file mode 100644
index 0000000..eb1df40
--- /dev/null
+++ b/registry/vulkan/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 -->
+        <!-- ..................................... -->
+        """.format(id=self.makeIdentifierFromFilename(fileChecker.filename)))
+
+    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/registry/vulkan/scripts/spec_tools/macro_checker.py b/registry/vulkan/scripts/spec_tools/macro_checker.py
new file mode 100644
index 0000000..a8a75aa
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/spec_tools/macro_checker_file.py b/registry/vulkan/scripts/spec_tools/macro_checker_file.py
new file mode 100644
index 0000000..3bca17a
--- /dev/null
+++ b/registry/vulkan/scripts/spec_tools/macro_checker_file.py
@@ -0,0 +1,1592 @@
+"""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 a generated (api or validity) include line.
+INCLUDE = re.compile(
+    r'include::(?P<directory_traverse>((../){1,4}|\{(INCS-VAR|generated)\}/)(generated/)?)(?P<generated_type>[\w]+)/(?P<category>\w+)/(?P<entity_name>[^./]+).txt[\[][\]]')
+
+# 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>[^'\\]*(?:\\.[^'\\]*)*)'")
+
+
+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 include:::....[] lines
+        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 seeting * 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:
+            # 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():
+                    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:
+                # 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 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)
+
+            # Skip entity check if it's a spir-v built in
+            type = ''
+            if Attrib.TYPE.value in attribs:
+                type = attribs[Attrib.TYPE.value].value
+
+            if type != 'builtins' and type != 'spirv':
+                data = self.checker.findEntity(text)
+                self.current_ref_page = data
+                if data:
+                    # OK, this is a known entity that we're seeing a refpage for.
+                    directory = data.directory
+                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),
+                                 '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)
+
+    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)
+        if data:
+            # This is OK
+            return
+        context = line_context
+        match = re.search(r'\b{}\b'.format(referenced_entity), self.line)
+        if match:
+            context = self.storeMessageContext(
+                group=None, match=match)
+        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/registry/vulkan/scripts/spec_tools/main.py b/registry/vulkan/scripts/spec_tools/main.py
new file mode 100644
index 0000000..2cd4f69
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/spec_tools/shared.py b/registry/vulkan/scripts/spec_tools/shared.py
new file mode 100644
index 0000000..bb6f165
--- /dev/null
+++ b/registry/vulkan/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 geneated api or validity from the various pieces."""
+    return 'include::{directory_traverse}{generated_type}/{category}/{entity_name}.txt[]'.format(
+        directory_traverse=dir_traverse,
+        generated_type=generated_type,
+        category=category,
+        entity_name=entity)
+
+
+# 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):
+    """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
+
+    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 MessageId.DESCRIPTIONS[self]
+
+
+MessageId.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"
+}
+
+
+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/registry/vulkan/scripts/spec_tools/util.py b/registry/vulkan/scripts/spec_tools/util.py
new file mode 100644
index 0000000..b890679
--- /dev/null
+++ b/registry/vulkan/scripts/spec_tools/util.py
@@ -0,0 +1,58 @@
+"""Utility functions not closely tied to other spec_tools types."""
+# Copyright 2018-2019 Collabora, Ltd.
+# Copyright 2013-2021 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/registry/vulkan/scripts/spec_tools/validity.py b/registry/vulkan/scripts/spec_tools/validity.py
new file mode 100644
index 0000000..745ba01
--- /dev/null
+++ b/registry/vulkan/scripts/spec_tools/validity.py
@@ -0,0 +1,216 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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]+:.*')
+
+
+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):
+        self.entity_name = entity_name
+        self.conventions = conventions
+        self.lines = []
+        self.strict = strict
+
+    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 not self.entity_name == other.entity_name:
+                raise RuntimeError(
+                    "Trying to combine two ValidityCollections for different entities!")
+            self._extend(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/registry/vulkan/scripts/spirvcapgenerator.py b/registry/vulkan/scripts/spirvcapgenerator.py
new file mode 100644
index 0000000..85740f3
--- /dev/null
+++ b/registry/vulkan/scripts/spirvcapgenerator.py
@@ -0,0 +1,308 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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):
+        """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"""
+
+        if enable.get('version'):
+            # Turn VK_API_VERSION_1_0 -> VK_VERSION_1_0
+            return enable.get('version').replace('API_', '')
+        elif enable.get('extension'):
+            return enable.get('extension')
+        elif enable.get('struct') or enable.get('property'):
+            return enable.get('requires')
+        else:
+            self.logMsg('error', 'Unrecognized SPIR-V 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)
+            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.txt
+        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 don't 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 VK_API_VERSION_m_n to conditional
+                    # used for spec builds (VK_VERSION_m_n)
+                    enable = version.replace('API_', '')
+                    # Convert API enum to anchor for version appendices (versions-m.n)
+                    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
+
+                    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, don't 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.txt', captable)
+        self.writeBlock('exttable.txt', 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 paramIsArray(self, param):
+        """Check if the parameter passed in is a pointer to an array."""
+        return param.get('len') is not None
+
+    def paramIsPointer(self, param):
+        """Check if the parameter passed in is a pointer."""
+        tail = param.find('type').tail
+        return tail is not None and '*' in tail
+
+    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 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/registry/vulkan/scripts/testSpecVersion.py b/registry/vulkan/scripts/testSpecVersion.py
new file mode 100755
index 0000000..4ead2b6
--- /dev/null
+++ b/registry/vulkan/scripts/testSpecVersion.py
@@ -0,0 +1,75 @@
+#!/usr/bin/python3
+#
+# Copyright 2017-2021 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, don't 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 - {} = 1 for branch {}'.format(
+                      name, 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/registry/vulkan/scripts/test_check_spec_links.py b/registry/vulkan/scripts/test_check_spec_links.py
new file mode 100644
index 0000000..b0c82e3
--- /dev/null
+++ b/registry/vulkan/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.txt[]""" % (PROTO, PROTO)).messages)
+    assert(not ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/validity/protos/%s.txt[]""" % (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.txt[]" % PROTO).numDiagnostics() == 1)
+    assert(ckr.check(
+        "include::{generated}/validity/protos/%s.txt[]" % PROTO).numDiagnostics() == 1)
+
+    # Should have 1 error: include is before the refpage open
+    assert(ckr.check(
+        """include::{generated}/api/protos/%s.txt[]
+        [open,refpage='%s']
+        --""" % (PROTO, PROTO)).numDiagnostics() == 1)
+    assert(ckr.check(
+        """include::{generated}/validity/protos/%s.txt[]
+        [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.txt[]""" % (PROTO, PROTO)).messages)
+    assert(not ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/validity/protos/%s.txt[]""" % (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.txt[]""" % (PROTO, STRUCT)).numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,refpage='%s']
+        --
+        include::{generated}/validity/structs/%s.txt[]""" % (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/registry/vulkan/scripts/test_check_spec_links_api_specific.py b/registry/vulkan/scripts/test_check_spec_links_api_specific.py
new file mode 100644
index 0000000..76ce6a9
--- /dev/null
+++ b/registry/vulkan/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.txt[]""").numDiagnostics() == 1)
+    assert(ckr.check(
+        """[open,refpage='VkQueueFlags']
+        --
+        include::{generated}/validity/enums/VkQueueFlagBits.txt[]""").numDiagnostics() == 1)
+
+    # Should not error: this is just an alias
+    assert(ckr.check(
+        """[open,refpage='vkUpdateDescriptorSetWithTemplate']
+        --
+        include::{generated}/api/protos/vkUpdateDescriptorSetWithTemplateKHR.txt[]""").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.txt[]").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/registry/vulkan/scripts/test_entity_db.py b/registry/vulkan/scripts/test_entity_db.py
new file mode 100644
index 0000000..ef08794
--- /dev/null
+++ b/registry/vulkan/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/registry/vulkan/scripts/translate_math.js b/registry/vulkan/scripts/translate_math.js
new file mode 100644
index 0000000..c2fd6d2
--- /dev/null
+++ b/registry/vulkan/scripts/translate_math.js
@@ -0,0 +1,33 @@
+// Copyright 2020-2021 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/registry/vulkan/scripts/validitygenerator.py b/registry/vulkan/scripts/validitygenerator.py
new file mode 100755
index 0000000..a3a8456
--- /dev/null
+++ b/registry/vulkan/scripts/validitygenerator.py
@@ -0,0 +1,1497 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 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 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
+
+
+# For parsing/splitting queue bit names - Vulkan only
+QUEUE_BITS_RE = re.compile(r'([^,]+)')
+
+
+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 what container type you'd like,
+    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
+
+
+def _parse_queue_bits(cmd):
+    """Return a generator of queue bits, with underscores turned to spaces.
+
+    Vulkan-only.
+
+    Return None if the queues attribute is not specified."""
+    queuetypes = cmd.get('queues')
+    if not queuetypes:
+        return None
+    return (qt.replace('_', ' ')
+            for qt in QUEUE_BITS_RE.findall(queuetypes))
+
+
+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 = ''
+
+    @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 / (basename + '.txt'))
+        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('|<<VkCommandBufferLevel,Command Buffer Levels>>|<<vkCmdBeginRenderPass,Render Pass Scope>>|<<VkQueueFlagBits,Supported Queue Types>>', 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 paramIsPointer(self, param):
+        """Check if the parameter passed in is a pointer."""
+        tail = param.find('type').tail
+        return tail is not None and '*' in tail
+
+    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's 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 paramIsArray(self, param):
+        """Check if the parameter passed in is a pointer to an array."""
+        return param.get('len') is not None
+
+    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's 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 let's say yes.
+        if param.get('noautovalidity') is not None:
+            return True
+
+        # If the parameter is an array and we haven't 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:
+                    # don't 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):
+        # Don't 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 += 'Any given 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:
+                    # Don't 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)
+
+        # 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 isn't 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 don't 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 hasn't been hit, so this hasn't 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's just a bunch of chars
+                    entry += 'char value'
+
+            elif self.paramIsConst(param):
+                # If a value is "const" that means it won't 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 don't 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 don't 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 won't 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 doesn't...
+            # 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 don't use the typetext.
+            # A null-terminated char array is a string, else it's 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?
+            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" doesn't 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)
+
+        # Deal with handle parents
+        handleparent = self.getHandleParent(paramtype)
+        if handleparent is None:
+            return None
+
+        otherparam = findTypedElem(params, handleparent)
+        if otherparam is None:
+            return None
+
+        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 can't 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's 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 doesn't even have any values for its type,
+            # and it seems like it might be a base struct that we'd 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's 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 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
+            queuebits = _parse_queue_bits(cmd)
+            if queuebits:
+                entry = ValidityEntry(anchor=('queuetype',))
+                entry += 'The pname:queue must: support '
+                entry += self.makeProseList(queuebits,
+                                            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
+                queuebits = _parse_queue_bits(cmd)
+                assert(queuebits)
+                entry += 'The sname:VkCommandPool that pname:commandBuffer was allocated from must: support '
+                entry += self.makeProseList(queuebits,
+                                            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 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's 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:
+            # Don't 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 makeCommandPropertiesTableEntry(self, cmd, name):
+
+        if 'vkCmd' in name:
+            # Must be called inside/outside a render pass appropriately
+            cmdbufferlevel = cmd.get('cmdbufferlevel')
+            cmdbufferlevel = (' + \n').join(cmdbufferlevel.title().split(','))
+
+            renderpass = cmd.get('renderpass')
+            renderpass = renderpass.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 + \nGraphics + \nCompute'
+                else:
+                    queues = 'Graphics + \nCompute'
+            else:
+                queues = cmd.get('queues')
+                queues = (' + \n').join(queues.title().split(','))
+
+            return '|' + cmdbufferlevel + '|' + renderpass + '|' + queues
+        elif 'vkQueue' in name:
+            # Must be called inside/outside a render pass appropriately
+
+            queues = cmd.get('queues')
+            if queues is None:
+                queues = 'Any'
+            else:
+                queues = (' + \n').join(queues.upper().split(','))
+
+            return '|-|-|' + queues
+
+        return 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's only ever returned can't be set by the user, so shouldn't 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)
+
+            # 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/registry/vulkan/scripts/vkconventions.py b/registry/vulkan/scripts/vkconventions.py
new file mode 100644
index 0000000..a43f712
--- /dev/null
+++ b/registry/vulkan/scripts/vkconventions.py
@@ -0,0 +1,274 @@
+#!/usr/bin/python3 -i
+#
+# Copyright 2013-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Working-group-specific style conventions,
+# used in generation.
+
+import re
+import os
+
+from 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
+    '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`'
+
+    @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'_DIRECT_FB_',               r'_DIRECTFB_' ],
+        ]
+
+        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 '.txt'
+
+    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 aren't 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://www.khronos.org/registry/vulkan/specs/1.2-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 extra_refpage_headers(self):
+        """Return any extra text to add to refpage headers."""
+        return 'include::{config}/attribs.txt[]'
+
+    @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're 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 doesn't 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_include_string(self, ext):
+        """Return format string for include:: line for an extension appendix
+           file. ext is an object with the following members:
+            - name - extension string string
+            - vendor - vendor portion of name
+            - barename - remainder of name"""
+
+        return 'include::{{appendices}}/{name}{suffix}[]'.format(
+                name=ext.name, suffix=self.file_suffix)
+
+    @property
+    def refpage_generated_include_path(self):
+        """Return path relative to the generated reference pages, to the
+           generated API include files."""
+        return "{generated}"
+
+    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
diff --git a/registry/vulkan/scripts/xml_consistency.py b/registry/vulkan/scripts/xml_consistency.py
new file mode 100755
index 0000000..3651453
--- /dev/null
+++ b/registry/vulkan/scripts/xml_consistency.py
@@ -0,0 +1,390 @@
+#!/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 re
+import sys
+from pathlib import Path
+
+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 vkconventions import VulkanConventions as APIConventions
+
+# 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 don't
+EXTENSION_NAME_VERSION_EXCEPTIONS = (
+    'VK_AMD_gpu_shader_int16',
+    'VK_EXT_index_type_uint8',
+    'VK_EXT_shader_image_atomic_int64',
+    'VK_EXT_video_decode_h264',
+    'VK_EXT_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',
+)
+
+# 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',
+)
+
+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 = '{}.txt'.format(extname)
+    return str(SPECIFICATION_DIR / 'appendices' / fn)
+
+
+class EntityDatabase(OrigEntityDatabase):
+
+    # 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()
+
+        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):
+        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")),
+        )
+        # Map of extension number -> [ list of extension names ]
+        self.extension_number_reservations = {
+        }
+
+        # This is used to report collisions.
+        conventions = APIConventions()
+        db = EntityDatabase()
+
+        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 = {}
+
+        # 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)
+
+    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 wasn't 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:
+                self.record_error(
+                    "Apparent enumeration of an array without VK_INCOMPLETE in successcodes.")
+
+        elif 'VK_INCOMPLETE' in successcodes:
+            self.record_error(
+                "VK_INCOMPLETE in successcodes of command that is apparently not an array enumeration.")
+
+    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 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 = '{}.pNext member is missing \'optional="true"\' attribute'.format(self.entity)
+                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(self, name, info, category):
+        """Check a type's XML data for consistency.
+
+        Called from check."""
+
+        elem = info.elem
+        type_elts = [elt
+                     for elt in elem.findall("member")
+                     if getElemType(elt) == TYPEENUM]
+        if category == 'struct' and type_elts:
+            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:
+                    self.record_error("Unknown structure type constant", val)
+
+            # Check the pointer chain 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 = '{}.{} member is missing \'optional="true"\' attribute'.format(name, next_name)
+                    if name in CHECK_MEMBER_PNEXT_OPTIONAL_EXCEPTIONS:
+                        self.record_warning('(Allowed exception)', message)
+                    else:
+                        self.record_error(message)
+
+        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_extension(self, name, info):
+        """Check an extension's XML data for consistency.
+
+        Called from check."""
+        elem = info.elem
+        enums = elem.findall('./require/enum[@name]')
+
+        # Look for other extensions using that number
+        # Keep track of this extension number reservation
+        ext_number = elem.get('number')
+        if ext_number in self.extension_number_reservations:
+            conflicts = self.extension_number_reservations[ext_number]
+            self.record_error('Extension number {} has more than one reservation: {}, {}'.format(
+                ext_number, name, ', '.join(conflicts)))
+            self.extension_number_reservations[ext_number].append(name)
+        else:
+            self.extension_number_reservations[ext_number] = [ 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 doesn't 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 = "{}_SPEC_VERSION".format(ext_enum_name)
+        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('Missing version enum {}{}'.format(version_name, suffix))
+        elif info.elem.get('supported') == self.conventions.xml_api_name:
+            # 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)
+
+        name_define = "{}_EXTENSION_NAME".format(ext_enum_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 = '"{}"'.format(name)
+            name_val = name_elem.get('value')
+            if name_val != expected_name:
+                self.record_error("Incorrect name enum: expected", expected_name,
+                                  "got", name_val)
+
+        super().check_extension(name, elem)
+
+
+if __name__ == "__main__":
+
+    ckr = Checker()
+    ckr.check()
+
+    if ckr.fail:
+        sys.exit(1)
diff --git a/registry/vulkan/src/ext_loader/README.md b/registry/vulkan/src/ext_loader/README.md
new file mode 100644
index 0000000..c571986
--- /dev/null
+++ b/registry/vulkan/src/ext_loader/README.md
@@ -0,0 +1,34 @@
+<!--
+Copyright 2018-2021 The Khronos Group Inc.
+
+SPDX-License-Identifier: CC-BY-4.0
+-->
+
+# What Happened To The Vulkan Extension Loader?
+
+If you're 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 haven't 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/registry/vulkan/style/extensions.txt b/registry/vulkan/style/extensions.txt
new file mode 100644
index 0000000..9bffa7b
--- /dev/null
+++ b/registry/vulkan/style/extensions.txt
@@ -0,0 +1,1213 @@
+// Copyright 2015-2021 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.
+
+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.
+
+  * The following are examples of extension and layer names, demonstrating
+    the above syntax:
+  ** Extension names all use the base prefix `VK_`.
+  ** Khronos-ratified extensions add the reserved author ID `KHR` and use
+     the prefix `VK_KHR_`.
+  ** 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.
+  ** Multi-author extensions that have not been ratified by Khronos (those
+     developed via cooperation between, and intended to be supported by two
+     or more registered authors) add the special author ID `EXT` to the base
+     prefix, and will use the prefix `VK_EXT_`.
+  ** Traditional author-specific extensions developed by one author (or one
+     author in cooperation with non-authors) 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_`.
+     Some authors can have additional registered author IDs for special
+     purposes.
+     For example, an Android extension developed by Google - but part of an
+     Android open-source community project, and so not a proprietary Google
+     extension - will use the author ID `ANDROID`.
+  ** 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.
+
+[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.
+====
+
+[source, c]
+.Example
+----
+// Core API version name for Vulkan 1.1
+VK_VERSION_1_1
+
+// Khronos extension name
+VK_KHR_mirror_clamp_to_edge
+
+// Multivendor 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, which
+contains 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.txt`.
+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.txt.txt`, which
+    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/{*txt,*/*txt} appendices/*txt
+----
+====
+--
+  * 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.txt` 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.txt`).
+  ** *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.txt` 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.txt`, by including
+    in that file:
++
+[source,asciidoc]
+.Example Markup
+----
+\ifdef::VK_EXT_debug_marker[]
+\include::chapters/VK_EXT_debug_marker/wsi.txt[]
+\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.txt` in the "`Return Codes`"
+    section as follows:
++
+[source,asciidoc]
+.Example Markup
+----
+... list of existing error codes
+\ifdef::VK_KHR_surface[]
+\include::VK_KHR_surface/VkResultErrorDescriptions_surface.txt[]
+\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*.txt`, and
+    `chapters/*extension_name*.txt`.
+    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.txt`, there is
+    `chapters/VK_KHR_android_surface/platformCreateSurface_android.txt` and
+    `chapters/VK_KHR_android_surface/platformQuerySupport_android.txt`, 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 must: be kept atomic with regards to extension
+    conditionals.
+    Do not surround part of a single statement with conditionals.
+    Valid usage statements are automatically extracted from the
+    specification for use by ecosystem components like the validation
+    layers, and the extraction scripts need to know which valid usage
+    statements apply to which extensions.
+    The loops required to deal with partial statements are simply not worth
+    the trouble.
+    For example, instead of
++
+[source,asciidoc]
+.Example Markup
+----
+  * If pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: either both be
+    ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
+    <<devsandqueues-queueprops>>)
+\ifdef::VK_KHR_external_memory[]
+    unless one of them is ename:VK_QUEUE_FAMILY_EXTERNAL_KHR and the other
+    is ename:VK_QUEUE_FAMILY_IGNORED.
+\endif::VK_KHR_external_memory[]
+----
++
+Use
++
+[source,asciidoc]
+.Example Markup
+----
+ifndef::VK_KHR_external_memory[]
+  * If pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: either both be
+    ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
+    <<devsandqueues-queueprops>>)
+endif::VK_KHR_external_memory[]
+ifdef::VK_KHR_external_memory[]
+  * If pname:buffer was created with a sharing mode of
+    ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
+    pname:dstQueueFamilyIndex must: either both be
+    ename:VK_QUEUE_FAMILY_IGNORED, both be a valid queue family (see
+    <<devsandqueues-queueprops>>), or be
+    ename:VK_QUEUE_FAMILY_EXTERNAL_KHR and ename:VK_QUEUE_FAMILY_IGNORED in
+    either order
+endif::VK_KHR_external_memory[]
+----
+
+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.txt` 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.txt[]
+\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.
+
+
+== 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.
+
+Implicit is the registered number of an extension, which is used to create a
+range of unused values offset against a global extension base value.
+Individual enumerant values are calculated as offsets in that range.
+Values are calculated 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
+`readme.pdf` specifying the format of `vk.xml`, and extension authors can
+also refer to existing extensions for examples.
+
+If an extension becomes part of core, the enumerant values should remain the
+same as they were in the original extension, in order to maintain binary
+compatibility with existing applications.
+
+
+[[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"/>
+----
+
+[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 31, 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_KHR),
+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
+    link:html/vkspec.html#_compatibility_guarantees_informative[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 attr: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 implementions 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[]
+----
diff --git a/registry/vulkan/style/markup.txt b/registry/vulkan/style/markup.txt
new file mode 100644
index 0000000..741537c
--- /dev/null
+++ b/registry/vulkan/style/markup.txt
@@ -0,0 +1,1163 @@
+// Copyright 2015-2021 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/appendix-V-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-2021 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.
+
+
+[[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-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>>
+| Example       | `====`        | For <<markup-informative-notes,Notes>>
+| Passthrough   | `pass:[++++]` | For some kinds of <<writing-math,math markup>>
+| Comment       | `////`        |
+| Listing       | `----`        | For source code listings
+| Listing (alt.)| `pass:[~~~~]` | For source code listings <<markup-blocks-source, imbedded in Open blocks>>
+| Sidebar       | `pass:[****]` | For <<markup-implementors-notes,implementor's notes>>
+| Table         | `\|====`      | For <<markup-sample-section-tables,tables>>
+| Quote         | `pass:[____]` |
+| Literal       | `pass:[....]` |
+|====
+
+
+[[markup-blocks-source]]
+==== Listing Blocks Imbedded in Open Blocks
+
+If you need to include a `source` block that would normally use `----`
+delimiters inside an open block delimiting a reference page, use
+`pass:[~~~~]` delimiters around the inner source block instead.
+This avoids confusing some of the toolchain which makes assumptions about
+block delimiters not being nested, such as the VUID assignment script.
+Tildes are not standard asciidoctor markup, but are supported by a custom
+Ruby extension.
+
+
+[[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-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's 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's 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.txt`, 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's 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, of type defined by an external API. Not
+                  validated.
+                  Examples: basetype{cl}VkBool32 -> basetype:VkBool32,
+                  basetype{cl}AHardwareBuffer -> basetype:AHardwareBuffer,
+                  basetype{cl}VkDeviceSize -> basetype:VkDeviceSize.
+| 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.
+
+                  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/*/*txt`.
+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's
+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  |
+| 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.
+| command       | function
+                | Except when talking about function pointers returned by
+                  ftext:vkGet*ProcAddr commands.
+| 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
+| member        | field          |
+| runtime       | run time / run-time | Arbitrary choice for consistency
+| 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.
+| 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|
+| begins / begun      | starts / started | For ftext:vkBegin* - also see "`finish`"
+| finishes / finished | ends / ended     | For ftext:vkEnd* - also see "`begins`"
+| 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.
+| component     | channel        | Specifically this refers to color channels/components
+|====
+
+[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/registry/vulkan/style/misc.txt b/registry/vulkan/style/misc.txt
new file mode 100644
index 0000000..adf1be5
--- /dev/null
+++ b/registry/vulkan/style/misc.txt
@@ -0,0 +1,115 @@
+// Copyright 2015-2021 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 re-use 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 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.
+
+
+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/registry/vulkan/style/naming.txt b/registry/vulkan/style/naming.txt
new file mode 100644
index 0000000..9433afc
--- /dev/null
+++ b/registry/vulkan/style/naming.txt
@@ -0,0 +1,640 @@
+// Copyright 2015-2021 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 that describes 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 that describes 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 that describes 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 abbrevations 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.
diff --git a/registry/vulkan/style/vuid.txt b/registry/vulkan/style/vuid.txt
new file mode 100644
index 0000000..2dd1b9c
--- /dev/null
+++ b/registry/vulkan/style/vuid.txt
@@ -0,0 +1,144 @@
+// Copyright 2015-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+[appendix]
+[[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.
+
+
+[[appendix-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.
+====
+
+
+[[appendix-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`) which contains the canonical
+Specification source, invoke the following command:
+
+[source,sh]
+----
+python3 reflow.py -overwrite -noflow -tagvu chapters/*.txt chapters/*/*.txt
+----
+
+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`, which contains 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/registry/vulkan/style/writing.txt b/registry/vulkan/style/writing.txt
new file mode 100644
index 0000000..a346927
--- /dev/null
+++ b/registry/vulkan/style/writing.txt
@@ -0,0 +1,1296 @@
+// Copyright 2015-2021 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.
+
+
+=== 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 ambigious 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.`"
+
+
+=== 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
+|====
+
+
+[[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 noted exception in the table below, do not arbitrarily cram
+terms together.
+
+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
+| 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    |
+3+h| Exceptions
+| mipmap        | mip map        | Exception for historical reasons
+| pname:pNext chain
+                | pname:pNext-chain +
+                  pname:pNext extension chain
+                                 |
+| general-purpose
+                | general purpose| When used as an adjective
+| implementation-dependent
+                | implementation dependent
+                                 | When used as an adjective
+| swapchain     | swap chain     | Exception due to heavy use in WSI extensions
+| happen-before +
+  happen-after  | happen before +
+                  happen after   | As used in concurrent languages such as
+                                   C++11, Java and OpenCL C.
+|====
+
+==== 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 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.txt`.
+
+.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've had to make are:
+
+.LaTeX math replacements for KaTeX compatibility
+[width="70%",options="header",cols="20%,20%,60%"]
+|====
+| Replace              | With              | Comments
+| `\begin{equation}`   | _nothing_         | Unnecessary in blocks. Should not be used for inline.
+| `\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.txt[]
+
+[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
+// http://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.txt[]
+~~~~
+
+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.txt[]
+--
+
+[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.txt[]
+{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.txt[]
+
+[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.txt[]
+~~~~
+====
+
+  * pname:sType is the type of 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 the type of 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 protected memory 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.txt[]
+--
+
+[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 protected memory 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.txt[]
+{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.txt[]
+
+[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.txt[]
+~~~~
+====
+
+  * 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.
+
+Do not use nested bullet lists or other writing structure where valid usage
+statements are not self-contained.
+This would make it impossible to extract semantically meaningful
+descriptions for each assigned <<appendix-vuid, Valid Usage ID Tag>>.
+
+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 valid usage statements apply only when specific extensions and/or core
+API versions are enabled at runtime, surround those statements in their
+entirety with appropriate asciidoctor conditionals.
+Never use asciidoctor conditionals _inside_ a valid usage statement.
+
+Explicit valid usage statements must be assigned Valid Usage ID tags before
+publication.
+This process is described in the <<appendix-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.txt`), 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.txt[]
+\include::\{chapters}/commonvalidity/draw_vertex_binding.txt[]
+  * [[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.txt[]
+
+\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/registry/vulkan/styleguide.txt b/registry/vulkan/styleguide.txt
new file mode 100644
index 0000000..3c1a8dd
--- /dev/null
+++ b/registry/vulkan/styleguide.txt
@@ -0,0 +1,381 @@
+// Copyright 2014-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+= 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"
+:cl: &#x3a;
+
+// Various special / math symbols. This is easier to edit with than Unicode.
+include::{config}/attribs.txt[]
+
+// Where the current Asciidoctor documentation is found.
+:docguide: https://docs.asciidoctor.org/asciidoc/latest
+
+:leveloffset: 1
+
+<<<<
+
+include::{config}/copyright-ccby.txt[]
+
+<<<<
+
+[[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-spec]]
+Khronos Vulkan Working Group.
+_Vulkan 1.1.116 - A Specification_ (July 20, 2019).
+https://www.khronos.org/registry/vulkan/ .
+
+Version 1.1.116 is the latest patch release of the Vulkan API Specification
+as of the time this reference was created, but that 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.
+
+
+// Chapters of the text are included below
+
+include::style/naming.txt[]
+
+include::style/extensions.txt[]
+
+include::style/markup.txt[]
+
+include::style/writing.txt[]
+
+include::style/misc.txt[]
+
+// Appendices are included below
+include::style/vuid.txt[]
+
+
+= Revision History
+
+* 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 incompatibilies (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 elments 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're 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.
diff --git a/registry/vulkan/tests/README.adoc b/registry/vulkan/tests/README.adoc
new file mode 100644
index 0000000..9d52d4d
--- /dev/null
+++ b/registry/vulkan/tests/README.adoc
@@ -0,0 +1,22 @@
+// Copyright 2017-2021 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/registry/vulkan/tests/X11/Xlib.h b/registry/vulkan/tests/X11/Xlib.h
new file mode 100644
index 0000000..c3800e9
--- /dev/null
+++ b/registry/vulkan/tests/X11/Xlib.h
@@ -0,0 +1,14 @@
+// Copyright 2019-2021 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/registry/vulkan/tests/X11/extensions/Xrandr.h b/registry/vulkan/tests/X11/extensions/Xrandr.h
new file mode 100644
index 0000000..fc0d7c2
--- /dev/null
+++ b/registry/vulkan/tests/X11/extensions/Xrandr.h
@@ -0,0 +1,12 @@
+// Copyright 2019-2021 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/registry/vulkan/tests/ggp_c/vulkan_types.h b/registry/vulkan/tests/ggp_c/vulkan_types.h
new file mode 100644
index 0000000..ae922a9
--- /dev/null
+++ b/registry/vulkan/tests/ggp_c/vulkan_types.h
@@ -0,0 +1,8 @@
+// Copyright 2019-2021 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/registry/vulkan/tests/hpptest.cpp b/registry/vulkan/tests/hpptest.cpp
new file mode 100644
index 0000000..fd6acdd
--- /dev/null
+++ b/registry/vulkan/tests/hpptest.cpp
@@ -0,0 +1,11 @@
+// Copyright 2019-2021 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/registry/vulkan/tests/htest.c b/registry/vulkan/tests/htest.c
new file mode 100644
index 0000000..aba14d8
--- /dev/null
+++ b/registry/vulkan/tests/htest.c
@@ -0,0 +1,71 @@
+//% gcc -c -Wall -I. -I../include htest.c
+
+// Copyright 2019-2021 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>
+
+// Sanity 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) {
+    const VkInstanceCreateInfo instance_info = {
+        .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+        .pNext = NULL,
+        .flags = 0,
+        .pApplicationInfo = NULL,
+        .enabledLayerCount = 0,
+        .ppEnabledLayerNames = NULL,
+        .enabledExtensionCount = 0,
+        .ppEnabledExtensionNames = NULL,
+    };
+    VkInstance instance;
+    vkCreateInstance(&instance_info, NULL, &instance);
+    vkDestroyInstance(instance, NULL);
+
+    // Test XLIB_XRANDR_EXT platform, which doesn't define a new type
+    VkResult xrandr_result = vkAcquireXlibDisplayEXT((VkPhysicalDevice)0, (Display *)NULL, (VkDisplayKHR)0);
+
+    (void)xrandr_result;
+    return 0;
+}
diff --git a/registry/vulkan/tests/screen/screen.h b/registry/vulkan/tests/screen/screen.h
new file mode 100644
index 0000000..4f73f08
--- /dev/null
+++ b/registry/vulkan/tests/screen/screen.h
@@ -0,0 +1,8 @@
+// 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;
diff --git a/registry/vulkan/tests/wayland-client.h b/registry/vulkan/tests/wayland-client.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/registry/vulkan/tests/wayland-client.h
diff --git a/registry/vulkan/tests/windows.h b/registry/vulkan/tests/windows.h
new file mode 100644
index 0000000..8e9e484
--- /dev/null
+++ b/registry/vulkan/tests/windows.h
@@ -0,0 +1,13 @@
+// Copyright 2019-2021 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/registry/vulkan/tests/xcb/xcb.h b/registry/vulkan/tests/xcb/xcb.h
new file mode 100644
index 0000000..2438f18
--- /dev/null
+++ b/registry/vulkan/tests/xcb/xcb.h
@@ -0,0 +1,9 @@
+// Copyright 2019-2021 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/registry/vulkan/tests/zircon/types.h b/registry/vulkan/tests/zircon/types.h
new file mode 100644
index 0000000..5ad096d
--- /dev/null
+++ b/registry/vulkan/tests/zircon/types.h
@@ -0,0 +1,7 @@
+// Copyright 2019-2021 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/registry/vulkan/update_valid_usage_ids.sh b/registry/vulkan/update_valid_usage_ids.sh
new file mode 100755
index 0000000..524bcb3
--- /dev/null
+++ b/registry/vulkan/update_valid_usage_ids.sh
@@ -0,0 +1,11 @@
+# Copyright 2018-2021 The Khronos Group, Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# This script updates the valid usage IDs in the specification
+# AsciiDoctor files.  If a valid usage entry already contains
+# an ID, it skips that entry.  If it does not contain an ID,
+# it will generate a new one.
+
+python3 reflow.py -overwrite -noflow -tagvu
+
diff --git a/registry/vulkan/vkspec.txt b/registry/vulkan/vkspec.txt
new file mode 100644
index 0000000..3cc3c88
--- /dev/null
+++ b/registry/vulkan/vkspec.txt
@@ -0,0 +1,212 @@
+// Copyright 2014-2021 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+// :regtitle: is explained in
+// http://discuss.asciidoctor.org/How-to-add-markup-to-author-information-in-document-title-td6488.html
+= Vulkan^®^ {revnumber} - A Specification {apititle}
+:regtitle: pass:q,r[^®^]
+The Khronos{regtitle} Vulkan Working Group
+:data-uri:
+:icons: font
+:toc2:
+:toclevels: 2
+:numbered:
+:source-highlighter: rouge
+:rouge-style: github
+
+// Various special / math symbols. This is easier to edit with than Unicode.
+include::config/attribs.txt[]
+
+// Table of contents is inserted here
+toc::[]
+
+:leveloffset: 1
+
+<<<<
+
+[[preamble]]
+= Preamble
+
+include::copyright-spec.txt[]
+
+:test: 0
+ifeval::["{test}"=="1"]
+
+// Include or insert trivial test markup here, to bypass building full spec
+// include::chapters/textest.txt[]
+
+include::chapters/introduction.txt[]
+
+endif::[]
+
+ifeval::["{test}"!="1"]
+include::chapters/introduction.txt[]
+
+include::chapters/fundamentals.txt[]
+
+include::chapters/initialization.txt[]
+
+include::chapters/devsandqueues.txt[]
+
+include::chapters/cmdbuffers.txt[]
+
+include::chapters/synchronization.txt[]
+
+include::chapters/renderpass.txt[]
+
+include::chapters/shaders.txt[]
+
+include::chapters/pipelines.txt[]
+
+include::chapters/memory.txt[]
+
+include::chapters/resources.txt[]
+
+include::chapters/samplers.txt[]
+
+include::chapters/descriptorsets.txt[]
+
+include::chapters/interfaces.txt[]
+
+include::chapters/textures.txt[]
+
+ifdef::VK_EXT_fragment_density_map[]
+include::chapters/fragmentdensitymapops.txt[]
+endif::VK_EXT_fragment_density_map[]
+
+include::chapters/queries.txt[]
+
+// Transfer operations
+include::chapters/clears.txt[]
+
+include::chapters/copies.txt[]
+
+// Graphics Operations
+include::chapters/drawing.txt[]
+
+include::chapters/fxvertex.txt[]
+
+include::chapters/tessellation.txt[]
+
+include::chapters/geometry.txt[]
+
+ifdef::VK_NV_mesh_shader[]
+include::chapters/VK_NV_mesh_shader/mesh.txt[]
+endif::VK_NV_mesh_shader[]
+
+include::chapters/vertexpostproc.txt[]
+
+include::chapters/primsrast.txt[]
+
+include::chapters/fragops.txt[]
+
+include::chapters/framebuffer.txt[]
+
+// Compute
+include::chapters/dispatch.txt[]
+
+// Device Generated Commands
+ifdef::VK_NV_device_generated_commands[]
+include::chapters/VK_NV_device_generated_commands/generatedcommands.txt[]
+endif::VK_NV_device_generated_commands[]
+
+// Sparse
+include::chapters/sparsemem.txt[]
+
+ifdef::VK_KHR_surface[]
+include::chapters/VK_KHR_surface/wsi.txt[]
+endif::VK_KHR_surface[]
+
+// Deferred host ops
+ifdef::VK_KHR_deferred_host_operations[]
+include::chapters/VK_KHR_deferred_host_operations/deferred_host_operations.txt[]
+endif::VK_KHR_deferred_host_operations[]
+
+// Private data
+ifdef::VK_EXT_private_data[]
+include::chapters/VK_EXT_private_data.txt[]
+endif::VK_EXT_private_data[]
+
+// Acceleration structures
+ifdef::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+include::chapters/accelstructures.txt[]
+endif::VK_NV_ray_tracing,VK_KHR_acceleration_structure[]
+
+// Ray traversal
+ifdef::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline,VK_KHR_ray_query[]
+include::chapters/raytraversal.txt[]
+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.txt[]
+endif::VK_NV_ray_tracing,VK_KHR_ray_tracing_pipeline[]
+
+// Vulkan Video extensions
+ifdef::VK_KHR_video_queue[]
+include::chapters/video_extensions.txt[]
+endif::VK_KHR_video_queue[]
+
+ifdef::VK_KHR_video_decode_queue[]
+include::chapters/video_decode_extensions.txt[]
+endif::VK_KHR_video_decode_queue[]
+
+ifdef::VK_EXT_video_decode_h264[]
+include::chapters/video_decode_h264_extensions.txt[]
+endif::VK_EXT_video_decode_h264[]
+
+ifdef::VK_EXT_video_decode_h265[]
+include::chapters/video_decode_h265_extensions.txt[]
+endif::VK_EXT_video_decode_h265[]
+
+ifdef::VK_KHR_video_encode_queue[]
+include::chapters/video_encode_extensions.txt[]
+endif::VK_KHR_video_encode_queue[]
+
+ifdef::VK_EXT_video_encode_h264[]
+include::chapters/video_encode_h264_extensions.txt[]
+endif::VK_EXT_video_encode_h264[]
+
+ifdef::VK_EXT_video_encode_h265[]
+include::chapters/video_encode_h265_extensions.txt[]
+endif::VK_EXT_video_encode_h265[]
+
+// Sort of an appendix
+include::chapters/extensions.txt[]
+
+include::chapters/features.txt[]
+
+include::chapters/limits.txt[]
+
+include::chapters/formats.txt[]
+
+include::chapters/capabilities.txt[]
+
+include::chapters/debugging.txt[]
+
+// Appendices
+:numbered!:
+
+include::appendices/spirvenv.txt[]
+
+ifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+include::appendices/memorymodel.txt[]
+endif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
+
+include::appendices/compressedtex.txt[]
+
+include::appendices/versions.txt[]
+
+// Extension appendices are now included from extensions.txt
+include::appendices/extensions.txt[]
+
+include::appendices/boilerplate.txt[]
+
+include::appendices/invariance.txt[]
+
+include::appendices/glossary.txt[]
+
+include::appendices/credits.txt[]
+
+endif::[]
diff --git a/registry/vulkan/xml/Makefile b/registry/vulkan/xml/Makefile
new file mode 100644
index 0000000..d786bf7
--- /dev/null
+++ b/registry/vulkan/xml/Makefile
@@ -0,0 +1,158 @@
+# Copyright 2013-2021 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
+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
+SRC	    = ../src
+VULKAN_VIDEO_CODECS_STD_H = $(INCLUDE)/vk_video
+
+# Static files needed for a complete set of headers, cached in the
+# repository
+STATIC_HEADERS = $(VULKAN)/vulkan.h $(VULKAN)/vk_platform.h \
+                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codecs_common.h \
+                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std.h \
+                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_decode.h \
+                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_encode.h \
+                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std.h \
+                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_decode.h \
+                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_encode.h
+# Where static headers are stored
+STATIC	                         = ../include/vulkan
+STATIC_VULKAN_VIDEO_CODECS_STD_H = ../include/vk_video
+
+# 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
+HEADERS     = $(VULKAN)/vulkan_core.h $(PLATFORM_HEADERS)
+
+default install: $(HEADERS) $(STATIC_HEADERS)
+
+$(VULKAN)/vulkan.h: $(STATIC)/vulkan.h
+	$(QUIET)$(MKDIR) $(VULKAN)
+	$(CP) $? $@
+
+$(VULKAN)/vk_platform.h: $(STATIC)/vk_platform.h
+	$(QUIET)$(MKDIR) $(VULKAN)
+	$(CP) $? $@
+
+$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codecs_common.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codecs_common.h
+	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
+	$(CP) $? $@
+
+$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std.h
+	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
+	$(CP) $? $@
+
+$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_decode.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_decode.h
+	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
+	$(CP) $? $@
+
+$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_encode.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_encode.h
+	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
+	$(CP) $? $@
+
+$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std.h
+	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
+	$(CP) $? $@
+
+$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_decode.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_decode.h
+	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
+	$(CP) $? $@
+
+$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_encode.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_encode.h
+	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
+	$(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): $(VKH_DEPENDS)
+	$(MKDIR) $(VULKAN)
+	$(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(VKXML) \
+	    -o $(VULKAN) $(notdir $@)
+
+platform: $(PLATFORM_HEADERS)
+
+# Verify registry XML file against the schema
+validate:
+	jing -c registry.rnc $(VKXML)
+	$(PYTHON) $(GENSCRIPT) -validate -registry $(VKXML)
+
+# Test that vulkan_core.h compiles
+
+# Platforms to test
+TESTDEFS = -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XLIB_KHR
+
+test: $(HEADERS) $(STATIC_HEADERS)
+	gcc -Wall -std=c99 -c -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
+	gcc -Wall -std=c11 -c -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
+	g++ -Wall -c -std=c++98 -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
+	g++ -Wall -c -std=c++11 -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
+	$(RM) $(TESTS)/test.o
+
+################################################
+
+# Files to clean up
+PYDIRT = diag.txt dumpReg.txt errwarn.txt *.pyc regdump.txt
+DIRT = $(PYDIRT) ERRS \#*
+
+# Clean intermediate files
+clean_dirt:
+	-$(RM) $(DIRT)
+
+# Clean generated targets and intermediates
+clean clobber: clean_dirt
+	-$(RMRF) $(INCLUDE)
diff --git a/registry/vulkan/xml/README.adoc b/registry/vulkan/xml/README.adoc
new file mode 100644
index 0000000..1fee04d
--- /dev/null
+++ b/registry/vulkan/xml/README.adoc
@@ -0,0 +1,184 @@
+// Copyright 2014-2021 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_core.h`, 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 install test`
+  ** This generates headers in `../gen/include/vulkan` including
+     `vulkan_core.h` and a set of platform-dependent headers
+     `vulkan_<platform>.h`.
+  * `(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.
+
+
+[[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.
+
+
+[[targets]]
+== Makefile Targets
+
+  * `install` (default target) - regenerate header files in
+    `../include/vulkan`.
+  * `test` - make sure `../include/vulkan/vulkan_core.h` compiles.
+    *Important!* Can also be used to test if platform headers compile by
+    specifying `make TESTDEFS=-DVK_USE_PLATFORM_<PLATFORM>_<AUTHORID> test`.
+  * `validate` - validate `vk.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 `vulkan_core.h` and test that it compiles:
+
+[source,sh]
+----
+# Regenerate header from XML
+python3 ../scripts/genvk.py -o ../include/vulkan vulkan_core.h
+# Verify that the resulting header compiles
+gcc -Wall -c -I../include testcore.c
+g++ -Wall -c -std=c++98 -I../include testcore.c
+g++ -Wall -c -std=c++11 -I../include testcore.c
+----
+
+
+[[history]]
+== Revision History
+
+  * 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 -
+    Don't 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 `master` 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/registry/vulkan/xml/generate-core-block.rb b/registry/vulkan/xml/generate-core-block.rb
new file mode 100644
index 0000000..3a97e30
--- /dev/null
+++ b/registry/vulkan/xml/generate-core-block.rb
@@ -0,0 +1,125 @@
+# Copyright 2018-2021 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 + '/*.txt'].each do |name|
+    # Skip renaming in the extension appendix, since this should preserve the old names.
+    if (name != ('../appendices/' + extension_name + '.txt'))
+      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/registry/vulkan/xml/registry.rnc b/registry/vulkan/xml/registry.rnc
new file mode 100644
index 0000000..ad645c0
--- /dev/null
+++ b/registry/vulkan/xml/registry.rnc
@@ -0,0 +1,610 @@
+# Copyright 2013-2021 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Relax NG schema for Khronos Vulkan API Registry XML
+#
+# See https://www.khronos.org/vulkan/
+#
+# This definition is subject to change (mostly in the form of additions)
+
+namespace xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
+
+# Toplevel is a <registry> tag.
+# May be led by an optional <comment> tag containing e.g. copyrights.
+start = element registry {
+    (
+        element comment { text } ? |
+        Platforms         * |
+        Tags              * |
+        Types             * |
+        Enums             * |
+        Commands          * |
+        Feature           * |
+        Extensions        * |
+        SpirvExtensions   * |
+        SpirvCapabilities *
+    ) *
+}
+
+# <platforms> defines a group of platform names
+Platforms = element platforms {
+    Comment ? ,
+    Platform *
+}
+
+# <platform> defines a single platform name.
+#   name - string name of the platform, used as part of extension names
+#   protect - preprocessor symbol to include platform headers from <vulkan.h>
+#   comment - platform description
+Platform = element platform {
+    attribute name { text } ,
+    attribute protect { text } ,
+    Comment
+}
+
+# <tags> defines a group of author tags
+Tags = element tags {
+    Comment ? ,
+    Tag *
+}
+
+# <tag> defines a single author tag.
+#   name - name of the tag
+#   author - name of the author (usually a company or project name)
+#   contact - contact responsible for the tag (name and contact information)
+Tag = element tag {
+    attribute name { text } ,
+    attribute author { text } ,
+    attribute contact { text }
+}
+
+# <types> defines a group of types
+Types = element types {
+    Comment ? ,
+    (
+        Type |
+        element comment { text }
+    ) *
+}
+
+# <type> defines a single type. It is usually a C typedef but
+# may contain arbitrary C code.
+#   name - name of this type, if not present in the <name> tag
+#   api - matches a <feature> api attribute, if present
+#   alias - name of a type this type aliases
+#   requires - name of another type definition required by this one
+#   bitvalues - for a *Flags type, name of an enum definition that
+#       defines the valid values for parameters of that type
+#   name - name of the type being defined
+#   category - if present, 'enum' indicates a matching <enums>
+#       block to generate an enumerated type for, and 'struct'
+#       causes special interpretation of the contents of the type
+#       tag including ... TBD ...
+#       Other allowed values are 'include', 'define', 'handle' and 'bitmask',
+#       which don't change syntactic interpretation but allow organization in
+#       the generated header.
+#   parent - only applicable if category is 'handle'. Notes another type with
+#       the 'handle' category that acts as a parent object for this type.
+#   returnedonly - only applicable if category is 'struct'. Notes that this
+#       struct is going to be filled in by the API, rather than an application
+#       filling it out and passing it to the API.
+#   structextends - only applicable if category is 'struct'. Lists parent
+#       structures which this structure may extend via the pNext chain
+#       of the parent.
+#       When present it suppresses generation of automatic validity for the
+#       pNext member of that structure, and instead the structure is added
+#       to pNext chain validity for the parent structures it extends.
+#   allowduplicate - only applicable if category is 'struct'. pNext can include
+#       multiple structures of this type.
+#   objtypeenum - name of VK_OBJECT_TYPE_* API enumerant which corresponds
+#       to this type. Currently only specified for category="handle" types.
+#   comment - descriptive text with no semantic meaning
+# For types without a category, contents include
+#   <apientry /> - substitutes for an APIENTRY-style macro on output
+#   <name> - contains name of the type being defined
+#   <type> - contains name of types used to define this type. There
+#       may be multiple imbedded <type> tags
+# For types with category 'enum', contents should be empty
+# For types with category 'struct', contents should be one or more
+#   <member> - like <param> for a struct or union member
+#       len - if the member is an array, len may be one or more of the following
+#           things, separated by commas (one for each array indirection): another
+#           member of that struct, 'null-terminated' for a string, '1' to indicate it's
+#           just a pointer (used for nested pointers), or a latex equation (prefixed with
+#           'latexmath:')
+#       altlen - if len has latexmath equations, this contains equivalent C99
+#                expressions separated by commas.
+#       externsync - denotes that the member should be externally synchronized
+#           when accessed by Vulkan
+#       optional - whether this value can be omitted by providing NULL (for
+#           pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values)
+#       selector - for a union member, identifies a separate enum member that
+#           selects which of the union's members are valid
+#       selection - for a member of a union, identifies an enum value indicating the member is valid
+#       noautovalidity - tag stating that no automatic validity language should be generated
+#       values - comma-separated list of legal values, usually used only for sType enums
+#       limittype - only applicable for members of VkPhysicalDeviceProperties and
+#           VkPhysicalDeviceProperties2, their substrucutres, and extensions.
+#           Specifies the type of a device limit.
+#           Valid values: 'min', 'max', 'bitmask', 'range', 'struct', 'noauto'
+#       objecttype - only applicable for members representing a handle as
+#           a uint64_t value. Specifies the name of another member which is
+#           a VkObjectType or VkDebugReportObjectTypeEXT value specifying
+#           the type of object the handle references.
+#   <comment> - containing arbitrary text (unused)
+#
+# *** There's a problem here: I'm not sure how to represent the <type>
+# syntax where it may contain arbitrarily interleaved text, <type>, and
+# <enum> child tags. This allows only the syntax
+#   text <type>name</type> text <enum>name</enum> text
+# where <type> and <enum> are both optional and occur in the specified
+# order, which might eventually be a problem.
+Type = element type {
+    attribute api { text } ? ,
+    attribute alias { text } ? ,
+    attribute requires { text } ? ,
+    attribute bitvalues { text } ? ,
+    attribute name { TypeName } ? ,
+    attribute category { text } ? ,
+    attribute parent { TypeName } ? ,
+    attribute returnedonly { text } ? ,
+    attribute structextends { text } ? ,
+    attribute allowduplicate { text } ? ,
+    attribute objtypeenum { text } ? ,
+    Comment ? ,
+    (
+        (
+            ( text ,
+              element type { text } *
+            ) * ,
+            element apientry { text } ? ,
+            ( text ,
+              element type { text } *
+            ) * ,
+            element name { TypeName } ? ,
+            ( text ,
+              element type { text } *
+            ) *
+        ) |
+        (
+            element member {
+                attribute len { text } ? ,
+                attribute altlen { text } ? ,
+                attribute externsync { text } ? ,
+                attribute optional { text } ? ,
+                attribute selector { text } ? ,
+                attribute selection { EnumName } ? ,
+                attribute noautovalidity { text } ? ,
+                attribute values { text } ? ,
+                attribute limittype { text } ? ,
+                attribute objecttype { text } ? ,
+                mixed {
+                    element type { TypeName } ? ,
+                    element name { text } ? ,
+                    element enum { EnumName } ? ,
+                    element comment { text } ?
+                }
+            } |
+            element comment { text }
+        ) *
+    )
+}
+
+# <enums> defines a group of enumerants
+#   name - identifies a type name associated with this group. Should
+#       match a <type> name to trigger generation of the type.
+#   start, end - beginning and end of a numeric range
+#   vendor - owner of the numeric range
+#   type - 'enum' or 'bitmask', if present
+#   bitwidth - bit width of the enum value type.
+#   comment - descriptive text with no semantic meaning
+Enums = element enums {
+    attribute name { text } ? ,
+    attribute type { text } ? ,
+    attribute start { Integer } ? ,
+    attribute end { Integer } ? ,
+    attribute bitwidth { Integer } ? ,
+    Vendor ? ,
+    Comment ? ,
+    (
+        Enum |
+        Unused |
+        element comment { text}
+    ) *
+}
+
+# <enum> defines or references a single enumerant. There are two places it
+# can be used: in an <enums> block, providing a global definition which
+# may later be required by a feature or extension; or in a feature or
+# extension, defining an enumerant specific to that feature. The second
+# form has more possible attributes. Some combinations of attributes are
+# nonsensical in on or the other place, but these are not detected by the
+# validator.
+#
+# Ways to specify the enumerant value:
+#   value - integer (including hex) value of the enumerant
+#   bitpos - integer bit position of the enumerant in a bitmask
+#   [extnumber], offset, [dir] - integer extension number specifying a
+#       base block value (inherited from surrounding <extension> if
+#       not specified); integer offset in that block; and direction
+#       of offset ('-' for negative, positive if not specified).
+#   alias - name of another enum this is an alias of
+#
+# value and bitpos allow, and extnumber/offset/dir require:
+#   extends - type name of the enumerant being extended
+#
+# Other attributes:
+#   api - matches a <feature> api attribute, if present
+#   type - 'uint32_t', 'uint64_t', or 'float', if present. There are
+#       certain conditions under which the tag must be present, or absent,
+#       but they are context-dependent and difficult to express in the
+#       RNC syntax.
+#   name - enumerant name
+#   alias - another enumerant this is semantically identical to
+#   protect - additional #ifdef symbol to place around the enum
+#   comment - descriptive text with no semantic meaning
+Enum = element enum {
+    (
+      (
+        (
+          attribute value { Integer } &
+          attribute extends { TypeName } ?
+        ) |
+        (
+          attribute bitpos { Integer } &
+          attribute extends { TypeName } ?
+        ) |
+        (
+          attribute extnumber { Integer } ? &
+          attribute offset { Integer } &
+          attribute dir { text } ? &
+          attribute extends { TypeName }
+        ) |
+        (
+          attribute extends { TypeName } ? &
+          attribute alias { TypeName }
+        )
+      ) ? &
+      attribute protect { text } ? &
+      attribute api { text } ? &
+      attribute type { TypeSuffix } ? &
+      attribute name { text } &
+      Comment ?
+    )
+}
+
+# <unused> defines a range of enumerants not currently being used
+#   start, end - beginning and end of an unused numeric range
+#   vendor - unused
+#   comment - descriptive text with no semantic meaning
+Unused = element unused {
+    attribute start { Integer } ,
+    attribute end { Integer } ? ,
+    Vendor ? ,
+    Comment ?
+}
+
+# <commands> defines a group of commands
+Commands = element commands {
+    Comment ? ,
+    Command *
+}
+
+# <command> defines a single command
+#
+# There are two forms of the tag.
+#
+# The first only has 'name' and 'alias' attributes, and no contents.
+# It defines a command alias.
+#
+# The second fully defines a command, and has the following structure:
+# The possible attributes are not described in this comment block yet, but
+# are in readme.pdf. The "prefix" and "suffix" attributes are currently
+# present only in the OpenCL XML registry, where they are currently unused.
+#
+#   <proto> is the C function prototype, including the return type
+#   <param> are function parameters, in order
+#     len - if the member is an array, len may be one or more of the following
+#           things, separated by commas (one for each array indirection): another
+#           member of that struct, 'null-terminated' for a string, '1' to indicate it's
+#           just a pointer (used for nested pointers), or a latex equation (prefixed with
+#           'latexmath:')
+#     altlen - if len has latexmath equations, this contains equivalent C99
+#              expressions separated by commas.
+#     externsync - denotes that the member should be externally synchronized
+#         when accessed by Vulkan
+#     optional - whether this value can be omitted by providing NULL (for
+#         pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values)
+#     selector - for a union parameter, identifies a separate enum parameter that
+#         selects which of the union's members are valid
+#     noautovalidity - tag stating that no automatic validity language should be generated
+#     objecttype - only applicable for parameters representing a handle as
+#         a uint64_t value. Specifies the name of another parameter which is
+#         a VkObjectType or VkDebugReportObjectTypeEXT value specifying
+#         the type of object the handle references.
+#     <type> is a <type> name, if present
+#     <name> is the function / parameter name, if present (normally should
+#         be, except for void parameters).
+# The textual contents of <proto> and <param> should be legal C
+# for those parts of a function declaration.
+#   <alias> - denotes function aliasing, if present
+#     name - name of aliased function
+#   <description> - unused text
+#   <implicitexternsyncparams> are spec-language descriptions of
+#       objects that are not parameters of the command, but
+#       are related to them and also require external synchronization.
+Command = element command {
+    (   attribute name { text } ,
+        attribute alias { text } ) |
+    (
+        attribute queues { text } ? ,
+        attribute successcodes { text } ? ,
+        attribute errorcodes { text } ? ,
+        attribute renderpass { text } ? ,
+        attribute cmdbufferlevel { text } ? ,
+        attribute prefix { text } ? ,
+        attribute suffix { text } ? ,
+        Comment ? ,
+        element proto {
+            mixed {
+                element type { TypeName } ? ,
+                element name { text }
+            }
+        } ,
+        element param {
+            attribute len { text } ? ,
+            attribute altlen { text } ? ,
+            attribute externsync { text } ? ,
+            attribute optional { text } ? ,
+            attribute selector { text } ? ,
+            attribute noautovalidity { text } ? ,
+            attribute objecttype { text } ? ,
+            mixed {
+                element type { TypeName } ? ,
+                element name { text } ?
+            }
+        } * ,
+        (
+            element alias {
+                Name
+            } ? &
+            element description {
+                text
+            } ? &
+            element implicitexternsyncparams {
+                element param { text } *
+            } ?
+        )
+    )
+}
+
+# Each <feature> defines the interface of an API version (e.g. OpenGL 1.2)
+#   api - API tag (e.g. 'gl', 'gles2', etc. - used internally, not
+#     necessarily an actual API name
+#   name - version name (C preprocessor name, e.g. GL_VERSION_4_2)
+#   number - version number, e.g. 4.2
+#   protect - additional #ifdef symbol to place around the feature
+#   sortorder - order relative to other features, default 0
+#   <require> / <remove> contains features to require or remove in
+#                        this version
+#     profile - only require/remove when generated profile matches
+#     comment - descriptive text with no semantic meaning
+Feature = element feature {
+    attribute api { text } ,
+    Name ,
+    attribute number { xsd:float } ,
+    attribute protect { text } ? ,
+    attribute sortorder { xsd:integer } ?,
+    Comment ? ,
+    (
+        element require {
+            ProfileName ? ,
+            ExtensionName ? ,
+            Comment ? ,
+            (
+                InterfaceElement |
+                element comment { text }
+            ) *
+        } |
+        element remove {
+            ProfileName ? ,
+            Comment ? ,
+            (
+                InterfaceElement |
+                element comment { text }
+            ) *
+        }
+    ) *
+}
+
+Extensions = element extensions {
+    Comment ? ,
+    Extension *
+}
+
+# Defines the interface of an API <extension>. Like a <feature>
+# tag, but with slightly different attributes:
+#   api - regexp pattern matching one or more API tags, indicating
+#     which APIs the extension is known to work with. The only
+#     syntax supported is <name>{|<name>}* and each name must
+#     exactly match an API being generated (implicit ^$ surrounding).
+#   name - extension name string
+#   number - extension number (positive integer, should be unique)
+#   sortorder - order relative to other extensions, default 0
+#   protect - C preprocessor symbol to conditionally define the interface
+#   platform - should be one of the platform names defined in the
+#     <platform> tag. Currently unused.
+#   author - name of the author (usually a company or project name)
+#   contact - contact responsible for the tag (name and contact information)
+#   type - 'device' or 'instance', if present
+#   requires - commas-separated list of extension names required by this
+#       extension
+#   requiresCore - core version of Vulkan required by the extension, e.g.
+#       "1.1". Defaults to "1.0".
+#   supported - profile name(s) supporting this extension, e.g. 'vulkan'
+#       or 'disabled' to never generate output.
+#   promotedto - Vulkan version or a name of an extension that this
+#       extension was promoted to; e.g. 'VK_VERSION_1_1', or
+#       'VK_KHR_draw_indirect_county'
+#   deprecatedby - Vulkan version or a name of an extension that deprecates
+#       this extension. It may be empty string.
+#       e.g. 'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or ''
+#   obsoletedby - Vulkan version or a name of an extension that obsoletes
+#       this extension. It may be empty string.
+#       e.g. 'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or ''
+#   provisional - 'true' if this extension is released provisionally
+#   specialuse - contains one or more tokens separated by commas, indicating
+#       a special purpose of the extension. Tokens may include 'cadsupport',
+#       'd3demulation', 'devtools', 'debugging', and 'glemulation'. Others
+#       may be added in the future.
+# In addition, <require> / <remove> tags also support an api attribute:
+#     api - only require/remove these features for the matching API.
+#       Not a regular expression.
+Extension = element extension {
+    Name ,
+    attribute number { Integer } ? ,
+    attribute sortorder { xsd:integer } ?,
+    attribute protect { text } ? ,
+    attribute platform { text } ? ,
+    attribute author { text } ? ,
+    attribute contact { text } ? ,
+    attribute type { text } ? ,
+    attribute requires { text } ? ,
+    attribute requiresCore { text } ? ,
+    attribute supported { StringGroup } ? ,
+    attribute promotedto { text } ? ,
+    attribute deprecatedby { text } ? ,
+    attribute obsoletedby { text } ? ,
+    attribute provisional { text } ? ,
+    attribute specialuse { text } ? ,
+    Comment ? ,
+    (
+        element require {
+            attribute api { text } ? ,
+            ProfileName ? ,
+            ExtensionName ? ,
+            FeatureName ? ,
+            Comment ? ,
+            (
+                InterfaceElement |
+                element comment { text }
+            ) *
+        } |
+        element remove {
+            attribute api { text } ? ,
+            ProfileName ? ,
+            Comment ? ,
+            (
+                InterfaceElement |
+                element comment { text }
+            ) *
+        }
+    ) *
+}
+
+# Each <spirvextension> define a SPIR-V extension that can be used in the API.
+# Each <spirvcapability> define a SPIR-V capability that can be used in the API.
+# Contains information to both generate table in spec as well as validation
+# what needs to be enabled be used in Vulkan
+SpirvExtensions = element spirvextensions {
+    Comment ? ,
+    SpirvExtension *
+}
+
+SpirvExtension = element spirvextension {
+    Name ,
+    Enable *
+}
+
+SpirvCapabilities = element spirvcapabilities {
+    Comment ? ,
+    SpirvCapability *
+}
+
+SpirvCapability = element spirvcapability {
+    Name ,
+    Enable *
+}
+
+# <enable> defines a way to enable the parent element in the API.
+# If anyone of the <enable> elements are valid then the parent element
+# can be used.
+#
+# There are four forms of the tag.
+#
+# The first only has the minimal version of Vulkan of the application
+#
+# The second only has a single Vulkan extension that must be enabled
+#
+# The third has a single Vulkan feature with the struct where it is from
+#
+# The forth has a property struct, the member field in it, and the value
+# that must be present
+#
+# To make scripting easier, each <enable> has a require attribute to map
+# to the asciidoctor conditional logic in the spec. For version and
+# extension attribute variations, there is no need for the require attribute
+# since it is a redundant 1:1 mapping.
+#
+# The 'alias' attribute is used in cases where the anchor link can't be
+# propertly resolved and needs a manual name to link to
+Enable = element enable {
+    (
+        attribute version { text } ) |
+    (
+        attribute extension { text } ) |
+    (
+        attribute struct { text },
+        attribute feature { text },
+        attribute requires { text },
+        attribute alias { text } ? ) |
+    (
+        attribute property { text },
+        attribute member { text },
+        attribute value { text },
+        attribute requires { text } ? )
+}
+
+# Contents of a <require> / <remove> tag, defining a group
+# of features to require or remove.
+#   <type> / <enum> / <command> all have attributes
+#     name - feature name which must match
+InterfaceElement =
+    element type {
+        Name ,
+        Comment ?
+    } |
+    Enum |
+    element command {
+        Name ,
+        Comment ?
+    }
+
+# Integers are allowed to be either decimal or C-hex (0x[0-9A-F]+), but
+# XML Schema types don't seem to support hex notation, so we use this
+# as a placeholder.
+Integer = text
+
+# EnumName is an compile-time constant name
+EnumName = text
+
+# TypeName is an argument/return value C type name
+TypeName = text
+
+# TypeSuffix is a C numeric type suffix, e.g. 'u' or 'ull'
+TypeSuffix = text
+
+# StringGroup is a regular expression with an implicit
+#   '^(' and ')$' bracketing it.
+StringGroup = text
+
+# Repeatedly used attributes
+ProfileName = attribute profile { text }
+ExtensionName = attribute extension { text }
+FeatureName = attribute feature { text }
+Vendor = attribute vendor { text }
+Comment = attribute comment { text }
+Name = attribute name { text }
+
+
diff --git a/registry/vulkan/xml/vk.xml b/registry/vulkan/xml/vk.xml
new file mode 100644
index 0000000..a16e039
--- /dev/null
+++ b/registry/vulkan/xml/vk.xml
@@ -0,0 +1,18288 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<registry>
+    <comment>
+Copyright 2015-2021 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="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="Michael Worcester @michaelworcester"/>
+        <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="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="Chad Versace @chadversary, Daniel Stone @fooishbar, David Airlie @airlied, Jason Ekstrand @jekstrand"/>
+        <tag name="INTEL"       author="Intel Corporation"             contact="Slawek Grajewski @sgrajewski"/>
+        <tag name="HUAWEI"      author="Huawei Technologies Co. Ltd."  contact="Hueilong Wang @wyvernathuawei, Yunpeng Zhu @yunxingzhu"/>
+        <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"/>
+        <tag name="JUICE"       author="Juice Technologies, Inc."      contact="David McCloskey @damcclos, Dean Beeler @canadacow"/>
+        <tag name="FB"          author="Facebook, Inc"                 contact="Artem Bolgar @artyom17"/>
+    </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"/>
+            <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 category="define">// 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; 22) | (((uint32_t)(minor)) &lt;&lt; 12) | ((uint32_t)(patch)))</type>
+        <type category="define">// 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; 22)</type>
+        <type category="define">// 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; 12) &amp; 0x3FFU)</type>
+        <type category="define">// 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; 29) | (((uint32_t)(major)) &lt;&lt; 22) | (((uint32_t)(minor)) &lt;&lt; 12) | ((uint32_t)(patch)))</type>
+        <type category="define">#define <name>VK_API_VERSION_VARIANT</name>(version) ((uint32_t)(version) &gt;&gt; 29)</type>
+        <type category="define">#define <name>VK_API_VERSION_MAJOR</name>(version) (((uint32_t)(version) &gt;&gt; 22) &amp; 0x7FU)</type>
+        <type category="define">#define <name>VK_API_VERSION_MINOR</name>(version) (((uint32_t)(version) &gt;&gt; 12) &amp; 0x3FFU)</type>
+        <type category="define">#define <name>VK_API_VERSION_PATCH</name>(version) ((uint32_t)(version) &amp; 0xFFFU)</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_VERSION</type>(1, 0, 0) // Patch version should always be set to 0</type>
+        <type category="define" requires="VK_MAKE_API_VERSION">// 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" requires="VK_MAKE_API_VERSION">// 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" requires="VK_MAKE_API_VERSION">// 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">// Version of this file
+#define <name>VK_HEADER_VERSION</name> 198</type>
+        <type 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, 2, VK_HEADER_VERSION)</type>
+
+        <type category="define">
+#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__)
+        #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 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 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">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                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineLayoutCreateFlags</name>;</type>
+        <type requires="VkPipelineCacheCreateFlagBits"    category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCacheCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineDepthStencilStateCreateFlags</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineDynamicStateCreateFlags</name>;</type>
+        <type                                             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                                             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 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 requires="VkPrivateDataSlotCreateFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkPrivateDataSlotCreateFlagsEXT</name>;</type>
+        <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="VkPipelineCreationFeedbackFlagBitsEXT" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineCreationFeedbackFlagsEXT</name>;</type>
+        <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 bitvalues="VkAccessFlagBits2KHR"             category="bitmask">typedef <type>VkFlags64</type> <name>VkAccessFlags2KHR</name>;</type>
+        <type bitvalues="VkPipelineStageFlagBits2KHR"      category="bitmask">typedef <type>VkFlags64</type> <name>VkPipelineStageFlags2KHR</name>;</type>
+        <type                                              category="bitmask">typedef <type>VkFlags</type> <name>VkAccelerationStructureMotionInfoFlagsNV</name>;</type>
+        <type                                              category="bitmask">typedef <type>VkFlags</type> <name>VkAccelerationStructureMotionInstanceFlagsNV</name>;</type>
+        <type bitvalues="VkFormatFeatureFlagBits2KHR"      category="bitmask">typedef <type>VkFlags64</type> <name>VkFormatFeatureFlags2KHR</name>;</type>
+        <type requires="VkRenderingFlagBitsKHR"           category="bitmask">typedef <type>VkFlags</type> <name>VkRenderingFlagsKHR</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="VkToolPurposeFlagBitsEXT"         category="bitmask">typedef <type>VkFlags</type> <name>VkToolPurposeFlagsEXT</name>;</type>
+        <type requires="VkSubmitFlagBitsKHR"              category="bitmask">typedef <type>VkFlags</type> <name>VkSubmitFlagsKHR</name>;</type>
+        <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkImageFormatConstraintsFlagsFUCHSIA</name>;</type>
+        <type requires="VkImageConstraintsInfoFlagBitsFUCHSIA"     category="bitmask">typedef <type>VkFlags</type> <name>VkImageConstraintsInfoFlagsFUCHSIA</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>VkVideoBeginCodingFlagsKHR</name>;</type>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEndCodingFlagsKHR</name>;</type>
+        <type requires="VkVideoCodingQualityPresetFlagBitsKHR"      category="bitmask">typedef <type>VkFlags</type> <name>VkVideoCodingQualityPresetFlagsKHR</name>;</type>
+        <type requires="VkVideoCodingControlFlagBitsKHR"            category="bitmask">typedef <type>VkFlags</type> <name>VkVideoCodingControlFlagsKHR</name>;</type>
+
+            <comment>Video Decode Core extension</comment>
+        <type requires="VkVideoDecodeFlagBitsKHR"                   category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeFlagsKHR</name>;</type>
+
+            <comment>Video Decode H.264 extension</comment>
+        <type requires="VkVideoDecodeH264PictureLayoutFlagBitsEXT"  category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeH264PictureLayoutFlagsEXT</name>;</type>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeH264CreateFlagsEXT</name>;</type>
+
+            <comment>Video Decode H.265 extension</comment>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoDecodeH265CreateFlagsEXT</name>;</type>
+
+            <comment>Video Encode Core extension</comment>
+        <type requires="VkVideoEncodeFlagBitsKHR"                   category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeFlagsKHR</name>;</type>
+        <type requires="VkVideoEncodeRateControlFlagBitsKHR"        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="VkVideoEncodeH264InputModeFlagBitsEXT"      category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH264InputModeFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH264OutputModeFlagBitsEXT"     category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH264OutputModeFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH264CreateFlagBitsEXT"         category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH264CreateFlagsEXT</name>;</type>
+
+            <comment>Video Encode H.265 extension</comment>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265CapabilityFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH265InputModeFlagBitsEXT"      category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265InputModeFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH265OutputModeFlagBitsEXT"     category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265OutputModeFlagsEXT</name>;</type>
+        <type                                                       category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265CreateFlagsEXT</name>;</type>
+        <type requires="VkVideoEncodeH265CtbSizeFlagBitsEXT"        category="bitmask">typedef <type>VkFlags</type> <name>VkVideoEncodeH265CtbSizeFlagsEXT</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_EXT"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPrivateDataSlotEXT</name>)</type>
+        <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>
+
+            <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="VkSurfaceKHR"     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>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"/>
+
+        <comment>Extensions</comment>
+        <type name="VkIndirectCommandsLayoutUsageFlagBitsNV" category="enum"/>
+        <type name="VkIndirectCommandsTokenTypeNV" category="enum"/>
+        <type name="VkIndirectStateFlagBitsNV" category="enum"/>
+        <type name="VkPrivateDataSlotCreateFlagBitsEXT" category="enum"/>
+        <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="VkQueueGlobalPriorityEXT" category="enum"/>
+        <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="VkScopeNV" category="enum"/>
+        <type name="VkComponentTypeNV" category="enum"/>
+        <type name="VkDeviceDiagnosticsConfigFlagBitsNV" category="enum"/>
+        <type name="VkPipelineCreationFeedbackFlagBitsEXT" category="enum"/>
+        <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="VkToolPurposeFlagBitsEXT" category="enum"/>
+        <type name="VkFragmentShadingRateNV" category="enum"/>
+        <type name="VkFragmentShadingRateTypeNV" category="enum"/>
+        <type name="VkAccessFlagBits2KHR" category="enum"/>
+        <type name="VkPipelineStageFlagBits2KHR" category="enum"/>
+        <type name="VkProvokingVertexModeEXT" category="enum"/>
+        <type name="VkImageFormatConstraintsFlagBitsFUCHSIA" category="enum"/>
+        <type name="VkImageConstraintsInfoFlagBitsFUCHSIA" category="enum"/>
+        <type name="VkFormatFeatureFlagBits2KHR" category="enum"/>
+        <type name="VkRenderingFlagBitsKHR" 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="VkFragmentShadingRateCombinerOpKHR" category="enum"/>
+        <type name="VkSubmitFlagBitsKHR" 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="VkVideoCodingQualityPresetFlagBitsKHR" category="enum"/>
+        <type name="VkVideoCodingControlFlagBitsKHR" category="enum"/>
+        <type name="VkQueryResultStatusKHR" category="enum"/>
+
+            <comment>Video Decode extensions</comment>
+        <type name="VkVideoDecodeFlagBitsKHR" category="enum"/>
+
+            <comment>Video H.264 Decode extensions</comment>
+        <type name="VkVideoDecodeH264PictureLayoutFlagBitsEXT" category="enum"/>
+
+            <comment>Video H.265 Decode extensions</comment>
+
+            <comment>Video Encode extensions</comment>
+        <type name="VkVideoEncodeFlagBitsKHR" category="enum"/>
+        <type name="VkVideoEncodeRateControlFlagBitsKHR" category="enum"/>
+        <type name="VkVideoEncodeRateControlModeFlagBitsKHR" category="enum"/>
+
+           <comment>Video H.264 Encode extensions</comment>
+        <type name="VkVideoEncodeH264CapabilityFlagBitsEXT"     category="enum"/>
+        <type name="VkVideoEncodeH264InputModeFlagBitsEXT"      category="enum"/>
+        <type name="VkVideoEncodeH264OutputModeFlagBitsEXT"     category="enum"/>
+        <type name="VkVideoEncodeH264CreateFlagBitsEXT"         category="enum"/>
+
+           <comment>Video H.265 Encode extensions</comment>
+        <type name="VkVideoEncodeH265InputModeFlagBitsEXT"      category="enum"/>
+        <type name="VkVideoEncodeH265OutputModeFlagBitsEXT"     category="enum"/>
+        <type name="VkVideoEncodeH265CtbSizeFlagBitsEXT"        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_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>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"><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></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"><type>VkQueueFlags</type>           <name>queueFlags</name><comment>Queue flags</comment></member>
+            <member><type>uint32_t</type>               <name>queueCount</name></member>
+            <member><type>uint32_t</type>               <name>timestampValidBits</name></member>
+            <member><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 devicememorytypeindex="1"><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 devicememorytypebits="1"><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 optional="true"><type>VkImageAspectFlags</type>     <name>aspectMask</name></member>
+            <member><type>VkExtent3D</type>             <name>imageGranularity</name></member>
+            <member 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 devicememoryhandle="1"><type>VkDeviceMemory</type>         <name>memory</name><comment>Mapped memory object</comment></member>
+            <member devicememoryoffset="1"><type>VkDeviceSize</type>           <name>offset</name><comment>Offset within the memory object where the range starts</comment></member>
+            <member devicememorysize="1"><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"><type>VkFormatFeatureFlags</type>   <name>linearTilingFeatures</name><comment>Format features in case of linear tiling</comment></member>
+            <member optional="true"><type>VkFormatFeatureFlags</type>   <name>optimalTilingFeatures</name><comment>Format features in case of optimal tiling</comment></member>
+            <member optional="true"><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"
+                filterVar="descriptorType"
+                filterVals="VK_DESCRIPTOR_TYPE_SAMPLER,VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
+                >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"
+                filterVar="descriptorType"
+                filterVals="VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
+                >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"
+                filterVar="descriptorType"
+                filterVals="VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER">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="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><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" returnedonly="true">
+            <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" devicememoryhandle="1"><type>VkDeviceMemory</type>         <name>memory</name></member>
+            <member devicememoryoffset="1"><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" devicememoryhandle="1"><type>VkDeviceMemory</type>         <name>memory</name></member>
+            <member devicememoryoffset="1"><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="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">
+            <member values="VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*            <name>pNext</name></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><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><type>VkShaderModule</type>         <name>module</name><comment>Module containing entry point</comment></member>
+            <member 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="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 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" let="hasTessellation : (arrayany pStages 0 stageCount (lambda ((s VkPipelineShaderStageCreateInfo)) (or (eq (getfield s stage) VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) (eq (getfield s stage) VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)))),hasRasterization : (if (eq 0 pRasterizationState) 0 (not (getfield pRasterizationState rasterizerDiscardEnable)))">
+            <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><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 noautovalidity="true" optional="streamFeature:VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT">const <type>VkPipelineVertexInputStateCreateInfo</type>* <name>pVertexInputState</name></member>
+            <member noautovalidity="true" optional="streamFeature:VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT">const <type>VkPipelineInputAssemblyStateCreateInfo</type>* <name>pInputAssemblyState</name></member>
+            <member noautovalidity="true" optional="true" filterVar="hasTessellation">const <type>VkPipelineTessellationStateCreateInfo</type>* <name>pTessellationState</name></member>
+            <member noautovalidity="true" optional="true" filterVar="hasRasterization">const <type>VkPipelineViewportStateCreateInfo</type>* <name>pViewportState</name></member>
+            <member noautovalidity="true" optional="streamFeature:VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT">const <type>VkPipelineRasterizationStateCreateInfo</type>* <name>pRasterizationState</name></member>
+            <member noautovalidity="true" optional="true" filterVar="hasRasterization">const <type>VkPipelineMultisampleStateCreateInfo</type>* <name>pMultisampleState</name></member>
+            <member noautovalidity="true" optional="true" filterVar="hasRasterization">const <type>VkPipelineDepthStencilStateCreateInfo</type>* <name>pDepthStencilState</name></member>
+            <member noautovalidity="true" optional="true" filterVar="hasRasterization">const <type>VkPipelineColorBlendStateCreateInfo</type>* <name>pColorBlendState</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 optional="true"><type>VkRenderPass</type>           <name>renderPass</name></member>
+            <member><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 optional="true"><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="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 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 draws 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="noauto"><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="noauto"><type>uint32_t</type>               <name>subPixelPrecisionBits</name><comment>number bits of subpixel precision in screen x and y</comment></member>
+            <member limittype="noauto"><type>uint32_t</type>               <name>subTexelPrecisionBits</name><comment>number bits of precision for selecting texel weights</comment></member>
+            <member limittype="noauto"><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 draw 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="noauto"><type>uint32_t</type>               <name>viewportSubPixelBits</name><comment>number bits of subpixel precision for viewport</comment></member>
+            <member limittype="noauto"><type>size_t</type>                 <name>minMemoryMapAlignment</name><comment>min required alignment of pointers returned by MapMemory (bytes)</comment></member>
+            <member limittype="noauto"><type>VkDeviceSize</type>           <name>minTexelBufferOffsetAlignment</name><comment>min required alignment for texel buffer offsets (bytes) </comment></member>
+            <member limittype="noauto"><type>VkDeviceSize</type>           <name>minUniformBufferOffsetAlignment</name><comment>min required alignment for uniform buffer sizes and offsets (bytes)</comment></member>
+            <member limittype="noauto"><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="noauto"><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="bitmask"><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="noauto"><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="max"><type>float</type>                  <name>pointSizeGranularity</name><comment>granularity of supported point sizes</comment></member>
+            <member limittype="max"><type>float</type>                  <name>lineWidthGranularity</name><comment>granularity of supported line widths</comment></member>
+            <member limittype="noauto"><type>VkBool32</type>               <name>strictLines</name><comment>line rasterization follows preferred rules</comment></member>
+            <member limittype="noauto"><type>VkBool32</type>               <name>standardSampleLocations</name><comment>supports standard sample locations for all supported sample counts</comment></member>
+            <member limittype="noauto"><type>VkDeviceSize</type>           <name>optimalBufferCopyOffsetAlignment</name><comment>optimal offset of buffer copies</comment></member>
+            <member limittype="noauto"><type>VkDeviceSize</type>           <name>optimalBufferCopyRowPitchAlignment</name><comment>optimal pitch of buffer copies</comment></member>
+            <member limittype="noauto"><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 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 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 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="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="VkWin32KeyedMutexAcquireReleaseInfoNV" structextends="VkSubmitInfo,VkSubmitInfo2KHR">
+            <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" devicememoryhandle="1">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" devicememoryhandle="1">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="VkDevicePrivateDataCreateInfoEXT" allowduplicate="true" structextends="VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_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>privateDataSlotRequestCount</name></member>
+        </type>
+        <type category="struct" name="VkPrivateDataSlotCreateInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                            <name>pNext</name></member>
+            <member><type>VkPrivateDataSlotCreateFlagsEXT</type>        <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDevicePrivateDataFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT"><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="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="noauto"><type>uint32_t</type>         <name>minSequencesCountBufferOffsetAlignment</name></member>
+            <member limittype="noauto"><type>uint32_t</type>         <name>minSequencesIndexBufferOffsetAlignment</name></member>
+            <member limittype="noauto"><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><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><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="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><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><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="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>
+        </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 devicememorytypebits="1"><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 devicememoryhandle="1"><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 devicememorytypebits="1"><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 devicememoryhandle="1"><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
+        </type>
+        <type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoKHR" structextends="VkSubmitInfo,VkSubmitInfo2KHR">
+            <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" devicememoryhandle="1">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" devicememoryhandle="1">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="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 devicememoryhandle="1"><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member devicememoryoffset="1"><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" devicememoryhandle="1"><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member devicememoryoffset="1"><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,VkRenderingInfoKHR">
+            <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 noautovalidity="true" optional="true" 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><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="noauto" 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="VkDeviceBufferMemoryRequirementsKHR">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR"><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="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="VkDeviceImageMemoryRequirementsKHR">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_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><type>VkImageAspectFlagBits</type>                                                                <name>planeAspect</name></member>
+        </type>
+        <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="noauto"><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="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="noauto"><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,VkImageMemoryBarrier2KHR">
+            <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="noauto"><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="VkPhysicalDeviceInlineUniformBlockFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT"><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="VkPhysicalDeviceInlineUniformBlockPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_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>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="VkWriteDescriptorSetInlineUniformBlockEXT" structextends="VkWriteDescriptorSet">
+            <member values="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_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>dataSize</name></member>
+            <member len="dataSize">const <type>void</type>* <name>pData</name></member>
+        </type>
+        <type category="struct" name="VkDescriptorPoolInlineUniformBlockCreateInfoEXT" structextends="VkDescriptorPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_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>maxInlineUniformBlockBindings</name></member>
+        </type>
+        <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">
+            <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="VkPhysicalDeviceMaintenance4FeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR"><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="VkPhysicalDeviceMaintenance4PropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR"><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="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" optional="streamFeature:VULKAN_STREAM_FEATURE_SHADER_FLOAT16_INT8_BIT">
+            <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" optional="streamFeature:VULKAN_STREAM_FEATURE_SHADER_FLOAT16_INT8_BIT"/>
+        <type category="struct" name="VkPhysicalDeviceFloat16Int8FeaturesKHR"                  alias="VkPhysicalDeviceShaderFloat16Int8Features" optional="streamFeature:VULKAN_STREAM_FEATURE_SHADER_FLOAT16_INT8_BIT"/>
+        <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="noauto"><type>VkShaderFloatControlsIndependence</type> <name>denormBehaviorIndependence</name></member>
+            <member limittype="noauto"><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="VkNativeBufferANDROID" structextends="VkImageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>* <name>pNext</name></member>
+            <member noautovalidity="true">const <type>uint32_t</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>uint64_t</type> <name>consumer</name></member>
+            <member><type>uint64_t</type> <name>producer</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="VkDeviceQueueGlobalPriorityCreateInfoEXT" structextends="VkDeviceQueueCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                    <name>pNext</name></member>
+            <member><type>VkQueueGlobalPriorityEXT</type>       <name>globalPriority</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_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>globalPriorityQuery</name></member>
+        </type>
+        <type category="struct" name="VkQueueFamilyGlobalPriorityPropertiesEXT" structextends="VkQueueFamilyProperties2">
+            <member values="VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_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>priorityCount</name></member>
+            <member><type>VkQueueGlobalPriorityEXT</type> <name>priorities</name>[<enum>VK_MAX_GLOBAL_PRIORITY_SIZE_EXT</enum>]</member>
+        </type>
+        <type category="struct" name="VkDebugUtilsObjectNameInfoEXT">
+            <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 noautovalidity="true" optional="true" len="queueLabelCount"><type>VkDebugUtilsLabelEXT</type>*  <name>pQueueLabels</name></member>
+            <member optional="true"><type>uint32_t</type>                                                           <name>cmdBufLabelCount</name></member>
+            <member noautovalidity="true" optional="true" len="cmdBufLabelCount"><type>VkDebugUtilsLabelEXT</type>* <name>pCmdBufLabels</name></member>
+            <member><type>uint32_t</type>                                                                           <name>objectCount</name></member>
+            <member noautovalidity="true" len="objectCount"><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><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 optional="false"><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 devicememorytypebits="1"><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="noauto"><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="noauto"><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="noauto"><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="noauto"><type>VkBool32</type>               <name>conservativePointAndLineRasterization</name><comment>true if conservative rasterization also applies to points and lines</comment></member>
+            <member limittype="noauto"><type>VkBool32</type>               <name>degenerateTrianglesRasterized</name><comment>true if degenerate triangles (those with zero area after snap) are rasterized</comment></member>
+            <member limittype="noauto"><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="noauto"><type>uint32_t</type> <name>shaderEngineCount</name><comment>number of shader engines</comment></member>
+            <member limittype="noauto"><type>uint32_t</type> <name>shaderArraysPerEngineCount</name><comment>number of shader arrays</comment></member>
+            <member limittype="noauto"><type>uint32_t</type> <name>computeUnitsPerShaderArray</name><comment>number of physical CUs per shader array</comment></member>
+            <member limittype="noauto"><type>uint32_t</type> <name>simdPerComputeUnit</name><comment>number of SIMDs per compute unit</comment></member>
+            <member limittype="noauto"><type>uint32_t</type> <name>wavefrontsPerSimd</name><comment>number of wavefront slots in each SIMD</comment></member>
+            <member limittype="noauto"><type>uint32_t</type> <name>wavefrontSize</name><comment>maximum number of threads per wavefront</comment></member>
+            <member limittype="noauto"><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="noauto"><type>uint32_t</type> <name>sgprAllocationGranularity</name><comment>SGPRs are allocated in groups of this size</comment></member>
+            <member limittype="noauto"><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="noauto"><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 devicememorytypebits="1"><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 devicememoryhandle="1"><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">
+            <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><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="noauto"><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" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV"><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="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="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="noauto"><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="noauto"><type>uint32_t</type>                            <name>meshOutputPerVertexGranularity</name></member>
+            <member limittype="noauto"><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="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 devicememoryhandle="1"><type>VkDeviceMemory</type>                   <name>memory</name></member>
+            <member devicememoryoffset="1"><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="noauto"><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="noauto"><type>uint32_t</type>                         <name>shaderGroupBaseAlignment</name></member>
+            <member limittype="noauto"><type>uint32_t</type>                         <name>shaderGroupHandleCaptureReplaySize</name></member>
+            <member limittype="max"><type>uint32_t</type>                         <name>maxRayDispatchInvocationCount</name></member>
+            <member limittype="noauto"><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="noauto"><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="noauto"><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="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,false" 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 optional="false"><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="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="noauto"><type>VkBool32</type>                       <name>subsampledLoads</name></member>
+            <member limittype="noauto"><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="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="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="VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT"><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="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="VkPipelineCreationFeedbackEXT" returnedonly="true">
+            <member><type>VkPipelineCreationFeedbackFlagsEXT</type>  <name>flags</name></member>
+            <member><type>uint64_t</type>                            <name>duration</name></member>
+        </type>
+        <type category="struct" name="VkPipelineCreationFeedbackCreateInfoEXT" structextends="VkGraphicsPipelineCreateInfo,VkComputePipelineCreateInfo,VkRayTracingPipelineCreateInfoNV,VkRayTracingPipelineCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_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>VkPipelineCreationFeedbackEXT</type>*      <name>pPipelineCreationFeedback</name><comment>Output pipeline creation feedback.</comment></member>
+            <member><type>uint32_t</type>                            <name>pipelineStageCreationFeedbackCount</name></member>
+            <member len="pipelineStageCreationFeedbackCount"><type>VkPipelineCreationFeedbackEXT</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="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="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,VkSubmitInfo2KHR">
+            <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="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="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="VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"><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="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="VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT" structextends="VkPhysicalDeviceProperties2" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*              <name>pNext</name></member>
+            <member limittype="noauto"><type>VkDeviceSize</type>                       <name>storageTexelBufferOffsetAlignmentBytes</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                           <name>storageTexelBufferOffsetSingleTexelAlignment</name></member>
+            <member limittype="noauto"><type>VkDeviceSize</type>                       <name>uniformTexelBufferOffsetAlignmentBytes</name></member>
+            <member limittype="noauto"><type>VkBool32</type>                           <name>uniformTexelBufferOffsetSingleTexelAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSubgroupSizeControlFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_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>subgroupSizeControl</name></member>
+            <member><type>VkBool32</type> <name>computeFullSubgroups</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSubgroupSizeControlPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                          <name>pNext</name></member>
+            <member limittype="min" noautovalidity="true"><type>uint32_t</type> <name>minSubgroupSize</name><comment>The minimum subgroup size supported by this device</comment></member>
+            <member limittype="max" 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="VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT" returnedonly="true" structextends="VkPipelineShaderStageCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"><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="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="noauto"><type>uint32_t</type>               <name>maxSubpassShadingWorkgroupSizeAspectRatio</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 devicememoryhandle="1"><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="noauto"><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="VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_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>pipelineCreationCacheControl</name></member>
+        </type>
+        <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="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>
+            <member limittype="noauto" 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="noauto"><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="noauto"><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="noauto"><type>VkShaderFloatControlsIndependence</type><name>denormBehaviorIndependence</name></member>
+            <member limittype="noauto"><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="VkPipelineCompilerControlCreateInfoAMD" structextends="VkGraphicsPipelineCreateInfo,VkComputePipelineCreateInfo">
+            <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="VkPhysicalDeviceToolPropertiesEXT" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT"><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>VkToolPurposeFlagsEXT</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="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="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">
+            <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="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="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="VkBufferImageCopy2KHR,VkImageBlit2KHR">
+            <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="VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR"><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="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="noauto"><type>VkDeviceSize</type>                       <name>robustStorageBufferAccessSizeAlignment</name></member>
+            <member limittype="noauto"><type>VkDeviceSize</type>                       <name>robustUniformBufferAccessSizeAlignment</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceImageRobustnessFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT"><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="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="noauto"><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="VkBufferCopy2KHR">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR"><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="VkImageCopy2KHR">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR"><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="VkImageBlit2KHR">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR"><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="VkBufferImageCopy2KHR">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR"><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="VkImageResolve2KHR">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR"><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="VkCopyBufferInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR"><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>VkBufferCopy2KHR</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkCopyImageInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR"><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>VkImageCopy2KHR</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkBlitImageInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR"><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>VkImageBlit2KHR</type>* <name>pRegions</name></member>
+            <member><type>VkFilter</type> <name>filter</name></member>
+        </type>
+        <type category="struct" name="VkCopyBufferToImageInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR"><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>VkBufferImageCopy2KHR</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkCopyImageToBufferInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR"><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>VkBufferImageCopy2KHR</type>* <name>pRegions</name></member>
+        </type>
+        <type category="struct" name="VkResolveImageInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR"><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>VkImageResolve2KHR</type>* <name>pRegions</name></member>
+        </type>
+        <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><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="noauto"><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="noauto"><type>uint32_t</type>               <name>maxFragmentSizeAspectRatio</name></member>
+            <member limittype="noauto"><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="VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_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>shaderTerminateInvocation</name></member>
+        </type>
+        <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="bitmask"><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><type>VkFragmentShadingRateTypeNV</type>        <name>shadingRateType</name></member>
+            <member><type>VkFragmentShadingRateNV</type>            <name>shadingRate</name></member>
+            <member><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="VkImportColorBufferGOOGLE" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE"><type>VkStructureType</type> <name>sType</name></member>
+            <member><type>void</type>*                  <name>pNext</name></member>
+            <member><type>uint32_t</type>   <name>colorBuffer</name></member>
+        </type>
+        <type category="struct" name="VkImportBufferGOOGLE" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE"><type>VkStructureType</type> <name>sType</name></member>
+            <member><type>void</type>*                  <name>pNext</name></member>
+            <member><type>uint32_t</type>   <name>buffer</name></member>
+        </type>
+        <type category="struct" name="VkImportPhysicalAddressGOOGLE" structextends="VkMemoryAllocateInfo">
+            <member values="VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE"><type>VkStructureType</type> <name>sType</name></member>
+            <member><type>void</type>*                  <name>pNext</name></member>
+            <member><type>uint64_t</type>   <name>physicalAddress</name></member>
+            <member><type>VkDeviceSize</type>   <name>size</name></member>
+            <member><type>VkFormat</type>   <name>format</name></member>
+            <member><type>VkImageTiling</type>   <name>tiling</name></member>
+            <member><type>uint32_t</type>   <name>tilingParameter</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_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>mutableDescriptorType</name></member>
+        </type>
+        <type category="struct" name="VkMutableDescriptorTypeListVALVE">
+            <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="VkMutableDescriptorTypeCreateInfoVALVE" structextends="VkDescriptorSetLayoutCreateInfo,VkDescriptorPoolCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE"><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>VkMutableDescriptorTypeListVALVE</type>* <name>pMutableDescriptorTypeLists</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="VkMemoryBarrier2KHR" structextends="VkSubpassDependency2">
+            <member values="VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                               <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2KHR</type>  <name>srcStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2KHR</type>         <name>srcAccessMask</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2KHR</type>  <name>dstStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2KHR</type>         <name>dstAccessMask</name></member>
+        </type>
+        <type category="struct" name="VkImageMemoryBarrier2KHR">
+            <member values="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                               <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2KHR</type>  <name>srcStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2KHR</type>         <name>srcAccessMask</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2KHR</type>  <name>dstStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2KHR</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="VkBufferMemoryBarrier2KHR">
+            <member values="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                               <name>pNext</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2KHR</type>  <name>srcStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2KHR</type>         <name>srcAccessMask</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2KHR</type>  <name>dstStageMask</name></member>
+            <member optional="true"><type>VkAccessFlags2KHR</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="VkDependencyInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR"><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>VkMemoryBarrier2KHR</type>* <name>pMemoryBarriers</name></member>
+            <member optional="true"><type>uint32_t</type>                  <name>bufferMemoryBarrierCount</name></member>
+            <member len="bufferMemoryBarrierCount">const <type>VkBufferMemoryBarrier2KHR</type>* <name>pBufferMemoryBarriers</name></member>
+            <member optional="true"><type>uint32_t</type>                  <name>imageMemoryBarrierCount</name></member>
+            <member len="imageMemoryBarrierCount">const <type>VkImageMemoryBarrier2KHR</type>* <name>pImageMemoryBarriers</name></member>
+        </type>
+        <type category="struct" name="VkSemaphoreSubmitInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_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>uint64_t</type>                                                                   <name>value</name></member>
+            <member optional="true"><type>VkPipelineStageFlags2KHR</type>                                   <name>stageMask</name></member>
+            <member><type>uint32_t</type>                                                                   <name>deviceIndex</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferSubmitInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR"><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="VkSubmitInfo2KHR">
+            <member values="VK_STRUCTURE_TYPE_SUBMIT_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>VkSubmitFlagsKHR</type>                                           <name>flags</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>waitSemaphoreInfoCount</name></member>
+            <member len="waitSemaphoreInfoCount">const <type>VkSemaphoreSubmitInfoKHR</type>*               <name>pWaitSemaphoreInfos</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>commandBufferInfoCount</name></member>
+            <member len="commandBufferInfoCount">const <type>VkCommandBufferSubmitInfoKHR</type>*           <name>pCommandBufferInfos</name></member>
+            <member optional="true"><type>uint32_t</type>                                                   <name>signalSemaphoreInfoCount</name></member>
+            <member len="signalSemaphoreInfoCount">const <type>VkSemaphoreSubmitInfoKHR</type>*             <name>pSignalSemaphoreInfos</name></member>
+        </type>
+        <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><type>VkPipelineStageFlags2KHR</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>VkPipelineStageFlags2KHR</type>   <name>stage</name></member>
+            <member noautovalidity="true"><type>void</type>* <name>pCheckpointMarker</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceSynchronization2FeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_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>synchronization2</name></member>
+        </type>
+        <type category="struct" name="VkVideoQueueFamilyProperties2KHR" structextends="VkQueueFamilyProperties2">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkVideoCodecOperationFlagsKHR</type>      <name>videoCodecOperations</name></member>
+        </type>
+        <type category="struct" name="VkVideoProfilesKHR" structextends="VkFormatProperties2,VkImageCreateInfo,VkImageViewCreateInfo,VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>uint32_t</type>                           <name>profileCount</name></member>
+            <member>const <type>VkVideoProfileKHR</type>*           <name>pProfiles</name></member>
+        </type>
+        <type category="struct" name="VkPhysicalDeviceVideoFormatInfoKHR" returnedonly="true">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true"><type>void</type>*                              <name>pNext</name></member>
+            <member><type>VkImageUsageFlags</type>                  <name>imageUsage</name></member>
+            <member>const <type>VkVideoProfilesKHR</type>*          <name>pVideoProfiles</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>
+        </type>
+        <type category="struct" name="VkVideoProfileKHR" structextends="VkQueryPoolCreateInfo,VkFormatProperties2,VkImageCreateInfo,VkImageViewCreateInfo,VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true"><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><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>capabilityFlags</name></member>
+            <member><type>VkDeviceSize</type>                     <name>minBitstreamBufferOffsetAlignment</name></member>
+            <member><type>VkDeviceSize</type>                     <name>minBitstreamBufferSizeAlignment</name></member>
+            <member><type>VkExtent2D</type>                       <name>videoPictureExtentGranularity</name></member>
+            <member><type>VkExtent2D</type>                       <name>minExtent</name></member>
+            <member><type>VkExtent2D</type>                       <name>maxExtent</name></member>
+            <member><type>uint32_t</type>                         <name>maxReferencePicturesSlotsCount</name></member>
+            <member><type>uint32_t</type>                         <name>maxReferencePicturesActiveCount</name></member>
+        </type>
+        <type category="struct" name="VkVideoGetMemoryPropertiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_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>VkMemoryRequirements2</type>*            <name>pMemoryRequirements</name></member>
+        </type>
+        <type category="struct" name="VkVideoBindMemoryKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_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="VkVideoPictureResourceKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_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>TThe 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="VkVideoReferenceSlotKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*        <name>pNext</name></member>
+            <member><type>int8_t</type>             <name>slotIndex</name><comment>The reference slot index</comment></member>
+            <member>const <type>VkVideoPictureResourceKHR</type>* <name>pPictureResource</name><comment>The reference picture resource</comment></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>VkOffset2D</type>                             <name>codedOffset</name></member>
+            <member><type>VkExtent2D</type>                             <name>codedExtent</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>VkVideoPictureResourceKHR</type>              <name>dstPictureResource</name></member>
+            <member>const <type>VkVideoReferenceSlotKHR</type>*         <name>pSetupReferenceSlot</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>referenceSlotCount</name></member>
+            <member len="referenceSlotCount">const <type>VkVideoReferenceSlotKHR</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="StdVideoH264Level"/>
+        <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="StdVideoDecodeH264Mvc"/>
+        <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 requires="vk_video/vulkan_video_codec_h264std_decode.h" name="StdVideoDecodeH264MvcElement"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_decode.h" name="StdVideoDecodeH264MvcElementFlags"/>
+        <type category="struct" name="VkVideoDecodeH264ProfileEXT" structextends="VkVideoProfileKHR,VkQueryPoolCreateInfo,VkFormatProperties2,VkImageCreateInfo,VkImageViewCreateInfo,VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_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>
+            <member><type>VkVideoDecodeH264PictureLayoutFlagsEXT</type> <name>pictureLayout</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264CapabilitiesEXT" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>maxLevel</name></member>
+            <member><type>VkOffset2D</type>                       <name>fieldOffsetGranularity</name></member>
+            <member><type>VkExtensionProperties</type>            <name>stdExtensionVersion</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264SessionCreateInfoEXT" structextends="VkVideoSessionCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_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>VkVideoDecodeH264CreateFlagsEXT</type>  <name>flags</name></member>
+            <member>const <type>VkExtensionProperties</type>*     <name>pStdExtensionVersion</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="VkVideoDecodeH264SessionParametersAddInfoEXT" structextends="VkVideoSessionParametersUpdateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_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><type>uint32_t</type>                                                                  <name>spsStdCount</name></member>
+            <member len="spsStdCount" optional="true">const <type>StdVideoH264SequenceParameterSet</type>* <name>pSpsStd</name></member>
+            <member><type>uint32_t</type>                                                                  <name>ppsStdCount</name></member>
+            <member len="ppsStdCount" optional="true">const <type>StdVideoH264PictureParameterSet</type>*  <name>pPpsStd</name><comment>List of Picture Parameters associated with the spsStd, above</comment></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264SessionParametersCreateInfoEXT" structextends="VkVideoSessionParametersCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_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>maxSpsStdCount</name></member>
+            <member><type>uint32_t</type>                                                                  <name>maxPpsStdCount</name></member>
+            <member optional="true">const <type>VkVideoDecodeH264SessionParametersAddInfoEXT</type>*       <name>pParametersAddInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264PictureInfoEXT" structextends="VkVideoDecodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>*     <name>pNext</name></member>
+            <member>const <type>StdVideoDecodeH264PictureInfo</type>*  <name>pStdPictureInfo</name></member>
+            <member><type>uint32_t</type>                              <name>slicesCount</name></member>
+            <member len="slicesCount">const <type>uint32_t</type>*     <name>pSlicesDataOffsets</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264DpbSlotInfoEXT" structextends="VkVideoReferenceSlotKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_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>StdVideoDecodeH264ReferenceInfo</type>* <name>pStdReferenceInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH264MvcEXT" structextends="VkVideoDecodeH264PictureInfoEXT">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true" noautovalidity="true">const <type>void</type>*<name>pNext</name></member>
+            <member>const <type>StdVideoDecodeH264Mvc</type>*   <name>pStdMvc</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="StdVideoH265Level"/>
+        <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="VkVideoDecodeH265ProfileEXT" structextends="VkVideoProfileKHR,VkQueryPoolCreateInfo,VkFormatProperties2,VkImageCreateInfo,VkImageViewCreateInfo,VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_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="VkVideoDecodeH265CapabilitiesEXT" returnedonly="true" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>maxLevel</name></member>
+            <member><type>VkExtensionProperties</type>            <name>stdExtensionVersion</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265SessionCreateInfoEXT" structextends="VkVideoSessionCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_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>VkVideoDecodeH265CreateFlagsEXT</type>  <name>flags</name></member>
+            <member>const <type>VkExtensionProperties</type>*     <name>pStdExtensionVersion</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265SessionParametersAddInfoEXT" structextends="VkVideoSessionParametersUpdateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_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><type>uint32_t</type>                                                                  <name>spsStdCount</name></member>
+            <member len="spsStdCount" optional="true">const <type>StdVideoH265SequenceParameterSet</type>* <name>pSpsStd</name></member>
+            <member><type>uint32_t</type>                                                                  <name>ppsStdCount</name></member>
+            <member len="ppsStdCount" optional="true">const <type>StdVideoH265PictureParameterSet</type>*  <name>pPpsStd</name><comment>List of Picture Parameters associated with the spsStd, above</comment></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265SessionParametersCreateInfoEXT" structextends="VkVideoSessionParametersCreateInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_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>maxSpsStdCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxPpsStdCount</name></member>
+            <member optional="true">const <type>VkVideoDecodeH265SessionParametersAddInfoEXT</type>* <name>pParametersAddInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265PictureInfoEXT" structextends="VkVideoDecodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*                        <name>pNext</name></member>
+            <member><type>StdVideoDecodeH265PictureInfo</type>*     <name>pStdPictureInfo</name></member>
+            <member><type>uint32_t</type>                           <name>slicesCount</name></member>
+            <member len="slicesCount">const <type>uint32_t</type>*  <name>pSlicesDataOffsets</name></member>
+        </type>
+        <type category="struct" name="VkVideoDecodeH265DpbSlotInfoEXT" structextends="VkVideoReferenceSlotKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_DECODE_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>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>VkVideoProfileKHR</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>referencePicturesFormat</name></member>
+            <member><type>uint32_t</type>                                      <name>maxReferencePicturesSlotsCount</name></member>
+            <member><type>uint32_t</type>                                      <name>maxReferencePicturesActiveCount</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>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="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>VkVideoCodingQualityPresetFlagsKHR</type>                      <name>codecQualityPreset</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>VkVideoReferenceSlotKHR</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 optional="true"><type>VkVideoCodingControlFlagsKHR</type> <name>flags</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>uint32_t</type>                               <name>qualityLevel</name></member>
+            <member><type>VkExtent2D</type>                             <name>codedExtent</name></member>
+            <member><type>VkBuffer</type>                               <name>dstBitstreamBuffer</name></member>
+            <member><type>VkDeviceSize</type>                           <name>dstBitstreamBufferOffset</name></member>
+            <member><type>VkDeviceSize</type>                           <name>dstBitstreamBufferMaxRange</name></member>
+            <member><type>VkVideoPictureResourceKHR</type>              <name>srcPictureResource</name></member>
+            <member>const <type>VkVideoReferenceSlotKHR</type>*         <name>pSetupReferenceSlot</name></member>
+            <member optional="true"><type>uint32_t</type>               <name>referenceSlotCount</name></member>
+            <member len="referenceSlotCount">const <type>VkVideoReferenceSlotKHR</type>* <name>pReferenceSlots</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeRateControlInfoKHR" structextends="VkVideoCodingControlInfoKHR">
+            <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><type>VkVideoEncodeRateControlFlagsKHR</type>         <name>flags</name></member>
+            <member><type>VkVideoEncodeRateControlModeFlagBitsKHR</type>  <name>rateControlMode</name></member>
+            <member><type>uint32_t</type>                                 <name>averageBitrate</name></member>
+            <member><type>uint16_t</type>                                 <name>peakToAverageBitrateRatio</name></member>
+            <member><type>uint16_t</type>                                 <name>frameRateNumerator</name></member>
+            <member><type>uint16_t</type>                                 <name>frameRateDenominator</name></member>
+            <member><type>uint32_t</type>                                 <name>virtualBufferSizeInMs</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264CapabilitiesEXT" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*                           <name>pNext</name></member>
+            <member><type>VkVideoEncodeH264CapabilityFlagsEXT</type>   <name>flags</name></member>
+            <member><type>VkVideoEncodeH264InputModeFlagsEXT</type>    <name>inputModeFlags</name></member>
+            <member><type>VkVideoEncodeH264OutputModeFlagsEXT</type>   <name>outputModeFlags</name></member>
+            <member><type>VkExtent2D</type>                            <name>minPictureSizeInMbs</name></member>
+            <member><type>VkExtent2D</type>                            <name>maxPictureSizeInMbs</name></member>
+            <member><type>VkExtent2D</type>                            <name>inputImageDataAlignment</name></member>
+            <member><type>uint8_t</type>                               <name>maxNumL0ReferenceForP</name></member>
+            <member><type>uint8_t</type>                               <name>maxNumL0ReferenceForB</name></member>
+            <member><type>uint8_t</type>                               <name>maxNumL1Reference</name></member>
+            <member><type>uint8_t</type>                               <name>qualityLevelCount</name></member>
+            <member><type>VkExtensionProperties</type>                 <name>stdExtensionVersion</name></member>
+        </type>
+        <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>VkVideoEncodeH264CreateFlagsEXT</type> <name>flags</name></member>
+            <member><type>VkExtent2D</type>                      <name>maxPictureSizeInMbs</name></member>
+            <member>const <type>VkExtensionProperties</type>*    <name>pStdExtensionVersion</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="StdVideoEncodeH264SliceHeaderFlags"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264RefMemMgmtCtrlOperations"/>
+        <type requires="vk_video/vulkan_video_codec_h264std_encode.h" name="StdVideoEncodeH264PictureInfoFlags"/>
+        <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="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><type>uint32_t</type>                                                                  <name>spsStdCount</name></member>
+            <member len="spsStdCount" optional="true">const <type>StdVideoH264SequenceParameterSet</type>* <name>pSpsStd</name></member>
+            <member><type>uint32_t</type>                                                                  <name>ppsStdCount</name></member>
+            <member len="ppsStdCount" optional="true">const <type>StdVideoH264PictureParameterSet</type>*  <name>pPpsStd</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>maxSpsStdCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxPpsStdCount</name></member>
+            <member optional="true">const <type>VkVideoEncodeH264SessionParametersAddInfoEXT</type>* <name>pParametersAddInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264DpbSlotInfoEXT">
+            <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><type>int8_t</type>                                                               <name>slotIndex</name></member>
+            <member>const <type>StdVideoEncodeH264PictureInfo</type>*                                 <name>pStdPictureInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264VclFrameInfoEXT" structextends="VkVideoEncodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                          <name>pNext</name></member>
+            <member><type>uint8_t</type>                                                              <name>refDefaultFinalList0EntryCount</name></member>
+            <member len="refDefaultFinalList0EntryCount">const <type>VkVideoEncodeH264DpbSlotInfoEXT</type>* <name>pRefDefaultFinalList0Entries</name></member>
+            <member><type>uint8_t</type>                                                              <name>refDefaultFinalList1EntryCount</name></member>
+            <member len="refDefaultFinalList1EntryCount">const <type>VkVideoEncodeH264DpbSlotInfoEXT</type>* <name>pRefDefaultFinalList1Entries</name></member>
+            <member><type>uint32_t</type>                                                             <name>naluSliceEntryCount</name></member>
+            <member len="naluSliceEntryCount">const <type>VkVideoEncodeH264NaluSliceEXT</type>*     <name>pNaluSliceEntries</name></member>
+            <member>const <type>VkVideoEncodeH264DpbSlotInfoEXT</type>*                               <name>pCurrentPictureInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264EmitPictureParametersEXT" structextends="VkVideoEncodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*                             <name>pNext</name></member>
+            <member><type>uint8_t</type>                                 <name>spsId</name></member>
+            <member><type>VkBool32</type>                                <name>emitSpsEnable</name></member>
+            <member><type>uint32_t</type>                                <name>ppsIdEntryCount</name></member>
+            <member len="ppsIdEntryCount">const <type>uint8_t</type>*  <name>ppsIdEntries</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH264ProfileEXT" structextends="VkVideoProfileKHR,VkQueryPoolCreateInfo,VkFormatProperties2,VkImageCreateInfo,VkImageViewCreateInfo,VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_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="VkVideoEncodeH264NaluSliceEXT">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                     <name>pNext</name></member>
+            <member>const <type>StdVideoEncodeH264SliceHeader</type>*            <name>pSliceHeaderStd</name></member>
+            <member><type>uint32_t</type>                                        <name>mbCount</name></member>
+            <member><type>uint8_t</type>                                         <name>refFinalList0EntryCount</name></member>
+            <member len="refFinalList0EntryCount">const <type>VkVideoEncodeH264DpbSlotInfoEXT</type>* <name>pRefFinalList0Entries</name></member>
+            <member><type>uint8_t</type>                                         <name>refFinalList1EntryCount</name></member>
+            <member len="refFinalList1EntryCount">const <type>VkVideoEncodeH264DpbSlotInfoEXT</type>* <name>pRefFinalList1Entries</name></member>
+            <member><type>uint32_t</type>                                        <name>precedingNaluBytes</name></member>
+            <member><type>uint8_t</type>                                         <name>minQp</name></member>
+            <member><type>uint8_t</type>                                         <name>maxQp</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265CapabilitiesEXT" structextends="VkVideoCapabilitiesKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*           <name>pNext</name></member>
+            <member><type>VkVideoEncodeH265CapabilityFlagsEXT</type>   <name>flags</name></member>
+            <member><type>VkVideoEncodeH265InputModeFlagsEXT</type>    <name>inputModeFlags</name></member>
+            <member><type>VkVideoEncodeH265OutputModeFlagsEXT</type>   <name>outputModeFlags</name></member>
+            <member><type>VkVideoEncodeH265CtbSizeFlagsEXT</type>      <name>ctbSizes</name></member>
+            <member><type>VkExtent2D</type>                            <name>inputImageDataAlignment</name></member>
+            <member><type>uint8_t</type>                               <name>maxNumL0ReferenceForP</name></member>
+            <member><type>uint8_t</type>                               <name>maxNumL0ReferenceForB</name></member>
+            <member><type>uint8_t</type>                               <name>maxNumL1Reference</name></member>
+            <member><type>uint8_t</type>                               <name>maxNumSubLayers</name></member>
+            <member><type>uint8_t</type>                               <name>qualityLevelCount</name></member>
+            <member><type>VkExtensionProperties</type>                 <name>stdExtensionVersion</name></member>
+        </type>
+        <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>VkVideoEncodeH265CreateFlagsEXT</type>  <name>flags</name></member>
+            <member>const <type>VkExtensionProperties</type>*     <name>pStdExtensionVersion</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="StdVideoEncodeH265SliceSegmentHeader"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265PictureInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265SliceHeader"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265ReferenceInfo"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265ReferenceModifications"/>
+        <type requires="vk_video/vulkan_video_codec_h265std_encode.h" name="StdVideoEncodeH265SliceHeaderFlags"/>
+        <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="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><type>uint32_t</type>                                                                  <name>vpsStdCount</name></member>
+            <member len="vpsStdCount" optional="true">const <type>StdVideoH265VideoParameterSet</type>*    <name>pVpsStd</name></member>
+            <member><type>uint32_t</type>                                                                  <name>spsStdCount</name></member>
+            <member len="spsStdCount" optional="true">const <type>StdVideoH265SequenceParameterSet</type>* <name>pSpsStd</name></member>
+            <member><type>uint32_t</type>                                                                  <name>ppsStdCount</name></member>
+            <member len="ppsStdCount" optional="true">const <type>StdVideoH265PictureParameterSet</type>*  <name>pPpsStd</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>maxVpsStdCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxSpsStdCount</name></member>
+            <member><type>uint32_t</type>                                                            <name>maxPpsStdCount</name></member>
+            <member optional="true">const <type>VkVideoEncodeH265SessionParametersAddInfoEXT</type>* <name>pParametersAddInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265VclFrameInfoEXT" structextends="VkVideoEncodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                       <name>pNext</name></member>
+            <member optional="true">const <type>VkVideoEncodeH265ReferenceListsEXT</type>*         <name>pReferenceFinalLists</name></member>
+            <member><type>uint32_t</type>                                                          <name>naluSliceEntryCount</name></member>
+            <member len="naluSliceEntryCount">const <type>VkVideoEncodeH265NaluSliceEXT</type>*    <name>pNaluSliceEntries</name></member>
+            <member>const <type>StdVideoEncodeH265PictureInfo</type>*                              <name>pCurrentPictureInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265EmitPictureParametersEXT" structextends="VkVideoEncodeInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*             <name>pNext</name></member>
+            <member><type>uint8_t</type>                                 <name>vpsId</name></member>
+            <member><type>uint8_t</type>                                 <name>spsId</name></member>
+            <member><type>VkBool32</type>                                <name>emitVpsEnable</name></member>
+            <member><type>VkBool32</type>                                <name>emitSpsEnable</name></member>
+            <member optional="true"><type>uint32_t</type>                <name>ppsIdEntryCount</name></member>
+            <member len="ppsIdEntryCount">const <type>uint8_t</type>*    <name>ppsIdEntries</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265NaluSliceEXT">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_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>ctbCount</name></member>
+            <member optional="true">const <type>VkVideoEncodeH265ReferenceListsEXT</type>*  <name>pReferenceFinalLists</name></member>
+            <member>const <type>StdVideoEncodeH265SliceHeader</type>*                       <name>pSliceHeaderStd</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265ProfileEXT" structextends="VkVideoProfileKHR,VkQueryPoolCreateInfo,VkFormatProperties2,VkImageCreateInfo,VkImageViewCreateInfo,VkBufferCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_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">
+            <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><type>int8_t</type>                                   <name>slotIndex</name></member>
+            <member>const <type>StdVideoEncodeH265ReferenceInfo</type>*   <name>pStdReferenceInfo</name></member>
+        </type>
+        <type category="struct" name="VkVideoEncodeH265ReferenceListsEXT">
+            <member values="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT"><type>VkStructureType</type><name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                            <name>pNext</name></member>
+            <member optional="true"><type>uint8_t</type>                                                <name>referenceList0EntryCount</name></member>
+            <member len="referenceList0EntryCount">const <type>VkVideoEncodeH265DpbSlotInfoEXT</type>*  <name>pReferenceList0Entries</name></member>
+            <member optional="true"><type>uint8_t</type>                                                <name>referenceList1EntryCount</name></member>
+            <member len="referenceList1EntryCount">const <type>VkVideoEncodeH265DpbSlotInfoEXT</type>*  <name>pReferenceList1Entries</name></member>
+            <member>const <type>StdVideoEncodeH265ReferenceModifications</type>*                        <name>pReferenceModifications</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><type>size_t</type>                 <name>paramCount</name></member>
+            <member len="paramCount">const <type>void</type>* const *    <name>pParams</name></member>
+            <member><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="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR"><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="VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR" structextends="VkPhysicalDeviceProperties2">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_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>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="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="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>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="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="VkFormatProperties3KHR" returnedonly="true" structextends="VkFormatProperties2">
+            <member values="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true"><type>void</type>*                            <name>pNext</name></member>
+            <member optional="true"><type>VkFormatFeatureFlags2KHR</type>         <name>linearTilingFeatures</name></member>
+            <member optional="true"><type>VkFormatFeatureFlags2KHR</type>         <name>optimalTilingFeatures</name></member>
+            <member optional="true"><type>VkFormatFeatureFlags2KHR</type>         <name>bufferFeatures</name></member>
+        </type>
+        <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,false" 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>VkFormatFeatureFlags2KHR</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>VkFormatFeatureFlags2KHR</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="VkPipelineRenderingCreateInfoKHR" structextends="VkGraphicsPipelineCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PIPELINE_RENDERING_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>viewMask</name></member>
+            <member optional="true"><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>
+        </type>
+        <type category="struct" name="VkRenderingInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_RENDERING_INFO_KHR"><type>VkStructureType</type>              <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member optional="true"><type>VkRenderingFlagsKHR</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>VkRenderingAttachmentInfoKHR</type>*             <name>pColorAttachments</name></member>
+            <member optional="true">const <type>VkRenderingAttachmentInfoKHR</type>*                        <name>pDepthAttachment</name></member>
+            <member optional="true">const <type>VkRenderingAttachmentInfoKHR</type>*                        <name>pStencilAttachment</name></member>
+        </type>
+        <type category="struct" name="VkRenderingAttachmentInfoKHR">
+            <member values="VK_STRUCTURE_TYPE_RENDERING_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 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="VkRenderingFragmentShadingRateAttachmentInfoKHR" structextends="VkRenderingInfoKHR">
+            <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="VkRenderingInfoKHR">
+            <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="VkPhysicalDeviceDynamicRenderingFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
+            <member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_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>dynamicRendering</name></member>
+        </type>
+        <type category="struct" name="VkCommandBufferInheritanceRenderingInfoKHR" structextends="VkCommandBufferInheritanceInfo">
+            <member values="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
+            <member optional="true">const <type>void</type>*                                                <name>pNext</name></member>
+            <member optional="true"><type>VkRenderingFlagsKHR</type>                                        <name>flags</name></member>
+            <member><type>uint32_t</type>                                                                   <name>viewMask</name></member>
+            <member><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="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><type>uint32_t</type>                                                                   <name>colorAttachmentCount</name></member>
+            <member optional="false,true" len="colorAttachmentCount">const <type>VkSampleCountFlagBits</type>* <name>pColorAttachmentSamples</name></member>
+            <member 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,VkRenderingInfoKHR">
+            <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>
+    </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="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_EXT"/>
+    </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 a 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>
+
+        <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="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" comment="Note that the gap at bitpos 10 is unused, and can be reserved">
+        <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="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                    name="VK_STENCIL_FRONT_AND_BACK" alias="VK_STENCIL_FACE_FRONT_AND_BACK" comment="Alias for backwards compatibility"/>
+    </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               name="VK_COLORSPACE_SRGB_NONLINEAR_KHR" alias="VK_COLOR_SPACE_SRGB_NONLINEAR_KHR" comment="Backwards-compatible alias containing a typo"/>
+    </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="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" comment="Backwards-compatible alias containing a typo"/>
+        <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"/>
+        <!--<enum value="31"    name="VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT" comment="Removed NVX_device_generated_commands"/>-->
+        <!--<enum value="32"    name="VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT" comment="Removed NVX_device_generated_commands"/>-->
+        <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" comment="Backwards-compatible alias containing a typo"/>
+    </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="VkPrivateDataSlotCreateFlagBitsEXT" 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" comment="Backwards-compatible alias containing a typo"/>
+    </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="VkQueueGlobalPriorityEXT" type="enum">
+        <enum value="128"   name="VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT"/>
+        <enum value="256"   name="VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT"/>
+        <enum value="512"   name="VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT"/>
+        <enum value="1024"  name="VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT"/>
+    </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"/>
+            <unused start="0x10007" 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"/>
+    </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="VkScopeNV" type="enum">
+        <enum value="1"     name="VK_SCOPE_DEVICE_NV"/>
+        <enum value="2"     name="VK_SCOPE_WORKGROUP_NV"/>
+        <enum value="3"     name="VK_SCOPE_SUBGROUP_NV"/>
+        <enum value="5"     name="VK_SCOPE_QUEUE_FAMILY_NV"/>
+    </enums>
+    <enums name="VkComponentTypeNV" type="enum">
+        <enum value="0"     name="VK_COMPONENT_TYPE_FLOAT16_NV"/>
+        <enum value="1"     name="VK_COMPONENT_TYPE_FLOAT32_NV"/>
+        <enum value="2"     name="VK_COMPONENT_TYPE_FLOAT64_NV"/>
+        <enum value="3"     name="VK_COMPONENT_TYPE_SINT8_NV"/>
+        <enum value="4"     name="VK_COMPONENT_TYPE_SINT16_NV"/>
+        <enum value="5"     name="VK_COMPONENT_TYPE_SINT32_NV"/>
+        <enum value="6"     name="VK_COMPONENT_TYPE_SINT64_NV"/>
+        <enum value="7"     name="VK_COMPONENT_TYPE_UINT8_NV"/>
+        <enum value="8"     name="VK_COMPONENT_TYPE_UINT16_NV"/>
+        <enum value="9"     name="VK_COMPONENT_TYPE_UINT32_NV"/>
+        <enum value="10"    name="VK_COMPONENT_TYPE_UINT64_NV"/>
+    </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"/>
+    </enums>
+    <enums name="VkPipelineCreationFeedbackFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"    name="VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT"/>
+        <enum bitpos="1"    name="VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT"/>
+        <enum bitpos="2"    name="VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT"/>
+    </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"/>
+        <enum               name="VK_QUERY_SCOPE_RENDER_PASS_KHR" alias="VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR"/>
+        <enum               name="VK_QUERY_SCOPE_COMMAND_KHR" alias="VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR"/>
+    </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" comment="Backwards-compatible alias containing a typo"/>
+        <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" comment="Backwards-compatible alias containing a typo"/>
+    </enums>
+    <enums name="VkAcquireProfilingLockFlagBitsKHR" type="bitmask">
+    </enums>
+    <enums name="VkShaderCorePropertiesFlagBitsAMD" 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="VkToolPurposeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"     name="VK_TOOL_PURPOSE_VALIDATION_BIT_EXT"/>
+        <enum bitpos="1"     name="VK_TOOL_PURPOSE_PROFILING_BIT_EXT"/>
+        <enum bitpos="2"     name="VK_TOOL_PURPOSE_TRACING_BIT_EXT"/>
+        <enum bitpos="3"     name="VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT"/>
+        <enum bitpos="4"     name="VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT"/>
+    </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="VkAccessFlagBits2KHR" type="bitmask" bitwidth="64">
+        <enum value="0"     name="VK_ACCESS_2_NONE_KHR"/>
+        <enum bitpos="0"    name="VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_ACCESS_2_INDEX_READ_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR"/>
+        <enum bitpos="3"    name="VK_ACCESS_2_UNIFORM_READ_BIT_KHR"/>
+        <enum bitpos="4"    name="VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR"/>
+        <enum bitpos="5"    name="VK_ACCESS_2_SHADER_READ_BIT_KHR"/>
+        <enum bitpos="6"    name="VK_ACCESS_2_SHADER_WRITE_BIT_KHR"/>
+        <enum bitpos="7"    name="VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR"/>
+        <enum bitpos="8"    name="VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR"/>
+        <enum bitpos="9"    name="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR"/>
+        <enum bitpos="10"   name="VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR"/>
+        <enum bitpos="11"   name="VK_ACCESS_2_TRANSFER_READ_BIT_KHR"/>
+        <enum bitpos="12"   name="VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR"/>
+        <enum bitpos="13"   name="VK_ACCESS_2_HOST_READ_BIT_KHR"/>
+        <enum bitpos="14"   name="VK_ACCESS_2_HOST_WRITE_BIT_KHR"/>
+        <enum bitpos="15"   name="VK_ACCESS_2_MEMORY_READ_BIT_KHR"/>
+        <enum bitpos="16"   name="VK_ACCESS_2_MEMORY_WRITE_BIT_KHR"/>
+        <!-- bitpos 17-31 are specified by extensions to the original VkAccessFlagBits enum -->
+        <enum bitpos="32"   name="VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR"/>
+        <enum bitpos="33"   name="VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR"/>
+        <enum bitpos="34"   name="VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR"/>
+    </enums>
+    <enums name="VkPipelineStageFlagBits2KHR" type="bitmask" bitwidth="64">
+        <enum value="0"    name="VK_PIPELINE_STAGE_2_NONE_KHR"/>
+        <enum bitpos="0"    name="VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR"/>
+        <enum bitpos="3"    name="VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR"/>
+        <enum bitpos="4"    name="VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR"/>
+        <enum bitpos="5"    name="VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR"/>
+        <enum bitpos="6"    name="VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR"/>
+        <enum bitpos="7"    name="VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR"/>
+        <enum bitpos="8"    name="VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR"/>
+        <enum bitpos="9"    name="VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR"/>
+        <enum bitpos="10"   name="VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR"/>
+        <enum bitpos="11"   name="VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR"/>
+        <enum bitpos="12"   name="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_KHR"/>
+        <enum bitpos="13"   name="VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR"/>
+        <enum bitpos="14"   name="VK_PIPELINE_STAGE_2_HOST_BIT_KHR"/>
+        <enum bitpos="15"   name="VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR"/>
+        <enum bitpos="16"   name="VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR"/>
+        <!-- bitpos 17-31 are specified by extensions to the original VkPipelineStageFlagBits enum -->
+        <enum bitpos="32"   name="VK_PIPELINE_STAGE_2_COPY_BIT_KHR"/>
+        <enum bitpos="33"   name="VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR"/>
+        <enum bitpos="34"   name="VK_PIPELINE_STAGE_2_BLIT_BIT_KHR"/>
+        <enum bitpos="35"   name="VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR"/>
+        <enum bitpos="36"   name="VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR"/>
+        <enum bitpos="37"   name="VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR"/>
+        <enum bitpos="38"   name="VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR"/>
+    </enums>
+    <enums name="VkSubmitFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_SUBMIT_PROTECTED_BIT_KHR"/>
+    </enums>
+    <enums name="VkEventCreateFlagBits" type="bitmask">
+    </enums>
+    <enums name="VkPipelineLayoutCreateFlagBits" type="bitmask">
+    </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="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="VkVideoCodecOperationFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoChromaSubsamplingFlagBitsKHR" type="bitmask" comment="Vulkan video chroma subsampling definitions">
+        <enum value="0"     name="VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_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 value="0"     name="VK_VIDEO_SESSION_CREATE_DEFAULT_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoCodingQualityPresetFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"       name="VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR"/>
+        <enum bitpos="1"       name="VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR"/>
+        <enum bitpos="2"       name="VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoDecodeH264PictureLayoutFlagBitsEXT" type="bitmask">
+        <enum value="0"       name="VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT"/>
+        <enum bitpos="0"      name="VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoCodingControlFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_CODING_CONTROL_DEFAULT_KHR"/>
+        <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="VkVideoDecodeFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_DECODE_DEFAULT_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_DECODE_RESERVED_0_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_ENCODE_DEFAULT_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeRateControlFlagBitsKHR" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR"/>
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeRateControlModeFlagBitsKHR" type="bitmask">
+        <enum value="0"      name="VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR"/>
+        <enum value="1"      name="VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR"/>
+        <enum value="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_CABAC_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT"/>
+        <enum bitpos="3"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT"/>
+        <enum bitpos="4"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT"/>
+        <enum bitpos="5"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT"/>
+        <enum bitpos="6"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT"/>
+        <enum bitpos="7"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT"/>
+        <enum bitpos="8"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT"/>
+        <enum bitpos="9"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT"/>
+        <enum bitpos="10"      name="VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH264InputModeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH264OutputModeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH264CreateFlagBitsEXT" type="bitmask">
+        <enum value="0"     name="VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT"/>
+        <enum bitpos="0"    name="VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_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="VkFormatFeatureFlagBits2KHR" type="bitmask" bitwidth="64">
+      <enum bitpos="0"  name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR"/>
+      <enum bitpos="1"  name="VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR"/>
+      <enum bitpos="2"  name="VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR"/>
+      <enum bitpos="3"  name="VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR"/>
+      <enum bitpos="4"  name="VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR"/>
+      <enum bitpos="5"  name="VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR"/>
+      <enum bitpos="6"  name="VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR"/>
+      <enum bitpos="7"  name="VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR"/>
+      <enum bitpos="8"  name="VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR"/>
+      <enum bitpos="9"  name="VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR"/>
+      <enum bitpos="10" name="VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR"/>
+      <enum bitpos="11" name="VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR"/>
+      <enum bitpos="12" name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR"/>
+      <enum bitpos="13" name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT"/>
+      <enum bitpos="14" name="VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR"/>
+      <enum bitpos="15" name="VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR"/>
+      <enum bitpos="16" name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR"/>
+      <enum bitpos="17" name="VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR"/>
+      <enum bitpos="18" name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR"/>
+      <enum bitpos="19" name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR"/>
+      <enum bitpos="20" name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR"/>
+      <enum bitpos="21" name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR"/>
+      <enum bitpos="22" name="VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR"/>
+      <enum bitpos="23" name="VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR"/>
+      <enum bitpos="31" name="VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR"/>
+      <enum bitpos="32" name="VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR"/>
+      <enum bitpos="33" name="VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR"/>
+    </enums>
+    <enums name="VkVideoEncodeH265InputModeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH265OutputModeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT"/>
+    </enums>
+    <enums name="VkVideoEncodeH265CtbSizeFlagBitsEXT" type="bitmask">
+        <enum bitpos="0"      name="VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT"/>
+        <enum bitpos="1"      name="VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT"/>
+        <enum bitpos="2"      name="VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT"/>
+        <enum bitpos="3"      name="VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT"/>
+    </enums>
+    <enums name="VkRenderingFlagBitsKHR" type="bitmask">
+        <enum bitpos="0"    name="VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR"/>
+        <enum bitpos="1"    name="VK_RENDERING_SUSPENDING_BIT_KHR"/>
+        <enum bitpos="2"    name="VK_RENDERING_RESUMING_BIT_KHR"/>
+    </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 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>
+            <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 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 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" devicememoryhandle="1"><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" devicememoryhandle="1"><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" devicememoryhandle="1"><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 devicememoryhandle="1"><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param devicememoryoffset="1"><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 devicememoryhandle="1"><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param devicememoryoffset="1"><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 devicememoryhandle="1"><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param devicememoryoffset="1"><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" externsync="pBindInfo[].pBufferBinds[].buffer,pBindInfo[].pImageOpaqueBinds[].image,pBindInfo[].pImageBinds[].image">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">
+            <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">
+            <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 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>
+            <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 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 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 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">
+            <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" externsync="pDescriptorWrites[].dstSet">const <type>VkWriteDescriptorSet</type>* <name>pDescriptorWrites</name></param>
+            <param optional="true"><type>uint32_t</type> <name>descriptorCopyCount</name></param>
+            <param len="descriptorCopyCount" externsync="pDescriptorCopies[].dstSet">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 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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">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">
+            <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">
+            <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">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">
+            <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">
+            <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">
+            <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">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">
+            <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">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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <proto><type>void</type> <name>vkCmdSubpassShadingHUAWEI</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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" 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">
+            <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>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">
+            <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">
+            <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">
+            <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" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <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" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <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" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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">
+            <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">
+            <proto><type>void</type> <name>vkCmdEndConditionalRenderingEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <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" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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 len="swapchainCount" externsync="pCreateInfos[].surface,pCreateInfos[].oldSwapchain">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><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><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">
+            <proto><type>VkResult</type> <name>vkCreateSwapchainKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="pCreateInfo-&gt;surface,pCreateInfo-&gt;oldSwapchain">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">
+            <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">
+            <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">
+            <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 devicememoryhandle="1"><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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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>
+            <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">
+            <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" cmdbufferlevel="primary,secondary">
+            <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">
+            <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 externsync="true"><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">
+            <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">
+            <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">
+            <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">
+            <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>
+            <proto><type>void</type> <name>vkGetDeviceBufferMemoryRequirementsKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceBufferMemoryRequirementsKHR</type>* <name>pInfo</name></param>
+            <param><type>VkMemoryRequirements2</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceImageMemoryRequirementsKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceImageMemoryRequirementsKHR</type>* <name>pInfo</name></param>
+            <param><type>VkMemoryRequirements2</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetDeviceImageSparseMemoryRequirementsKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkDeviceImageMemoryRequirementsKHR</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 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>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 optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></param>
+            <param noautovalidity="true" 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">
+            <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">
+            <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">
+            <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 optional="false">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">
+            <proto><type>void</type> <name>vkCmdWriteBufferMarkerAMD</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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 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>vkMapMemoryIntoAddressSpaceGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true" devicememoryhandle="1"><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param optional="false,true"><type>uint64_t</type>* <name>pAddress</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkRegisterImageColorBufferGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>uint32_t</type> <name>colorBuffer</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkRegisterBufferColorBufferGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>uint32_t</type> <name>colorBuffer</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkUpdateDescriptorSetWithTemplateSizedGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkDescriptorSet</type> <name>descriptorSet</name></param>
+            <param><type>VkDescriptorUpdateTemplate</type> <name>descriptorUpdateTemplate</name></param>
+            <param><type>uint32_t</type> <name>imageInfoCount</name></param>
+            <param><type>uint32_t</type> <name>bufferInfoCount</name></param>
+            <param><type>uint32_t</type> <name>bufferViewCount</name></param>
+            <param optional="true" len="imageInfoCount">const <type>uint32_t</type>* <name>pImageInfoEntryIndices</name></param>
+            <param optional="true" len="bufferInfoCount">const <type>uint32_t</type>* <name>pBufferInfoEntryIndices</name></param>
+            <param optional="true" len="bufferViewCount">const <type>uint32_t</type>* <name>pBufferViewEntryIndices</name></param>
+            <param optional="true" len="imageInfoCount">const <type>VkDescriptorImageInfo</type>* <name>pImageInfos</name></param>
+            <param optional="true" len="bufferInfoCount">const <type>VkDescriptorBufferInfo</type>* <name>pBufferInfos</name></param>
+            <param optional="true" len="bufferViewCount">const <type>VkBufferView</type>* <name>pBufferViews</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkBeginCommandBufferAsyncGOOGLE</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>
+            <proto><type>void</type> <name>vkEndCommandBufferAsyncGOOGLE</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>
+            <proto><type>void</type> <name>vkResetCommandBufferAsyncGOOGLE</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkCommandBufferResetFlags</type> <name>flags</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkCommandBufferHostSyncGOOGLE</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>uint32_t</type> <name>needHostSync</name></param>
+            <param><type>uint32_t</type> <name>sequenceNumber</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>vkCreateImageWithRequirementsGOOGLE</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>
+            <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>vkCreateBufferWithRequirementsGOOGLE</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>
+            <param><type>VkMemoryRequirements</type>* <name>pMemoryRequirements</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkGetMemoryHostAddressInfoGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true" devicememoryhandle="1"><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param optional="false,true"><type>uint64_t</type>* <name>pAddress</name></param>
+            <param optional="false,true"><type>uint64_t</type>* <name>pSize</name></param>
+            <param optional="false,true"><type>uint64_t</type>* <name>pHostmemId</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>vkFreeMemorySyncGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true" devicememoryhandle="1"><type>VkDeviceMemory</type> <name>memory</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueHostSyncGOOGLE</name></proto>
+            <param externsync="true"><type>VkQueue</type> <name>queue</name></param>
+            <param><type>uint32_t</type> <name>needHostSync</name></param>
+            <param><type>uint32_t</type> <name>sequenceNumber</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueSubmitAsyncGOOGLE</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" externsync="pSubmits[].pWaitSemaphores[],pSubmits[].pSignalSemaphores[]">const <type>VkSubmitInfo</type>* <name>pSubmits</name></param>
+            <param optional="true" externsync="true"><type>VkFence</type> <name>fence</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueWaitIdleAsyncGOOGLE</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+        </command>
+        <command queues="sparse_binding">
+            <proto><type>void</type> <name>vkQueueBindSparseAsyncGOOGLE</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" externsync="pBindInfo[].pWaitSemaphores[],pBindInfo[].pSignalSemaphores[],pBindInfo[].pBufferBinds[].buffer,pBindInfo[].pImageOpaqueBinds[].image,pBindInfo[].pImageBinds[].image">const <type>VkBindSparseInfo</type>* <name>pBindInfo</name></param>
+            <param optional="true" externsync="true"><type>VkFence</type> <name>fence</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetLinearImageLayoutGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkFormat</type> <name>format</name></param>
+            <param><type>VkDeviceSize</type>* <name>pOffset</name></param>
+            <param><type>VkDeviceSize</type>* <name>pRowPitchAlignment</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueFlushCommandsGOOGLE</name></proto>
+            <param externsync="true"><type>VkQueue</type> <name>queue</name></param>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkDeviceSize</type> <name>dataSize</name></param>
+            <param len="dataSize">const <type>void</type>* <name>pData</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetMTLDeviceMVK</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>void</type>** <name>pMTLDevice</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS">
+            <proto><type>VkResult</type> <name>vkSetMTLTextureMVK</name></proto>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>void</type>* <name>mtlTexture</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetMTLTextureMVK</name></proto>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>void</type>** <name>pMTLTexture</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetMTLBufferMVK</name></proto>
+            <param><type>VkBuffer</type> <name>buffer</name></param>
+            <param><type>void</type>** <name>pMTLBuffer</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS">
+            <proto><type>VkResult</type> <name>vkUseIOSurfaceMVK</name></proto>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>void</type>* <name>ioSurface</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetIOSurfaceMVK</name></proto>
+            <param><type>VkImage</type> <name>image</name></param>
+            <param><type>void</type>**  <name>pIOSurface</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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">
+            <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">
+            <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" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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 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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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 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 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 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">
+            <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>
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <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">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceToolPropertiesEXT</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>VkPhysicalDeviceToolPropertiesEXT</type>* <name>pToolProperties</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>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">
+            <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">
+            <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 queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetCullModeEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param optional="true"><type>VkCullModeFlags</type> <name>cullMode</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetFrontFaceEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkFrontFace</type> <name>frontFace</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetPrimitiveTopologyEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkPrimitiveTopology</type> <name>primitiveTopology</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetViewportWithCountEXT</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 queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetScissorWithCountEXT</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 queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdBindVertexBuffers2EXT</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 queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetDepthTestEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthTestEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetDepthWriteEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthWriteEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetDepthCompareOpEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkCompareOp</type> <name>depthCompareOp</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetDepthBoundsTestEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthBoundsTestEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetStencilTestEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>stencilTestEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetStencilOpEXT</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 queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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">
+            <proto><type>void</type> <name>vkCmdSetRasterizerDiscardEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>rasterizerDiscardEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetDepthBiasEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>depthBiasEnable</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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">
+            <proto><type>void</type> <name>vkCmdSetPrimitiveRestartEnableEXT</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param><type>VkBool32</type> <name>primitiveRestartEnable</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreatePrivateDataSlotEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkPrivateDataSlotCreateInfoEXT</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkPrivateDataSlotEXT</type>* <name>pPrivateDataSlot</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyPrivateDataSlotEXT</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param optional="true" externsync="true"><type>VkPrivateDataSlotEXT</type> <name>privateDataSlot</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">
+            <proto><type>VkResult</type> <name>vkSetPrivateDataEXT</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>VkPrivateDataSlotEXT</type> <name>privateDataSlot</name></param>
+            <param><type>uint64_t</type> <name>data</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPrivateDataEXT</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>VkPrivateDataSlotEXT</type> <name>privateDataSlot</name></param>
+            <param><type>uint64_t</type>* <name>pData</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdCopyBuffer2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyBufferInfo2KHR</type>* <name>pCopyBufferInfo</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdCopyImage2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyImageInfo2KHR</type>* <name>pCopyImageInfo</name></param>
+        </command>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdBlitImage2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkBlitImageInfo2KHR</type>* <name>pBlitImageInfo</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdCopyBufferToImage2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyBufferToImageInfo2KHR</type>* <name>pCopyBufferToImageInfo</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdCopyImageToBuffer2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCopyImageToBufferInfo2KHR</type>* <name>pCopyImageToBufferInfo</name></param>
+        </command>
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdResolveImage2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkResolveImageInfo2KHR</type>* <name>pResolveImageInfo</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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">
+            <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>
+            <proto><type>void</type> <name>vkQueueCommitDescriptorSetUpdatesGOOGLE</name></proto>
+            <param externsync="true"><type>VkQueue</type> <name>queue</name></param>
+            <param externsync="true"><type>uint32_t</type> <name>descriptorPoolCount</name></param>
+            <param len="descriptorPoolCount" externsync="true">const <type>VkDescriptorPool</type>* <name>pDescriptorPools</name></param>
+            <param externsync="true"><type>uint32_t</type> <name>descriptorSetCount</name></param>
+            <param len="descriptorSetCount" externsync="true">const <type>VkDescriptorSetLayout</type>* <name>pSetLayouts</name></param>
+            <param len="descriptorSetCount" externsync="true">const <type>uint64_t</type>* <name>pDescriptorSetPoolIds</name></param>
+            <param len="descriptorSetCount" externsync="true">const <type>uint32_t</type>* <name>pDescriptorSetWhichPool</name></param>
+            <param len="descriptorSetCount" externsync="true">const <type>uint32_t</type>* <name>pDescriptorSetPendingAllocation</name></param>
+            <param len="descriptorSetCount" externsync="true">const <type>uint32_t</type>* <name>pDescriptorWriteStartingIndices</name></param>
+            <param externsync="true"><type>uint32_t</type> <name>pendingDescriptorWriteCount</name></param>
+            <param len="pendingDescriptorWriteCount" externsync="true">const <type>VkWriteDescriptorSet</type>* <name>pPendingDescriptorWrites</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkCollectDescriptorPoolIdsGOOGLE</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkDescriptorPool</type> <name>descriptorPool</name></param>
+            <param optiona="false,true"><type>uint32_t</type>* <name>pPoolIdCount</name></param>
+            <param optional="true" len="pPoolIdCount"><type>uint64_t</type>* <name>pPoolIds</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkQueueSignalReleaseImageANDROIDAsyncGOOGLE</name></proto>
+            <param><type>VkQueue</type> <name>queue</name></param>
+            <param optional="true"><type>uint32_t</type> <name>waitSemaphoreCount</name></param>
+            <param noautovalidity="true" len="waitSemaphoreCount">const <type>VkSemaphore</type>* <name>pWaitSemaphores</name></param>
+            <param><type>VkImage</type> <name>image</name></param>
+        </command>
+        <command queues="graphics" renderpass="both" cmdbufferlevel="primary,secondary">
+            <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">
+            <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" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdSetEvent2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param><type>VkEvent</type>                                             <name>event</name></param>
+            <param>const <type>VkDependencyInfoKHR</type>*                          <name>pDependencyInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdResetEvent2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param><type>VkEvent</type>                                             <name>event</name></param>
+            <param><type>VkPipelineStageFlags2KHR</type>                            <name>stageMask</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdWaitEvents2KHR</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>VkDependencyInfoKHR</type>*         <name>pDependencyInfos</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdPipelineBarrier2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param>const <type>VkDependencyInfoKHR</type>*                                <name>pDependencyInfo</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>vkQueueSubmit2KHR</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>VkSubmitInfo2KHR</type>*           <name>pSubmits</name></param>
+            <param optional="true" externsync="true"><type>VkFence</type>           <name>fence</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdWriteTimestamp2KHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param><type>VkPipelineStageFlags2KHR</type>                            <name>stage</name></param>
+            <param><type>VkQueryPool</type>                                         <name>queryPool</name></param>
+            <param><type>uint32_t</type>                                            <name>query</name></param>
+        </command>
+        <command queues="transfer,graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdWriteBufferMarker2AMD</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param><type>VkPipelineStageFlags2KHR</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_EXTENSION_NOT_PRESENT,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_FEATURE_NOT_PRESENT,VK_ERROR_FORMAT_NOT_SUPPORTED">
+            <proto><type>VkResult</type> <name>vkGetPhysicalDeviceVideoCapabilitiesKHR</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param>const <type>VkVideoProfileKHR</type>* <name>pVideoProfile</name></param>
+            <param><type>VkVideoCapabilitiesKHR</type>* <name>pCapabilities</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>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_INITIALIZATION_FAILED,VK_ERROR_INCOMPATIBLE_DRIVER,VK_ERROR_FEATURE_NOT_PRESENT">
+            <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><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_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_TOO_MANY_OBJECTS">
+            <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_INITIALIZATION_FAILED,VK_ERROR_TOO_MANY_OBJECTS">
+            <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>
+            <proto><type>void</type> <name>vkDestroyVideoSessionParametersKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><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" errorcodes="VK_ERROR_INITIALIZATION_FAILED">
+            <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>pVideoSessionMemoryRequirementsCount</name></param>
+            <param optional="true" len="pVideoSessionMemoryRequirementsCount"><type>VkVideoGetMemoryPropertiesKHR</type>* <name>pVideoSessionMemoryRequirements</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>vkBindVideoSessionMemoryKHR</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkVideoSessionKHR</type> <name>videoSession</name></param>
+            <param><type>uint32_t</type> <name>videoSessionBindMemoryCount</name></param>
+            <param len="videoSessionBindMemoryCount">const <type>VkVideoBindMemoryKHR</type>* <name>pVideoSessionBindMemories</name></param>
+        </command>
+        <command queues="decode" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdDecodeVideoKHR</name></proto>
+            <param><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoDecodeInfoKHR</type>* <name>pFrameInfo</name></param>
+        </command>
+        <command queues="decode,encode" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdBeginVideoCodingKHR</name></proto>
+            <param><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoBeginCodingInfoKHR</type>* <name>pBeginInfo</name></param>
+        </command>
+        <command queues="decode,encode" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdControlVideoCodingKHR</name></proto>
+            <param><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoCodingControlInfoKHR</type>* <name>pCodingControlInfo</name></param>
+        </command>
+        <command queues="decode,encode" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdEndVideoCodingKHR</name></proto>
+            <param><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoEndCodingInfoKHR</type>* <name>pEndCodingInfo</name></param>
+        </command>
+        <command queues="encode" renderpass="outside" cmdbufferlevel="primary">
+            <proto><type>void</type> <name>vkCmdEncodeVideoKHR</name></proto>
+            <param><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkVideoEncodeInfoKHR</type>* <name>pEncodeInfo</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">
+            <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>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" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST">
+            <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 queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdBeginRenderingKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+            <param>const <type>VkRenderingInfoKHR</type>*                           <name>pRenderingInfo</name></param>
+        </command>
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdEndRenderingKHR</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type>                   <name>commandBuffer</name></param>
+        </command>
+    </commands>
+
+    <feature api="vulkan" 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="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="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"/>
+            <type name="VkPipelineCacheHeaderVersion"/>
+        </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" comment="Will add VkInstanceCreateFlagBits when bits are defined in the future"/>
+            <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" 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 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 weren't 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 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" 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>
+
+    <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">
+            <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" requires="VK_KHR_surface" author="KHR" contact="James Jones @cubanismo,Ian Elliott @ianelliottus" supported="vulkan">
+            <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 feature="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" requires="VK_KHR_surface" author="KHR" contact="James Jones @cubanismo,Norbert Nopper @FslNopper" supported="vulkan">
+            <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" requires="VK_KHR_swapchain,VK_KHR_display" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
+            <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" requires="VK_KHR_surface" platform="xlib" author="KHR" contact="Jesse Hall @critsec,Ian Elliott @ianelliottus" supported="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" requires="VK_KHR_surface" platform="xcb" author="KHR" contact="Jesse Hall @critsec,Ian Elliott @ianelliottus" supported="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" requires="VK_KHR_surface" platform="wayland" author="KHR" contact="Jesse Hall @critsec,Ian Elliott @ianelliottus" supported="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" requires="VK_KHR_surface" author="KHR" supported="disabled" comment="Extension permanently disabled. Extension number should not be reused">
+            <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" requires="VK_KHR_surface" platform="android" author="KHR" contact="Jesse Hall @critsec" supported="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" requires="VK_KHR_surface" platform="win32" author="KHR" contact="Jesse Hall @critsec,Ian Elliott @ianelliottus" supported="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>
+        <!-- TODO(liyl): spec version 8 has some types that are not supported yet. -->
+        <extension name="VK_ANDROID_native_buffer" number="11" type="device" author="ANDROID" platform="android" contact="Jesse Hall @critsec" supported="vulkan">
+            <require>
+                <enum value="6"                                                 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"/>
+                <type name="VkNativeBufferANDROID"/>
+                <command name="vkGetSwapchainGrallocUsageANDROID"/>
+                <command name="vkAcquireImageANDROID"/>
+                <command name="vkQueueSignalReleaseImageANDROID"/>
+            </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" comment="Backwards-compatible alias containing a typo"/>
+                <enum offset="1" extends="VkResult" dir="-"                     name="VK_ERROR_VALIDATION_FAILED_EXT"/>
+                <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 feature="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">
+            <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">
+            <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" comment="Alias 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 offset="0" extends="VkFilter"                             name="VK_FILTER_CUBIC_IMG"/>
+                <enum bitpos="13" extends="VkFormatFeatureFlagBits"             name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG" 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" requires="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" requires="VK_KHR_get_physical_device_properties2,VK_KHR_sampler_ycbcr_conversion" author="KHR" contact="Tony Zlatinski @tzlatinski" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="2"                                         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_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="6" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="7" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="8" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="9" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="10" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="11" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="12" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="13" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="14" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="15" extends="VkStructureType"             name="VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <enum offset="0"  extends="VkObjectType"                name="VK_OBJECT_TYPE_VIDEO_SESSION_KHR"             comment="VkVideoSessionKHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1"  extends="VkObjectType"                name="VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR"  comment="VkVideoSessionParametersKHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <enum offset="0" extends="VkQueryType"                  name="VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="4" extends="VkQueryResultFlagBits"        name="VK_QUERY_RESULT_WITH_STATUS_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <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="VkVideoBeginCodingFlagsKHR"/>
+                <type name="VkVideoEndCodingFlagsKHR"/>
+                <type name="VkVideoCodingControlFlagBitsKHR"/>
+                <type name="VkVideoCodingControlFlagsKHR"/>
+                <type name="VkVideoCodingQualityPresetFlagBitsKHR"/>
+                <type name="VkVideoCodingQualityPresetFlagsKHR"/>
+
+                <type name="VkQueryResultStatusKHR"/>
+
+                <type name="VkVideoQueueFamilyProperties2KHR"/>
+                <type name="VkVideoProfileKHR"/>
+                <type name="VkVideoProfilesKHR"/>
+                <type name="VkVideoCapabilitiesKHR"/>
+                <type name="VkPhysicalDeviceVideoFormatInfoKHR"/>
+                <type name="VkVideoFormatPropertiesKHR"/>
+                <type name="VkVideoPictureResourceKHR"/>
+                <type name="VkVideoReferenceSlotKHR"/>
+                <type name="VkVideoGetMemoryPropertiesKHR"/>
+                <type name="VkVideoBindMemoryKHR"/>
+                <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" requires="VK_KHR_video_queue,VK_KHR_synchronization2" author="KHR" contact="jake.beju@amd.com" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="2"                                         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" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="5" extends="VkQueueFlagBits"              name="VK_QUEUE_VIDEO_DECODE_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="26" extends="VkPipelineStageFlagBits2KHR" name="VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="35" extends="VkAccessFlagBits2KHR"        name="VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS" />
+                <enum bitpos="36" extends="VkAccessFlagBits2KHR"        name="VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="13" extends="VkBufferUsageFlagBits"       name="VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="14" extends="VkBufferUsageFlagBits"       name="VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="10" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="11" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="12" extends="VkImageUsageFlagBits"        name="VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="25" extends="VkFormatFeatureFlagBits"     name="VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="26" extends="VkFormatFeatureFlagBits"     name="VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="0" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkImageLayout"                name="VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <type name="VkVideoDecodeFlagBitsKHR"/>
+                <type name="VkVideoDecodeFlagsKHR"/>
+
+                <type name="VkVideoDecodeInfoKHR"/>
+                <command name="vkCmdDecodeVideoKHR"/>
+            </require>
+            <require extension="VK_KHR_format_feature_flags2">
+                <enum bitpos="25" extends="VkFormatFeatureFlagBits2KHR"     name="VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="26" extends="VkFormatFeatureFlagBits2KHR"     name="VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+            </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" requires="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"/>
+                <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"/>
+                <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>
+        </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" requires="VK_KHR_video_encode_queue" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="2"                                                 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_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="5" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="6" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="7" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="8" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_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="VkVideoEncodeH264InputModeFlagBitsEXT"/>
+                <type name="VkVideoEncodeH264InputModeFlagsEXT"/>
+                <type name="VkVideoEncodeH264OutputModeFlagBitsEXT"/>
+                <type name="VkVideoEncodeH264OutputModeFlagsEXT"/>
+                <type name="VkVideoEncodeH264CreateFlagBitsEXT"/>
+                <type name="VkVideoEncodeH264CreateFlagsEXT"/>
+                <type name="VkVideoEncodeH264CapabilitiesEXT"/>
+                <type name="VkVideoEncodeH264SessionCreateInfoEXT"/>
+                <type name="VkVideoEncodeH264SessionParametersCreateInfoEXT"/>
+                <type name="VkVideoEncodeH264SessionParametersAddInfoEXT"/>
+                <type name="VkVideoEncodeH264VclFrameInfoEXT"/>
+                <type name="VkVideoEncodeH264EmitPictureParametersEXT"/>
+                <type name="VkVideoEncodeH264DpbSlotInfoEXT"/>
+                <type name="VkVideoEncodeH264NaluSliceEXT"/>
+                <type name="VkVideoEncodeH264ProfileEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_video_encode_h265" number="40" type="device" requires="VK_KHR_video_encode_queue" author="KHR" contact="Ahmed Abdelkhalek @aabdelkh" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="2"                                              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_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="5" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="6" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="7" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="8" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="9" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_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="VkVideoEncodeH265CapabilityFlagsEXT"/>
+                <type name="VkVideoEncodeH265InputModeFlagBitsEXT"/>
+                <type name="VkVideoEncodeH265InputModeFlagsEXT"/>
+                <type name="VkVideoEncodeH265OutputModeFlagBitsEXT"/>
+                <type name="VkVideoEncodeH265OutputModeFlagsEXT"/>
+                <type name="VkVideoEncodeH265CreateFlagsEXT" comment="Will add VkVideoEncodeH265CreateFlagBitsEXT when bits are defined in the future"/>
+
+                <type name="VkVideoEncodeH265CtbSizeFlagBitsEXT"/>
+                <type name="VkVideoEncodeH265CtbSizeFlagsEXT"/>
+                <type name="VkVideoEncodeH265CapabilitiesEXT"/>
+                <type name="VkVideoEncodeH265SessionCreateInfoEXT"/>
+                <type name="VkVideoEncodeH265SessionParametersCreateInfoEXT"/>
+                <type name="VkVideoEncodeH265SessionParametersAddInfoEXT"/>
+                <type name="VkVideoEncodeH265VclFrameInfoEXT"/>
+                <type name="VkVideoEncodeH265EmitPictureParametersEXT"/>
+                <type name="VkVideoEncodeH265DpbSlotInfoEXT"/>
+                <type name="VkVideoEncodeH265NaluSliceEXT"/>
+                <type name="VkVideoEncodeH265ProfileEXT"/>
+                <type name="VkVideoEncodeH265ReferenceListsEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_video_decode_h264" number="41" type="device" requires="VK_KHR_video_decode_queue" author="KHR" contact="peter.fang@amd.com" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="3"                                              name="VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_video_decode_h264&quot;"           name="VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="5" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="6" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="7" extends="VkStructureType"                   name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="0" extends="VkVideoCodecOperationFlagBitsKHR"  name="VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <type name="VkVideoDecodeH264PictureLayoutFlagBitsEXT"/>
+                <type name="VkVideoDecodeH264PictureLayoutFlagsEXT"/>
+                <type name="VkVideoDecodeH264CreateFlagsEXT"/>
+                <type name="VkVideoDecodeH264ProfileEXT"/>
+                <type name="VkVideoDecodeH264CapabilitiesEXT"/>
+                <type name="VkVideoDecodeH264SessionCreateInfoEXT"/>
+                <type name="VkVideoDecodeH264SessionParametersCreateInfoEXT"/>
+                <type name="VkVideoDecodeH264SessionParametersAddInfoEXT"/>
+                <type name="VkVideoDecodeH264PictureInfoEXT"/>
+                <type name="VkVideoDecodeH264MvcEXT"/>
+                <type name="VkVideoDecodeH264DpbSlotInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_texture_gather_bias_lod" number="42" author="AMD" contact="Rex Xu @amdrexu" supported="vulkan" type="device" requires="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" requires="VK_KHR_get_physical_device_properties2" contact="Tobias Hector @tobski" supported="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 offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_RENDERING_INFO_KHR"/>
+                <enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR"/>
+                <enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR"/>
+                <enum offset="3" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR"/>
+                <enum offset="4" extends="VkStructureType" name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR"/>
+                <enum offset="0" extends="VkAttachmentStoreOp" extnumber="302" name="VK_ATTACHMENT_STORE_OP_NONE_KHR"/>
+                <type name="VkRenderingInfoKHR"/>
+                <type name="VkRenderingAttachmentInfoKHR"/>
+                <type name="VkPipelineRenderingCreateInfoKHR"/>
+                <type name="VkPhysicalDeviceDynamicRenderingFeaturesKHR"/>
+                <type name="VkCommandBufferInheritanceRenderingInfoKHR"/>
+                <type name="VkRenderingFlagsKHR"/>
+                <type name="VkRenderingFlagBitsKHR"/>
+            </require>
+            <require extension="VK_KHR_fragment_shading_rate">
+                <enum bitpos="21" extends="VkPipelineCreateFlagBits" name="VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum offset="6" extends="VkStructureType" name="VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR"/>
+                <type name="VkRenderingFragmentShadingRateAttachmentInfoKHR"/>
+            </require>
+            <require extension="VK_EXT_fragment_density_map">
+                <enum bitpos="22" extends="VkPipelineCreateFlagBits" name="VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT"/>
+                <enum offset="7" extends="VkStructureType" name="VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT"/>
+                <type name="VkRenderingFragmentDensityMapAttachmentInfoEXT"/>
+            </require>
+            <require extension="VK_AMD_mixed_attachment_samples">
+                <enum offset="8" extends="VkStructureType" name="VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD"/>
+                <type name="VkAttachmentSampleCountInfoAMD"/>
+            </require>
+            <require extension="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 extension="VK_NVX_multiview_per_view_attributes">
+                <enum offset="9" extends="VkStructureType" 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" requires="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" requires="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_extension_52" number="52" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_NV_EXTENSION_52_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_52&quot;"                    name="VK_NV_EXTENSION_52_EXTENSION_NAME"/>
+                <enum bitpos="0" extends="VkShaderModuleCreateFlagBits"         name="VK_SHADER_MODULE_CREATE_RESERVED_0_BIT_NV"/>
+                <enum bitpos="2" extends="VkPipelineShaderStageCreateFlagBits"  name="VK_PIPELINE_SHADER_STAGE_CREATE_RESERVED_2_BIT_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" requires="VK_KHR_get_physical_device_properties2" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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">
+            <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" requires="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" requires="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" requires="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">
+            <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" requires="VK_KHR_device_group_creation" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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 extension="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 extension="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 extension="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" requires="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">
+            <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" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" requires="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <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 offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="0" name="VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="1" name="VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="2" name="VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="3" name="VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="4" name="VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="5" name="VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="6" name="VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="7" name="VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="8" name="VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="9" name="VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="10" name="VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="11" name="VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="12" name="VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT"/>
+                <enum extends="VkFormat" extnumber="67" offset="13" name="VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_astc_decode_mode" number="68" type="device" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" requires="VK_KHR_get_physical_device_properties2" supported="vulkan">
+            <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_IMG_extension_69" number="69" type="device" author="IMG" contact="Tobias Hector @tobski" supported="disabled">
+            <require>
+                <enum value="0"                                                 name="VK_IMG_EXTENSION_69_SPEC_VERSION"/>
+                <enum value="&quot;VK_IMG_extension_69&quot;"                   name="VK_IMG_EXTENSION_69_EXTENSION_NAME"/>
+            </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">
+            <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" comment="Backwards-compatible alias containing a typo"/>
+                <enum alias="VK_KHR_MAINTENANCE_1_EXTENSION_NAME"               name="VK_KHR_MAINTENANCE1_EXTENSION_NAME" comment="Backwards-compatible alias containing a typo"/>
+                <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">
+            <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" requires="VK_KHR_get_physical_device_properties2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" requires="VK_KHR_external_memory_capabilities" author="KHR" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" requires="VK_KHR_external_memory" author="KHR" contact="James Jones @cubanismo" platform="win32" supported="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" requires="VK_KHR_external_memory" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
+            <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" requires="VK_KHR_external_memory_win32" author="KHR" contact="Carsten Rohde @crohde" platform="win32" supported="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" requires="VK_KHR_get_physical_device_properties2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" requires="VK_KHR_external_semaphore_capabilities" author="KHR" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" requires="VK_KHR_external_semaphore" author="KHR" contact="James Jones @cubanismo" platform="win32" supported="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" requires="VK_KHR_external_semaphore" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" contact="Jeff Bolz @jeffbolznv" supported="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 feature="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 extension="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" 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" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="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">
+            <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" requires="VK_KHR_swapchain" contact="Ian Elliott @ianelliottus" supported="vulkan">
+            <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">
+            <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 extension="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 extension="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" requires="VK_KHR_display" author="NV" contact="James Jones @cubanismo" supported="vulkan">
+            <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" requires="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" requires="VK_KHR_display" author="NV" contact="James Jones @cubanismo" supported="vulkan">
+            <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 alias="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT" comment="Backwards-compatible alias containing a typo"/>
+                <type name="VkSurfaceCounterFlagsEXT"/>
+                <type name="VkSurfaceCounterFlagBitsEXT"/>
+                <type name="VkSurfaceCapabilities2EXT"/>
+                <command name="vkGetPhysicalDeviceSurfaceCapabilities2EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_display_control" number="92" type="device" requires="VK_EXT_display_surface_counter,VK_KHR_swapchain" author="NV" contact="James Jones @cubanismo" supported="vulkan">
+            <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" requires="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" comment="Backwards-compatible alias containing a typo"/>
+                <enum alias="VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME"         name="VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME" comment="Backwards-compatible alias containing a typo"/>
+            </require>
+        </extension>
+        <extension name="VK_NVX_multiview_per_view_attributes" number="98" type="device" requires="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" requires="VK_KHR_get_physical_device_properties2" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                             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"/>
+                <type name="VkPhysicalDeviceDiscardRectanglePropertiesEXT"/>
+                <type name="VkPipelineDiscardRectangleStateCreateInfoEXT"/>
+                <type name="VkPipelineDiscardRectangleStateCreateFlagsEXT"/>
+                <type name="VkDiscardRectangleModeEXT"/>
+                <command name="vkCmdSetDiscardRectangleEXT"/>
+            </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" requires="VK_KHR_get_physical_device_properties2" author="NV" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <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" author="EXT" contact="Piers Daniell @pdaniell-nv" specialuse="d3demulation" supported="vulkan">
+            <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"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_swapchain_colorspace" number="105" type="instance" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney-g" requires="VK_KHR_surface" supported="vulkan">
+            <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 extends="VkColorSpaceKHR"                             name="VK_COLOR_SPACE_DCI_P3_LINEAR_EXT" alias="VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT" comment="Deprecated name for backwards compatibility"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_hdr_metadata" number="106" type="device" requires="VK_KHR_swapchain" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtney-g" supported="vulkan">
+            <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" requires="VK_KHR_maintenance2,VK_KHR_image_format_list" number="109" author="KHR" contact="Tobias Hector @tobias" type="device" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="VK_KHR_multiview,VK_KHR_maintenance2" number="110" contact="Tobias Hector @tobias" type="device" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="VK_KHR_swapchain,VK_KHR_get_physical_device_properties2,VK_KHR_get_surface_capabilities2" author="KHR" contact="Alon Or-bach @alonorbach" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" contact="Jesse Hall @critsec" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" requires="VK_KHR_external_fence_capabilities" author="KHR" contact="Jesse Hall @critsec" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" requires="VK_KHR_external_fence" author="KHR" contact="Jesse Hall @critsec" platform="win32" supported="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" requires="VK_KHR_external_fence" author="KHR" contact="Jesse Hall @critsec" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alon Or-bach @alonorbach" specialuse="devtools" supported="vulkan">
+            <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>
+        </extension>
+        <extension name="VK_KHR_maintenance2" number="118" type="device" author="KHR" contact="Michael Worcester @michaelworcester" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" comment="Backwards-compatible alias containing a typo"/>
+                <enum alias="VK_KHR_MAINTENANCE_2_EXTENSION_NAME"           name="VK_KHR_MAINTENANCE2_EXTENSION_NAME" comment="Backwards-compatible alias containing a typo"/>
+                <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" requires="VK_KHR_surface" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2,VK_KHR_storage_buffer_storage_class" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" requires="VK_KHR_display" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
+            <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" requires="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" requires="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="vulkan">
+            <require>
+                <enum value="0"                                             name="VK_MVK_MOLTENVK_SPEC_VERSION"/>
+                <enum value="&quot;VK_MVK_moltenvk&quot;"                   name="VK_MVK_MOLTENVK_EXTENSION_NAME"/>
+                <command name="vkGetMTLDeviceMVK"/>
+                <command name="vkSetMTLTextureMVK"/>
+                <command name="vkGetMTLTextureMVK"/>
+                <command name="vkGetMTLBufferMVK"/>
+                <command name="vkUseIOSurfaceMVK"/>
+                <command name="vkGetIOSurfaceMVK"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_external_memory_dma_buf" number="126" type="device" requires="VK_KHR_external_memory_fd" author="EXT" contact="Chad Versace @chadversary" supported="vulkan">
+            <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" requires="VK_KHR_external_memory" contact="Chad Versace @chadversary" supported="vulkan">
+            <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" requires="VK_KHR_get_memory_requirements2" contact="James Jones @cubanismo" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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">
+            <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" requires="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="4"                                             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 extension="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" requires="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">
+            <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_AMD_extension_135" number="135" author="AMD" contact="Mais Alnasser @malnasse" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_135_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_135&quot;"              name="VK_AMD_EXTENSION_135_EXTENSION_NAME"/>
+            </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" requires="VK_KHR_get_physical_device_properties2,VK_KHR_maintenance1" contact="Daniel Rakos @aqnuep" supported="vulkan">
+            <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 offset="0" extends="VkDescriptorType"                 name="VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT"/>
+                <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">
+            <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" author="AMD" contact="Daniel Rakos @drakos-amd" supported="vulkan" requires="VK_KHR_get_physical_device_properties2">
+            <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">
+            <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="Jason Ekstrand @jekstrand" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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="Jason Ekstrand @jekstrand" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <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" requiresCore="1.1" requires="VK_EXT_descriptor_indexing,VK_KHR_buffer_device_address,VK_KHR_deferred_host_operations" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" sortorder="1">
+            <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="VkDebugReportObjectTypeEXT"      name="VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT"/>
+                <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 extension="VK_KHR_format_feature_flags2">
+                <enum bitpos="29" extends="VkFormatFeatureFlagBits2KHR"     name="VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_ray_tracing_pipeline" number="348" type="device" requiresCore="1.1" requires="VK_KHR_spirv_1_4,VK_KHR_acceleration_structure" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" sortorder="1">
+            <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" requiresCore="1.1" requires="VK_KHR_spirv_1_4,VK_KHR_acceleration_structure" author="KHR" contact="Daniel Koch @dgkoch" supported="vulkan" sortorder="1">
+            <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" requiresCore="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">
+            <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" requires="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">
+            <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="VkDebugReportObjectTypeEXT"                  name="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT" alias="VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"/>
+                <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 extension="VK_EXT_debug_report">
+                <enum extends="VkDebugReportObjectTypeEXT" offset="0"       name="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">
+            <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" requires="VK_KHR_bind_memory2,VK_KHR_get_physical_device_properties2,VK_KHR_image_format_list,VK_KHR_sampler_ycbcr_conversion" author="EXT" contact="Chad Versace @chadversary" supported="vulkan">
+            <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 extension="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" requires="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" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Bill Hollings @billhollings" platform="provisional" supported="vulkan" provisional="true">
+            <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" requires="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" requires="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 offset="0" extends="VkDebugReportObjectTypeEXT" name="VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT"/>
+                <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="VkMemoryRequirements2KHR"/>
+                <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>
+        </extension>
+        <extension name="VK_NV_representative_fragment_test" number="167" type="device" author="NV" contact="Kedarnath Thangudu @kthangudu" 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" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_1">
+            <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" comment="Backwards-compatible alias containing a typo"/>
+                <enum alias="VK_KHR_MAINTENANCE_3_EXTENSION_NAME"           name="VK_KHR_MAINTENANCE3_EXTENSION_NAME" comment="Backwards-compatible alias containing a typo"/>
+                <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">
+            <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">
+            <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 extends="VkFilter"                                    name="VK_FILTER_CUBIC_EXT" alias="VK_FILTER_CUBIC_IMG"/>
+                <enum extends="VkFormatFeatureFlagBits"                     name="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT" alias="VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"/>
+                <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="Bill Licea-Kane @wwlk" 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"/>
+                <enum bitpos="18" extends="VkBufferUsageFlagBits"           name="VK_BUFFER_USAGE_RESERVED_18_BIT_QCOM"/>
+                <enum bitpos="16" extends="VkImageUsageFlagBits"            name="VK_IMAGE_USAGE_RESERVED_16_BIT_QCOM"/>
+                <enum bitpos="17" extends="VkImageUsageFlagBits"            name="VK_IMAGE_USAGE_RESERVED_17_BIT_QCOM"/>
+            </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">
+            <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 offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"/>
+                <enum offset="1" dir="-" extends="VkResult"                 name="VK_ERROR_NOT_PERMITTED_EXT"/>
+                <type name="VkDeviceQueueGlobalPriorityCreateInfoEXT"/>
+                <type name="VkQueueGlobalPriorityEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_subgroup_extended_types" number="176" type="device" requiresCore="1.1" author="KHR" contact="Neil Henning @sheredom" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="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">
+            <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" requires="VK_KHR_external_memory" contact="Daniel Rakos @drakos-amd" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" contact="Aaron Hagan @ahagan" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="VK_KHR_get_physical_device_properties2" contact="Aaron Hagan @ahagan" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Daniel Rakos @drakos-amd" supported="vulkan">
+            <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" requires="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_EXT_video_decode_h265" number="188" type="device" requires="VK_KHR_video_decode_queue" author="KHR" contact="peter.fang@amd.com" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="1"                                         name="VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_video_decode_h265&quot;"      name="VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="2" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="3" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="4" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="5" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum offset="6" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="1" extends="VkVideoCodecOperationFlagBitsKHR"      name="VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <type name="VkVideoDecodeH265CreateFlagsEXT"/>
+                <type name="VkVideoDecodeH265ProfileEXT"/>
+                <type name="VkVideoDecodeH265CapabilitiesEXT"/>
+                <type name="VkVideoDecodeH265SessionCreateInfoEXT"/>
+
+                <type name="VkVideoDecodeH265SessionParametersCreateInfoEXT"/>
+                <type name="VkVideoDecodeH265SessionParametersAddInfoEXT"/>
+                <type name="VkVideoDecodeH265PictureInfoEXT"/>
+                <type name="VkVideoDecodeH265DpbSlotInfoEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_189" number="189" author="AMD" contact="Daniel Rakos @drakos-amd" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_189_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_189&quot;"              name="VK_AMD_EXTENSION_189_EXTENSION_NAME"/>
+            </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" requires="VK_KHR_get_physical_device_properties2" author="NV" contact="Vikram Kushwaha @vkushwaha" supported="vulkan">
+            <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" requires="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">
+            <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 offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT"/>
+                <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"/>
+                <enum bitpos="1"  extends="VkPipelineCacheCreateFlagBits"
+                    name="VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_driver_properties" number="197" type="device" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Daniel Rakos @drakos-amd" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requiresCore="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" requires="VK_KHR_create_renderpass2" author="KHR" contact="Jan-Harald Fredriksen @janharald" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="VK_KHR_swapchain,VK_KHR_maintenance2,VK_KHR_image_format_list" contact="Daniel Rakos @drakos-arm" supported="vulkan">
+            <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" requires="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" requires="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 bitpos="6" extends="VkShaderStageFlagBits"        name="VK_SHADER_STAGE_TASK_BIT_NV"/>
+                <enum bitpos="7" extends="VkShaderStageFlagBits"        name="VK_SHADER_STAGE_MESH_BIT_NV"/>
+                <enum bitpos="19" extends="VkPipelineStageFlagBits"     name="VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV"/>
+                <enum bitpos="20" extends="VkPipelineStageFlagBits"     name="VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV"/>
+                <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" requires="VK_KHR_get_physical_device_properties2" author="NV" contact="Pat Brown @nvpbrown" supported="vulkan">
+            <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 offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV"/>
+                <type name="VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_shader_image_footprint" number="205" type="device" requires="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" requires="VK_KHR_get_physical_device_properties2" author="NV" contact="Pat Brown @nvpbrown" supported="vulkan">
+            <require>
+                <enum value="1"                                         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="1" extends="VkDynamicState" name="VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV"/>
+                <enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV"/>
+                <type name="VkPipelineViewportExclusiveScissorStateCreateInfoNV"/>
+                <type name="VkPhysicalDeviceExclusiveScissorFeaturesNV"/>
+                <command name="vkCmdSetExclusiveScissorNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_device_diagnostic_checkpoints" type="device" number="207" requires="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" requires="VK_KHR_get_physical_device_properties2" contact="Jason Ekstrand @jekstrand" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="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" comment="Backwards-compatible alias"/>
+                <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" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="VK_KHR_get_physical_device_properties2" contact="Matthaeus G. Chajdas @anteru" supported="vulkan">
+            <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" requires="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" requires="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" requires="VK_KHR_get_physical_device_properties2" contact="Jesse Hall @critsec" supported="vulkan">
+            <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 offset="0" extends="VkStructureType"                      name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR"/>
+                <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" requires="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" requires="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 extension="VK_KHR_format_feature_flags2">
+                <enum bitpos="24" extends="VkFormatFeatureFlagBits2KHR"     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" requires="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" comment="Backwards-compatible alias containing a typo"/>
+                <enum alias="VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME" name="VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME" comment="Backwards-compatible alias containing a typo"/>
+            </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" requiresCore="1.1" author="EXT" contact="Neil Henning @sheredom" supported="vulkan">
+            <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 offset="0" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT"/>
+                <enum bitpos="0" extends="VkPipelineShaderStageCreateFlagBits" name="VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT"/>
+                <enum bitpos="1" extends="VkPipelineShaderStageCreateFlagBits" name="VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_fragment_shading_rate" number="227" type="device" requires="VK_KHR_create_renderpass2,VK_KHR_get_physical_device_properties2" author="KHR" contact="Tobias Hector @tobski" supported="vulkan">
+            <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 extension="VK_KHR_format_feature_flags2">
+                <enum bitpos="30" extends="VkFormatFeatureFlagBits2KHR"         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" requires="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" 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" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Tobias Hector @tobski" supported="vulkan">
+            <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" requiresCore="1.1" requires="VK_KHR_shader_float_controls" author="KHR" contact="Jesse Hall @critsec" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <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" requires="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" requiresCore="1.1" requires="VK_KHR_get_surface_capabilities2" author="KHR" contact="Sandeep Shinde @sashinde" supported="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" requires="VK_KHR_dedicated_allocation" 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" requires="VK_KHR_get_physical_device_properties2,VK_KHR_create_renderpass2" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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"/>
+            </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" requires="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">
+            <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 offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT"/>
+                <type                                                       name="VkToolPurposeFlagBitsEXT"/>
+                <type                                                       name="VkToolPurposeFlagsEXT"/>
+                <type                                                       name="VkPhysicalDeviceToolPropertiesEXT"/>
+                <command                                                    name="vkGetPhysicalDeviceToolPropertiesEXT"/>
+            </require>
+            <require extension="VK_EXT_debug_report">
+                <enum bitpos="5" extends="VkToolPurposeFlagBitsEXT"         name="VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"/>
+            </require>
+            <require extension="VK_EXT_debug_marker">
+                <enum bitpos="6" extends="VkToolPurposeFlagBitsEXT"         name="VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT"/>
+            </require>
+            <require extension="VK_EXT_debug_utils">
+                <enum bitpos="5" extends="VkToolPurposeFlagBitsEXT"         name="VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"/>
+                <enum bitpos="6" extends="VkToolPurposeFlagBitsEXT"         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">
+            <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" requires="VK_KHR_swapchain,VK_KHR_present_id" author="KHR" contact="Keith Packard @keithp" supported="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" requires="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"/>
+                <type name="VkComponentTypeNV"/>
+                <type name="VkPhysicalDeviceCooperativeMatrixFeaturesNV"/>
+                <type name="VkPhysicalDeviceCooperativeMatrixPropertiesNV"/>
+                <command name="vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_coverage_reduction_mode" number="251" requires="VK_NV_framebuffer_mixed_samples" 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" requires="VK_KHR_get_physical_device_properties2" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <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" requires="VK_KHR_sampler_ycbcr_conversion" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" type="device" author="KHR" contact="Graeme Leese @gnl21" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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" requires="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" requires="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 extension="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 extension="VK_KHR_device_group">
+                <command name="vkGetDeviceGroupSurfacePresentModes2EXT"/>
+            </require>
+            <require feature="VK_VERSION_1_1">
+                <command name="vkGetDeviceGroupSurfacePresentModes2EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_headless_surface" number="257" type="instance" requires="VK_KHR_surface" author="EXT" contact="Lisa Wu @chengtianww" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Jeff Bolz @jeffbolznv" supported="vulkan" promotedto="VK_VERSION_1_2">
+            <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"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_line_rasterization" number="260" type="device" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Jeff Bolz @jeffbolznv" specialuse="cadsupport" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" contact="Vikram Kushwaha @vkushwaha-nv" supported="vulkan">
+            <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" requires="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" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <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" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <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"/>
+                <enum offset="0" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_CULL_MODE_EXT"/>
+                <enum offset="1" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_FRONT_FACE_EXT"/>
+                <enum offset="2" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT"/>
+                <enum offset="3" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT"/>
+                <enum offset="4" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT"/>
+                <enum offset="5" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT"/>
+                <enum offset="6" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT"/>
+                <enum offset="7" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT"/>
+                <enum offset="8" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT"/>
+                <enum offset="9" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT"/>
+                <enum offset="10" extends="VkDynamicState"                  name="VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT"/>
+                <enum offset="11" extends="VkDynamicState"                  name="VK_DYNAMIC_STATE_STENCIL_OP_EXT"/>
+                <type name="VkPhysicalDeviceExtendedDynamicStateFeaturesEXT"/>
+                <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">
+            <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" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Jason Ekstrand @jekstrand" specialuse="devtools" supported="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_INTEL_extension_271" number="271" type="device" author="INTEL" contact="Jason Ekstrand @jekstrand" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_INTEL_EXTENSION_271_SPEC_VERSION"/>
+                <enum value="&quot;VK_INTEL_extension_271&quot;"            name="VK_INTEL_EXTENSION_271_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_INTEL_extension_272" number="272" type="device" author="INTEL" contact="Jason Ekstrand @jekstrand" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_INTEL_EXTENSION_272_SPEC_VERSION"/>
+                <enum value="&quot;VK_INTEL_extension_272&quot;"            name="VK_INTEL_EXTENSION_272_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_INTEL_extension_273" number="273" type="device" author="INTEL" contact="Jason Ekstrand @jekstrand" 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" requires="VK_EXT_shader_atomic_float" author="EXT" contact="Jason Ekstrand @jekstrand" 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_KHR_extension_275" number="275" type="instance" author="KHR" contact="Lionel Landwerlin @llandwerlin" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_275_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_275&quot;"              name="VK_KHR_EXTENSION_275_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_276" number="276" type="device" author="KHR" contact="James Jones @cubanismo" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_276_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_276&quot;"              name="VK_KHR_EXTENSION_276_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_shader_demote_to_helper_invocation" number="277" type="device" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <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 offset="0" extends="VkStructureType"                          name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_device_generated_commands" number="278" type="device" requiresCore="1.1" requires="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" 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 @kevinpetit" 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" requires="VK_KHR_get_physical_device_properties2" contact="Kevin Petit @kevinpetit" supported="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 offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR"/>
+                <type name="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR"/>
+                <type name="VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_texel_buffer_alignment" number="282" type="device" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
+            <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"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT"/>
+                <type name="VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT"/>
+                <type name="VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_render_pass_transform" number="283" type="device" requires="VK_KHR_swapchain,VK_KHR_surface" author="QCOM" contact="Jeff Leger @jackohound" supported="vulkan">
+            <require>
+                <enum value="2"                                             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_extension_284" number="284" type="device" author="EXT" contact="Samuel Pitoiset @hakzsam" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_284_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_284&quot;"              name="VK_EXT_EXTENSION_284_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_device_memory_report" number="285" type="device" requires="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" requires="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" author="EXT" contact="Liam Middlebrook @liam-middlebrook" supported="vulkan">
+            <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" author="EXT" contact="Liam Middlebrook @liam-middlebrook" specialuse="glemulation,d3demulation" supported="vulkan">
+            <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">
+            <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_extension_293" number="293" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_293_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_293&quot;"               name="VK_NV_EXTENSION_293_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_non_semantic_info" number="294" type="device" author="KHR" contact="Baldur Karlsson @baldurk" supported="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" requires="VK_KHR_swapchain" author="KHR" contact="Keith Packard @keithp" supported="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">
+            <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 offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT"/>
+                <enum offset="0" extends="VkObjectType"                     name="VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT"/>
+                <type name="VkPhysicalDevicePrivateDataFeaturesEXT"/>
+                <type name="VkDevicePrivateDataCreateInfoEXT"/>
+                <type name="VkPrivateDataSlotCreateInfoEXT"/>
+                <type name="VkPrivateDataSlotEXT"/>
+                <type name="VkPrivateDataSlotCreateFlagsEXT"/>
+                <type name="VkPrivateDataSlotCreateFlagBitsEXT"/>
+                <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" supported="vulkan">
+            <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 offset="0" extends="VkStructureType"
+                    name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT"/>
+                <type name="VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT"/>
+                <enum bitpos="8"  extends="VkPipelineCreateFlagBits"
+                    name="VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT"/>
+                <enum bitpos="9" extends="VkPipelineCreateFlagBits"
+                    name="VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT"/>
+                <enum extends="VkResult" offset="0" name="VK_PIPELINE_COMPILE_REQUIRED_EXT"/>
+                <enum extends="VkResult"            name="VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT" alias="VK_PIPELINE_COMPILE_REQUIRED_EXT"/>
+                <enum bitpos="0"  extends="VkPipelineCacheCreateFlagBits"
+                    name="VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT"/>
+                <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" author="KHR" contact="Mark Bellamy @mark.bellamy_arm" supported="disabled">
+            <require>
+                <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"/>
+                <enum bitpos="2"  extends="VkMemoryHeapFlagBits"            name="VK_MEMORY_HEAP_RESERVED_2_BIT_KHR"/>
+                <enum             extends="VkPipelineCacheCreateFlagBits"   name="VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_KHR" alias="VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT"/>
+                <enum bitpos="2"  extends="VkPipelineCacheCreateFlagBits"   name="VK_PIPELINE_CACHE_CREATE_RESERVED_2_BIT_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_video_encode_queue" number="300"  type="device" requires="VK_KHR_video_queue,VK_KHR_synchronization2" author="KHR" contact="ahmed.abdelkalek@amd.com" provisional="true" platform="provisional" supported="vulkan">
+            <require>
+                <enum value="3"                                         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"/>
+                <enum bitpos="27" extends="VkPipelineStageFlagBits2KHR" name="VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS" />
+                <enum bitpos="37" extends="VkAccessFlagBits2KHR"        name="VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS" />
+                <enum bitpos="38" extends="VkAccessFlagBits2KHR"        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 bitpos="6" extends="VkQueueFlagBits"              name="VK_QUEUE_VIDEO_ENCODE_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 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_BITSTREAM_BUFFER_RANGE_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+
+                <type name="VkVideoEncodeFlagBitsKHR"/>
+                <type name="VkVideoEncodeFlagsKHR"/>
+                <type name="VkVideoEncodeInfoKHR"/>
+
+                <type name="VkVideoEncodeRateControlFlagBitsKHR"/>
+                <type name="VkVideoEncodeRateControlFlagsKHR"/>
+                <type name="VkVideoEncodeRateControlModeFlagBitsKHR"/>
+                <type name="VkVideoEncodeRateControlModeFlagsKHR"/>
+
+                <type name="VkVideoEncodeRateControlInfoKHR"/>
+                <command name="vkCmdEncodeVideoKHR"/>
+            </require>
+            <require extension="VK_KHR_format_feature_flags2">
+                <enum bitpos="27" extends="VkFormatFeatureFlagBits2KHR"     name="VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR" protect="VK_ENABLE_BETA_EXTENSIONS"/>
+                <enum bitpos="28" extends="VkFormatFeatureFlagBits2KHR"     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" requires="VK_KHR_get_physical_device_properties2" author="NV" contact="Kedarnath Thangudu @kthangudu" supported="vulkan">
+            <require>
+                <enum value="1"                                             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_KHR"/>
+            </require>
+        </extension>
+        <extension name="VK_QCOM_extension_303" number="303" author="QCOM" contact="Bill Licea-Kane @wwlk" 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="Bill Licea-Kane @wwlk" 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_extension_308" number="308" type="device" author="NV" contact="Tristan Lorach @tlorach" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_308_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_308&quot;"               name="VK_NV_EXTENSION_308_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_309" number="309" author="KHR" contact="Aidan Fabius @afabius" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_309_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_309&quot;"              name="VK_KHR_EXTENSION_309_EXTENSION_NAME"/>
+            </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 offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_RESERVED_QCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_311" number="311" author="NV" contact="Charles Hansen @cshansen" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_311_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_311&quot;"               name="VK_NV_EXTENSION_311_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_312" number="312" author="MVK" contact="Bill Hollings @billhollings" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_312_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_312&quot;"              name="VK_EXT_EXTENSION_312_EXTENSION_NAME"/>
+            </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" requires="VK_KHR_get_physical_device_properties2" contact="Tobias Hector @tobski" supported="vulkan">
+            <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 offset="0"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR"/>
+                <enum offset="1"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR"/>
+                <enum offset="2"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR"/>
+                <enum offset="3"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR"/>
+                <enum offset="4"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR"/>
+                <enum offset="5"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR"/>
+                <enum offset="6"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR"/>
+                <enum offset="7"  extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR"/>
+                <enum bitpos="0"  extends="VkEventCreateFlagBits"           name="VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR"/>
+                <enum offset="0"  extends="VkImageLayout"                   name="VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR"/>
+                <enum offset="1"  extends="VkImageLayout"                   name="VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR"/>
+                <enum value="0"  extends="VkPipelineStageFlagBits"          name="VK_PIPELINE_STAGE_NONE_KHR"/>
+                <enum value="0"  extends="VkAccessFlagBits"                 name="VK_ACCESS_NONE_KHR"/>
+                <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 extension="VK_EXT_transform_feedback">
+                <enum bitpos="24" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT"/>
+                <enum bitpos="25" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"/>
+                <enum bitpos="26" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"/>
+                <enum bitpos="27" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"/>
+            </require>
+            <require extension="VK_EXT_conditional_rendering">
+                <enum bitpos="18" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT" comment="A pipeline stage for conditional rendering predicate fetch"/>
+                <enum bitpos="20" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT"  comment="read access flag for reading conditional rendering predicate"/>
+            </require>
+            <require extension="VK_NV_device_generated_commands">
+                <enum bitpos="17" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV"/>
+                <enum bitpos="17" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV"/>
+                <enum bitpos="18" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV"/>
+            </require>
+            <require extension="VK_KHR_fragment_shading_rate">
+                <enum bitpos="22" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum bitpos="23" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"/>
+            </require>
+            <require extension="VK_NV_shading_rate_image">
+                <enum extends="VkPipelineStageFlagBits2KHR"                 name="VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV" alias="VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"/>
+                <enum extends="VkAccessFlagBits2KHR"                        name="VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV"    alias="VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"/>
+            </require>
+            <require extension="VK_KHR_acceleration_structure">
+                <enum bitpos="25" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"/>
+                <enum bitpos="21" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR"/>
+                <enum bitpos="22" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"/>
+            </require>
+            <require extension="VK_KHR_ray_tracing_pipeline">
+                <enum bitpos="21" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR"/>
+            </require>
+            <require extension="VK_NV_ray_tracing">
+                <enum extends="VkPipelineStageFlagBits2KHR"                 name="VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV" alias="VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR"/>
+                <enum extends="VkPipelineStageFlagBits2KHR"                 name="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV" alias="VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR"/>
+                <enum extends="VkAccessFlagBits2KHR"                        name="VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV" alias="VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR"/>
+                <enum extends="VkAccessFlagBits2KHR"                        name="VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV" alias="VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR"/>
+            </require>
+            <require extension="VK_EXT_fragment_density_map">
+                <enum bitpos="23" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT"/>
+                <enum bitpos="24" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"/>
+            </require>
+            <require extension="VK_EXT_blend_operation_advanced">
+                <enum bitpos="19" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"/>
+            </require>
+            <require extension="VK_NV_mesh_shader">
+                <enum bitpos="19" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV"/>
+                <enum bitpos="20" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV"/>
+            </require>
+            <require extension="VK_AMD_buffer_marker">
+                <command name="vkCmdWriteBufferMarker2AMD"/>
+            </require>
+            <require extension="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>
+        </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_AMD_extension_317" number="317" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_317_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_317&quot;"              name="VK_AMD_EXTENSION_317_EXTENSION_NAME"/>
+                <enum bitpos="4" extends="VkDescriptorSetLayoutCreateFlagBits"  name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_RESERVED_4_BIT_AMD"/>
+                <enum bitpos="21" extends="VkBufferUsageFlagBits"               name="VK_BUFFER_USAGE_RESERVED_21_BIT_AMD"/>
+                <enum bitpos="22" extends="VkBufferUsageFlagBits"               name="VK_BUFFER_USAGE_RESERVED_22_BIT_AMD"/>
+                <enum bitpos="5" extends="VkBufferCreateFlagBits"               name="VK_BUFFER_CREATE_RESERVED_5_BIT_AMD"/>
+                <enum bitpos="16" extends="VkImageCreateFlagBits"               name="VK_IMAGE_CREATE_RESERVED_16_BIT_AMD"/>
+                <enum bitpos="3" extends="VkSamplerCreateFlagBits"              name="VK_SAMPLER_CREATE_RESERVED_3_BIT_AMD"/>
+            </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_AMD_extension_321" number="321" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_321_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_321&quot;"              name="VK_AMD_EXTENSION_321_EXTENSION_NAME"/>
+                <enum bitpos="23" extends="VkPipelineCreateFlagBits"            name="VK_PIPELINE_CREATE_RESERVED_23_BIT_AMD"/>
+                <enum bitpos="10" extends="VkPipelineCreateFlagBits"            name="VK_PIPELINE_CREATE_RESERVED_10_BIT_AMD"/>
+                <enum bitpos="1"  extends="VkPipelineLayoutCreateFlagBits"      name="VK_PIPELINE_LAYOUT_CREATE_RESERVED_1_BIT_AMD"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_322" number="322" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_322_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_322&quot;"              name="VK_AMD_EXTENSION_322_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_AMD_extension_323" number="323" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_AMD_EXTENSION_323_SPEC_VERSION"/>
+                <enum value="&quot;VK_AMD_extension_323&quot;"              name="VK_AMD_EXTENSION_323_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_shader_subgroup_uniform_control_flow" number="324" type="device" requiresCore="1.1" author="KHR" contact="Alan Baker @alan-baker" supported="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" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alan Baker @alan-baker" supported="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 offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR"/>
+                <type name="VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_fragment_shading_rate_enums" number="327" type="device" requires="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" requires="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_NV_extension_329" number="329" author="NV" contact="Pat Brown @nvpbrown" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_NV_EXTENSION_329_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_329&quot;"               name="VK_NV_EXTENSION_329_EXTENSION_NAME"/>
+            </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" requires="VK_KHR_sampler_ycbcr_conversion" author="EXT" contact="Tony Zlatinski @tzlatinski" supported="vulkan">
+            <require>
+                <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 offset="0" extends="VkFormat"                       name="VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT"/>
+                <enum offset="1" extends="VkFormat"                       name="VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT"/>
+                <enum offset="2" extends="VkFormat"                       name="VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT"/>
+                <enum offset="3" extends="VkFormat"                       name="VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT"/>
+                <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" requires="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" requires="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" 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" author="EXT" contact="Graeme Leese @gnl21" supported="vulkan" requires="VK_KHR_get_physical_device_properties2">
+            <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 offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT"/>
+                <type name="VkPhysicalDeviceImageRobustnessFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_workgroup_memory_explicit_layout" number="337" type="device" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Caio Marcelo de Oliveira Filho @cmarcelo" supported="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" contact="Jeff Leger @jackohound" supported="vulkan">
+            <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 offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR"/>
+                <enum offset="3" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR"/>
+                <enum offset="4" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR"/>
+                <enum offset="5" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR"/>
+                <enum offset="6" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR"/>
+                <enum offset="7" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR"/>
+                <enum offset="8" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR"/>
+                <enum offset="9" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR"/>
+                <enum offset="10" extends="VkStructureType"                 name="VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR"/>
+                <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_ARM_extension_339" number="339" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_ARM_EXTENSION_339_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_339&quot;"              name="VK_ARM_EXTENSION_339_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_340" number="340" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_340_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_340&quot;"              name="VK_EXT_EXTENSION_340_EXTENSION_NAME"/>
+                <enum bitpos="19" extends="VkImageUsageFlagBits"            name="VK_IMAGE_USAGE_RESERVED_19_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_4444_formats" number="341" type="device" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="vulkan">
+            <require>
+                <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 offset="0" extends="VkFormat"                         name="VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT"/>
+                <enum offset="1" extends="VkFormat"                         name="VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT"/>
+                <type name="VkPhysicalDevice4444FormatsFeaturesEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_342" number="342" author="EXT" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_342_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_342&quot;"              name="VK_EXT_EXTENSION_342_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_extension_343" number="343" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_ARM_EXTENSION_343_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_343&quot;"              name="VK_ARM_EXTENSION_343_EXTENSION_NAME"/>
+            </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" requires="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" requires="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" requires="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" 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" requires="VK_KHR_maintenance3">
+            <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 offset="0" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE"/>
+                <enum offset="2" extends="VkStructureType"                     name="VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE"/>
+                <enum offset="0" extends="VkDescriptorType"                    name="VK_DESCRIPTOR_TYPE_MUTABLE_VALVE"/>
+                <enum bitpos="2" extends="VkDescriptorPoolCreateFlagBits"      name="VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE"/>
+                <enum bitpos="2" extends="VkDescriptorSetLayoutCreateFlagBits" name="VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE"/>
+                <type name="VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE"/>
+                <type name="VkMutableDescriptorTypeListVALVE"/>
+                <type name="VkMutableDescriptorTypeCreateInfoVALVE"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_vertex_input_dynamic_state" number="353" type="device" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <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" requires="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_extension_355" number="355" author="EXT" contact="Ralph Potter gitlab:@r_potter" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_355_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_355&quot;"              name="VK_EXT_EXTENSION_355_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_vertex_attribute_aliasing" number="356" type="device" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled" specialuse="glemulation">
+            <require>
+                <enum value="0"                                             name="VK_EXT_VERTEX_ATTRIBUTE_ALIASING_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_vertex_attribute_aliasing&quot;"  name="VK_EXT_VERTEX_ATTRIBUTE_ALIASING_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_primitive_topology_list_restart" number="357" type="device" author="EXT" contact="Shahbaz Youssefi @syoussefi" 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" requires="VK_KHR_get_physical_device_properties2" contact="Lionel Landwerlin @llandwerlin" supported="vulkan">
+            <require>
+                <enum value="1"                                             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 offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR"/>
+                <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" requires="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" requires="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" requires="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="0" extends="VkDebugReportObjectTypeEXT"   name="VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT"/>
+                <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>
+        </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="Hueilong Wang @wyvernathuawei" requires="VK_KHR_create_renderpass2,VK_KHR_synchronization2" supported="vulkan">
+            <require>
+                <enum value="2"                                         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="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI"/>
+                <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" requires="VK_KHR_ray_tracing_pipeline,VK_KHR_synchronization2" author="Huawei" contact="Yunpeng Zhu @yunxingzhu" 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="VkAccessFlagBits2KHR"             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="VkPipelineStageFlagBits2KHR"      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" requires="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_NV_extension_373" number="373" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_373_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_373&quot;"           name="VK_NV_EXTENSION_373_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_374" number="374" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_374_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_374&quot;"           name="VK_NV_EXTENSION_374_EXTENSION_NAME"/>
+                <enum bitpos="4" extends="VkExternalFenceHandleTypeFlagBits" name="VK_EXTERNAL_FENCE_HANDLE_TYPE_RESERVED_4_BIT_NV"/>
+                <enum bitpos="5" extends="VkExternalFenceHandleTypeFlagBits" name="VK_EXTERNAL_FENCE_HANDLE_TYPE_RESERVED_5_BIT_NV"/>
+                <enum bitpos="5" extends="VkExternalSemaphoreHandleTypeFlagBits" name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_RESERVED_5_BIT_NV"/>
+                <enum bitpos="6" extends="VkExternalSemaphoreHandleTypeFlagBits" name="VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_RESERVED_6_BIT_NV"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_375" number="375" author="NV" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_375_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_375&quot;"           name="VK_NV_EXTENSION_375_EXTENSION_NAME"/>
+                <enum bitpos="13" extends="VkExternalMemoryHandleTypeFlagBits"  name="VK_EXTERNAL_MEMORY_HANDLE_TYPE_RESERVED_13_BIT_NV"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_376" number="376" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_376_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_376&quot;"          name="VK_EXT_EXTENSION_376_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_377" number="377" author="EXT" contact="Hugues Evrard @hevrard" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_377_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_377&quot;"          name="VK_EXT_EXTENSION_377_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extended_dynamic_state2" number="378" type="device" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Vikram Kushwaha @vkushwaha-nv" supported="vulkan">
+            <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"/>
+                <enum offset="0" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT"/>
+                <enum offset="1" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT"/>
+                <enum offset="2" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT"/>
+                <enum offset="3" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_LOGIC_OP_EXT"/>
+                <enum offset="4" extends="VkDynamicState"                   name="VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT"/>
+                <type name="VkPhysicalDeviceExtendedDynamicState2FeaturesEXT"/>
+                <command name="vkCmdSetPatchControlPointsEXT"/>
+                <command name="vkCmdSetRasterizerDiscardEnableEXT"/>
+                <command name="vkCmdSetDepthBiasEnableEXT"/>
+                <command name="vkCmdSetLogicOpEXT"/>
+                <command name="vkCmdSetPrimitiveRestartEnableEXT"/>
+            </require>
+        </extension>
+        <extension name="VK_QNX_screen_surface" number="379" type="instance" requires="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" requires="VK_KHR_get_physical_device_properties2" author="EXT" contact="Sharif Elcott @selcott" supported="vulkan">
+            <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_extension_383" number="383" author="EXT" contact="Shahbaz Youssefi @syoussefi" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_EXT_EXTENSION_383_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_383&quot;"          name="VK_EXT_EXTENSION_383_EXTENSION_NAME"/>
+            </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_extension_387" number="387" author="KHR" contact="Daniel Koch @dgkoch" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_387_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_387&quot;"              name="VK_KHR_EXTENSION_387_EXTENSION_NAME"/>
+                <enum bitpos="28" extends="VkPipelineStageFlagBits2KHR"     name="VK_PIPELINE_STAGE_2_RESERVED_387_BIT_KHR"/>
+                <enum bitpos="40" extends="VkAccessFlagBits2KHR"            name="VK_ACCESS_2_RESERVED_387_BIT_KHR"/>
+            </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" requires="VK_EXT_global_priority,VK_KHR_get_physical_device_properties2" author="EXT" contact="Yiwei Zhang @zhangyiwei" supported="vulkan">
+            <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 offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT"/>
+                <enum offset="1" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT"/>
+                <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_extension_392" number="392" author="EXT" contact="Joshua Ashton @Joshua-Ashton" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_392_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_392&quot;"              name="VK_EXT_EXTENSION_392_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_multi_draw" number="393" author="EXT" contact="Mike Blumenkrantz @zmike" type="device" 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_extension_394" number="394" author="EXT" contact="Mike Blumenkrantz @zmike" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_394_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_394&quot;"              name="VK_EXT_EXTENSION_394_EXTENSION_NAME"/>
+                <enum extends="VkImageCreateFlagBits" bitpos="17" name="VK_IMAGE_CREATE_RESERVED_394_BIT_EXT"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_395" number="395" author="KHR" contact="Lenny Komow @lkomow" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_395_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_395&quot;"              name="VK_KHR_EXTENSION_395_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_396" number="396" author="EXT" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_396_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_396&quot;"              name="VK_KHR_EXTENSION_396_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_397" number="397" author="NV" contact="Christoph Kubisch @pixeljetstream" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_397_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_397&quot;"           name="VK_NV_EXTENSION_397_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_398" number="398" author="NV" contact="Christoph Kubisch @pixeljetstream" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_398_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_398&quot;"           name="VK_NV_EXTENSION_398_EXTENSION_NAME"/>
+            </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_KHR"/>
+            </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_extension_405" number="405" author="HUAWEI" contact="Hueilong Wang @wyvernathuawei" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_HUAWEI_EXTENSION_405_SPEC_VERSION"/>
+                <enum value="&quot;VK_HUAWEI_extension_405&quot;"           name="VK_HUAWEI_EXTENSION_405_EXTENSION_NAME"/>
+            </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" requires="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" requires="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" requiresCore="1.1" author="KHR" contact="Piers Daniell @pdaniell-nv" supported="vulkan">
+            <require>
+                <enum value="1"                                               name="VK_KHR_MAINTENANCE_4_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_maintenance4&quot;"                 name="VK_KHR_MAINTENANCE_4_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR"/>
+                <enum offset="1" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR"/>
+                <enum offset="2" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR"/>
+                <enum offset="3" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR"/>
+                <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_extension_416" number="416" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_ARM_EXTENSION_416_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_416&quot;"          name="VK_ARM_EXTENSION_416_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_417" number="417" author="KHR" contact="Kevin Petit @kevinpetit" 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_extension_418" number="418" author="ARM" contact="Kevin Petit @kevinpetit" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_ARM_EXTENSION_418_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_418&quot;"          name="VK_ARM_EXTENSION_418_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_419" number="419" author="EXT" contact="Mike Blumenkrantz @zmike" type="device" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_419_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_419&quot;"              name="VK_EXT_EXTENSION_419_EXTENSION_NAME"/>
+            </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"/>
+            </require>
+        </extension>
+        <extension name="VK_KHR_extension_421" number="421" author="KHR" contact="Hans-Kristian Arntzen @HansKristian-Work" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_KHR_EXTENSION_421_SPEC_VERSION"/>
+                <enum value="&quot;VK_KHR_extension_421&quot;"              name="VK_KHR_EXTENSION_421_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_extension_422" number="422" author="EXT" contact="Graeme Leese @gnl21" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_EXTENSION_422_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_extension_422&quot;"              name="VK_EXT_EXTENSION_422_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_EXT_disable_cube_map_wrap" number="423" author="EXT" contact="Georg Lehmann @DadSchoorse" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_EXT_DISABLE_CUBE_MAP_WRAP_SPEC_VERSION"/>
+                <enum value="&quot;VK_EXT_disable_cube_map_wrap&quot;"      name="VK_EXT_DISABLE_CUBE_MAP_WRAP_EXTENSION_NAME"/>
+                <enum bitpos="2"  extends="VkSamplerCreateFlagBits"         name="VK_SAMPLER_CREATE_RESERVED_2_BIT_EXT"/>
+            </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_extension_426" number="426" author="QCOM" contact="Matthew Netsch @mnetsch" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_QCOM_EXTENSION_426_SPEC_VERSION"/>
+                <enum value="&quot;VK_QCOM_extension_426&quot;"         name="VK_QCOM_EXTENSION_426_EXTENSION_NAME"/>
+                <enum bitpos="15" extends="VkImageCreateFlagBits"       name="VK_IMAGE_CREATE_RESERVED_426_BIT_QCOM"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_427" number="427" author="NV" contact="Vikram Kushwaha @vkushwaha-nv" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_427_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_427&quot;"           name="VK_NV_EXTENSION_427_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_428" number="428" author="NV" contact="Vikram Kushwaha @vkushwaha-nv" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_428_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_428&quot;"           name="VK_NV_EXTENSION_428_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_NV_extension_429" number="429" author="NV" contact="Vikram Kushwaha @vkushwaha-nv" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_429_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_429&quot;"           name="VK_NV_EXTENSION_429_EXTENSION_NAME"/>
+            </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_extension_431" number="431" author="NV" contact="Sourav Parmar @souravpNV" supported="disabled">
+            <require>
+                <enum value="0"                                         name="VK_NV_EXTENSION_431_SPEC_VERSION"/>
+                <enum value="&quot;VK_NV_extension_431&quot;"           name="VK_NV_EXTENSION_431_EXTENSION_NAME"/>
+            </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_gfxstream" number="386" author="GOOGLE" contact="Lingfeng Yang @frank,Roman Kiryanov @rkir,Yilong Li @liyl_google" supported="vulkan">
+            <require>
+                <enum value="0"                                             name="VK_GOOGLE_GFXSTREAM_SPEC_VERSION"/>
+                <enum value="386"                                           name="VK_GOOGLE_GFXSTREAM_NUMBER"/>
+                <enum value="&quot;VK_GOOGLE_gfxstream&quot;"               name="VK_GOOGLE_GFXSTREAM_EXTENSION_NAME"/>
+                <enum offset="0" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE"/>
+                <enum offset="1" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE"/>
+                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_IMPORT_BUFFER_HANDLE_GOOGLE"/>
+                <type name="VkImportColorBufferGOOGLE"/>
+                <type name="VkImportBufferGOOGLE"/>
+                <type name="VkImportPhysicalAddressGOOGLE"/>
+                <command name="vkRegisterImageColorBufferGOOGLE"/>
+                <command name="vkRegisterBufferColorBufferGOOGLE"/>
+                <command name="vkMapMemoryIntoAddressSpaceGOOGLE"/>
+                <command name="vkUpdateDescriptorSetWithTemplateSizedGOOGLE"/>
+                <command name="vkBeginCommandBufferAsyncGOOGLE"/>
+                <command name="vkEndCommandBufferAsyncGOOGLE"/>
+                <command name="vkResetCommandBufferAsyncGOOGLE"/>
+                <command name="vkCommandBufferHostSyncGOOGLE"/>
+                <command name="vkCreateImageWithRequirementsGOOGLE"/>
+                <command name="vkCreateBufferWithRequirementsGOOGLE"/>
+                <command name="vkGetMemoryHostAddressInfoGOOGLE"/>
+                <command name="vkFreeMemorySyncGOOGLE"/>
+                <command name="vkQueueHostSyncGOOGLE"/>
+                <command name="vkQueueSubmitAsyncGOOGLE"/>
+                <command name="vkQueueWaitIdleAsyncGOOGLE"/>
+                <command name="vkQueueBindSparseAsyncGOOGLE"/>
+                <command name="vkGetLinearImageLayoutGOOGLE"/>
+                <command name="vkQueueFlushCommandsGOOGLE"/>
+                <command name="vkQueueCommitDescriptorSetUpdatesGOOGLE"/>
+                <command name="vkCollectDescriptorPoolIdsGOOGLE"/>
+                <command name="vkQueueSignalReleaseImageANDROIDAsyncGOOGLE"/>
+            </require>
+        </extension>
+    </extensions>
+    <spirvextensions comment="SPIR-V Extensions allowed in Vulkan and what is required to use it">
+        <spirvextension name="SPV_KHR_variable_pointers">
+            <enable version="VK_API_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_KHR_shader_draw_parameters">
+            <enable version="VK_API_VERSION_1_1"/>
+            <enable extension="VK_KHR_shader_draw_parameters"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_8bit_storage">
+            <enable version="VK_API_VERSION_1_2"/>
+            <enable extension="VK_KHR_8bit_storage"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_16bit_storage">
+            <enable version="VK_API_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_API_VERSION_1_2"/>
+            <enable extension="VK_KHR_shader_float_controls"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_storage_buffer_storage_class">
+            <enable version="VK_API_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_EXT_shader_viewport_index_layer">
+            <enable version="VK_API_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_API_VERSION_1_2"/>
+            <enable extension="VK_EXT_descriptor_indexing"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_vulkan_memory_model">
+            <enable version="VK_API_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_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_API_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 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 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 extension="VK_KHR_shader_terminate_invocation"/>
+        </spirvextension>
+        <spirvextension name="SPV_KHR_multiview">
+            <enable version="VK_API_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_subgroup_uniform_control_flow">
+            <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_KHR_integer_dot_product">
+            <enable extension="VK_KHR_shader_integer_dot_product"/>
+        </spirvextension>
+    </spirvextensions>
+    <spirvcapabilities comment="SPIR-V Capabilities allowed in Vulkan and what is required to use it">
+        <spirvcapability name="Matrix">
+            <enable version="VK_API_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Shader">
+            <enable version="VK_API_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="InputAttachment">
+            <enable version="VK_API_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Sampled1D">
+            <enable version="VK_API_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="Image1D">
+            <enable version="VK_API_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="SampledBuffer">
+            <enable version="VK_API_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="ImageBuffer">
+            <enable version="VK_API_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="ImageQuery">
+            <enable version="VK_API_VERSION_1_0"/>
+        </spirvcapability>
+        <spirvcapability name="DerivativeControl">
+            <enable version="VK_API_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_API_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 extension="VK_KHR_format_feature_flags2"/>
+        </spirvcapability>
+        <spirvcapability name="StorageImageWriteWithoutFormat">
+            <enable struct="VkPhysicalDeviceFeatures" feature="shaderStorageImageWriteWithoutFormat" requires="VK_VERSION_1_0"/>
+            <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_API_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_API_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="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"/>
+        </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="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="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" feature="shaderIntegerDotProduct" requires="VK_KHR_shader_integer_dot_product"/>
+        </spirvcapability>
+        <spirvcapability name="DotProductInput4x8BitKHR">
+            <enable struct="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" feature="shaderIntegerDotProduct" requires="VK_KHR_shader_integer_dot_product"/>
+        </spirvcapability>
+        <spirvcapability name="DotProductInput4x8BitPackedKHR">
+            <enable struct="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" feature="shaderIntegerDotProduct" requires="VK_KHR_shader_integer_dot_product"/>
+        </spirvcapability>
+        <spirvcapability name="DotProductKHR">
+            <enable struct="VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR" feature="shaderIntegerDotProduct" requires="VK_KHR_shader_integer_dot_product"/>
+        </spirvcapability>
+    </spirvcapabilities>
+</registry>
diff --git a/scripts/generate-vulkan-sources.sh b/scripts/generate-vulkan-sources.sh
new file mode 100755
index 0000000..1afbc12
--- /dev/null
+++ b/scripts/generate-vulkan-sources.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+# Copyright 2022 The Android Open Source Project
+#
+# 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.
+
+AOSP_DIR=$(pwd)/../../
+export VK_CEREAL_GUEST_ENCODER_DIR=$AOSP_DIR/device/generic/goldfish-opengl/system/vulkan_enc
+export VK_CEREAL_GUEST_HAL_DIR=$AOSP_DIR/device/generic/goldfish-opengl/system/vulkan
+export VK_CEREAL_HOST_DECODER_DIR=$AOSP_DIR/external/qemu/android/android-emugl/host/libs/libOpenglRender/vulkan
+
+VK_CEREAL_OUTPUT_DIR=$VK_CEREAL_HOST_DECODER_DIR/cereal
+mkdir -p $VK_CEREAL_GUEST_HAL_DIR
+mkdir -p $VK_CEREAL_GUEST_HAL_DIR
+mkdir -p $VK_CEREAL_OUTPUT_DIR
+
+VULKAN_REGISTRY_DIR=$AOSP_DIR/external/gfxstream-protocols/registry/vulkan
+VULKAN_REGISTRY_XML_DIR=$VULKAN_REGISTRY_DIR/xml
+VULKAN_REGISTRY_SCRIPTS_DIR=$VULKAN_REGISTRY_DIR/scripts
+
+python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $VK_CEREAL_OUTPUT_DIR
