diff --git a/Android.bp b/Android.bp
deleted file mode 100644
index dac09de..0000000
--- a/Android.bp
+++ /dev/null
@@ -1,17 +0,0 @@
-package {
-    default_applicable_licenses: ["external_gfxstream-protocols_license"],
-}
-
-license {
-    name: "external_gfxstream-protocols_license",
-    visibility: [":__subpackages__"],
-    license_kinds: [
-        "SPDX-license-identifier-Apache-2.0",
-        "SPDX-license-identifier-BSD",
-        "SPDX-license-identifier-CC-BY-4.0",
-        "SPDX-license-identifier-MIT",
-    ],
-    license_text: [
-        "LICENSE",
-    ],
-}
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index 79f15d7..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-project(gfxstream-protocols)
-cmake_minimum_required(VERSION 3.11)
-
-add_subdirectory(common)
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 74890bf..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,667 +0,0 @@
-// 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
deleted file mode 100644
index 1e27929..0000000
--- a/METADATA
+++ /dev/null
@@ -1,15 +0,0 @@
-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
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/OWNERS b/OWNERS
deleted file mode 100644
index f3f3c2b..0000000
--- a/OWNERS
+++ /dev/null
@@ -1,12 +0,0 @@
-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/codegen/scripts/generate-vulkan-sources.sh b/codegen/scripts/generate-vulkan-sources.sh
deleted file mode 100755
index 3f3da70..0000000
--- a/codegen/scripts/generate-vulkan-sources.sh
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/bash
-
-# 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.
-
-PROJECT_ROOT=$(pwd)
-
-WHICH=which
-if [[ "$OSTYPE" == "msys" ]]; then
-    WHICH=where
-fi
-
-if [ -z "$1" ] || [ -z "$2" ];
-then
-    AOSP_DIR=$(pwd)/../..
-    export GOLDFISH_OPENGL_DIR=$AOSP_DIR/device/generic/goldfish-opengl
-    export VULKAN_CEREAL_DIR=$AOSP_DIR/device/generic/vulkan-cereal
-    export VULKAN_REGISTRY_DIR=$AOSP_DIR/external/gfxstream-protocols/codegen/vulkan
-else
-    export GOLDFISH_OPENGL_DIR=$1
-    export VULKAN_CEREAL_DIR=$2
-    export VULKAN_REGISTRY_DIR=codegen/vulkan
-fi
-
-# Detect clang-format
-if ! $WHICH clang-format > /dev/null; then
-    echo "Failed to find clang-format." 1>&2
-    exit 1
-fi
-
-# Generate Vulkan headers
-VULKAN_HEADERS_ROOT=$PROJECT_ROOT/common/vulkan
-rm -rf $VULKAN_HEADERS_ROOT && mkdir -p $VULKAN_HEADERS_ROOT
-if [ $? -ne 0 ]; then
-    echo "Failed to clear the old Vulkan headers." 1>&2
-    exit 1
-fi
-
-cd $VULKAN_REGISTRY_DIR/xml && make GENOPTS="-removeExtensions VK_GOOGLE_gfxstream" GENERATED=$VULKAN_HEADERS_ROOT
-if [ $? -ne 0 ]; then
-    echo "Failed to generate Vulkan headers." 1>&2
-    exit 1
-fi
-
-cd $PROJECT_ROOT
-
-export VK_CEREAL_GUEST_ENCODER_DIR=$GOLDFISH_OPENGL_DIR/system/vulkan_enc
-export VK_CEREAL_GUEST_HAL_DIR=$GOLDFISH_OPENGL_DIR/system/vulkan
-export VK_CEREAL_HOST_DECODER_DIR=$VULKAN_CEREAL_DIR/host/vulkan
-export VK_CEREAL_HOST_INCLUDE_DIR=$VULKAN_CEREAL_DIR/host
-export VK_CEREAL_HOST_SCRIPTS_DIR=$VULKAN_CEREAL_DIR/scripts
-export VK_CEREAL_BASELIB_PREFIX=aemu/base
-export VK_CEREAL_BASELIB_LINKNAME=aemu-base.headers
-export VK_CEREAL_VK_HEADER_TARGET=gfxstream_vulkan_headers
-export VK_CEREAL_UTILS_LINKNAME=gfxstream_utils.headers
-export VK_CEREAL_UTILS_PREFIX=utils
-
-VK_CEREAL_OUTPUT_DIR=$VK_CEREAL_HOST_DECODER_DIR/cereal
-if [ -d "$VK_CEREAL_GUEST_DIR" ]; then
-    mkdir -p $VK_CEREAL_GUEST_ENCODER_DIR
-    mkdir -p $VK_CEREAL_GUEST_HAL_DIR
-fi
-if [ -d "$VK_CEREAL_HOST_DIR" ]; then
-    mkdir -p $VK_CEREAL_HOST_DECODER_DIR
-    mkdir -p $VK_CEREAL_OUTPUT_DIR
-fi
-
-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
-
-
-# Generate VK_ANDROID_native_buffer specific Vulkan definitions.
-if [ -d $VK_CEREAL_HOST_DECODER_DIR ]; then
-    OUT_DIR=$VK_CEREAL_HOST_DECODER_DIR
-    OUT_FILE_BASENAME="vk_android_native_buffer.h"
-
-    python3 registry/vulkan/scripts/genvk.py -registry registry/vulkan/xml/vk.xml -o $OUT_DIR \
-        $OUT_FILE_BASENAME
-
-    if [ $? -ne 0 ]; then
-        echo "Failed to generate vk_android_native_buffer.h" 1>&2
-        exit 1
-    fi
-    if ! clang-format -i $OUT_DIR/$OUT_FILE_BASENAME; then
-        echo "Failed to reformat vk_android_native_buffer.h" 1>&2
-        exit 1
-    fi
-fi
-
-# Generate gfxstream specific Vulkan definitions.
-for OUT_DIR in $VK_CEREAL_HOST_DECODER_DIR $VK_CEREAL_GUEST_ENCODER_DIR; do
-    if [ -d "$OUT_DIR" ]; then
-        OUT_FILE_BASENAME=vulkan_gfxstream.h
-        python3 registry/vulkan/scripts/genvk.py -registry registry/vulkan/xml/vk.xml -o $OUT_DIR \
-            $OUT_FILE_BASENAME
-
-        if [ $? -ne 0 ]; then
-            echo "Failed to generate gfxstream specific vulkan headers." 1>&2
-            exit 1
-        fi
-        if ! clang-format -i $OUT_DIR/$OUT_FILE_BASENAME; then
-            echo "Failed to reformat gfxstream specific vulkan headers." 1>&2
-            exit 1
-        fi
-    fi
-done
diff --git a/codegen/vulkan/BUILD.adoc b/codegen/vulkan/BUILD.adoc
deleted file mode 100644
index 855b7d3..0000000
--- a/codegen/vulkan/BUILD.adoc
+++ /dev/null
@@ -1,459 +0,0 @@
-// 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/codegen/vulkan/CODE_OF_CONDUCT.adoc b/codegen/vulkan/CODE_OF_CONDUCT.adoc
deleted file mode 100644
index d8c2546..0000000
--- a/codegen/vulkan/CODE_OF_CONDUCT.adoc
+++ /dev/null
@@ -1,10 +0,0 @@
-// 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/codegen/vulkan/CONTRIBUTING.adoc b/codegen/vulkan/CONTRIBUTING.adoc
deleted file mode 100644
index 9551984..0000000
--- a/codegen/vulkan/CONTRIBUTING.adoc
+++ /dev/null
@@ -1,38 +0,0 @@
-// 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/codegen/vulkan/COPYING.adoc b/codegen/vulkan/COPYING.adoc
deleted file mode 100644
index 8aafada..0000000
--- a/codegen/vulkan/COPYING.adoc
+++ /dev/null
@@ -1,91 +0,0 @@
-// 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/codegen/vulkan/ChangeLog.txt b/codegen/vulkan/ChangeLog.txt
deleted file mode 100644
index aecdfa0..0000000
--- a/codegen/vulkan/ChangeLog.txt
+++ /dev/null
@@ -1,9691 +0,0 @@
-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/codegen/vulkan/LICENSE.adoc b/codegen/vulkan/LICENSE.adoc
deleted file mode 100644
index cb7c404..0000000
--- a/codegen/vulkan/LICENSE.adoc
+++ /dev/null
@@ -1,34 +0,0 @@
-// 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/codegen/vulkan/LICENSES/Apache-2.0.txt b/codegen/vulkan/LICENSES/Apache-2.0.txt
deleted file mode 100644
index 4ed90b9..0000000
--- a/codegen/vulkan/LICENSES/Apache-2.0.txt
+++ /dev/null
@@ -1,208 +0,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.
diff --git a/codegen/vulkan/LICENSES/CC-BY-4.0.txt b/codegen/vulkan/LICENSES/CC-BY-4.0.txt
deleted file mode 100644
index 3f92dfc..0000000
--- a/codegen/vulkan/LICENSES/CC-BY-4.0.txt
+++ /dev/null
@@ -1,324 +0,0 @@
-Creative Commons Attribution 4.0 International Creative Commons Corporation
-("Creative Commons") is not a law firm and does not provide legal services
-or legal advice. Distribution of Creative Commons public licenses does not
-create a lawyer-client or other relationship. Creative Commons makes its licenses
-and related information available on an "as-is" basis. Creative Commons gives
-no warranties regarding its licenses, any material licensed under their terms
-and conditions, or any related information. Creative Commons disclaims all
-liability for damages resulting from their use to the fullest extent possible.
-
-Using Creative Commons Public Licenses
-
-Creative Commons public licenses provide a standard set of terms and conditions
-that creators and other rights holders may use to share original works of
-authorship and other material subject to copyright and certain other rights
-specified in the public license below. The following considerations are for
-informational purposes only, are not exhaustive, and do not form part of our
-licenses.
-
-Considerations for licensors: Our public licenses are intended for use by
-those authorized to give the public permission to use material in ways otherwise
-restricted by copyright and certain other rights. Our licenses are irrevocable.
-Licensors should read and understand the terms and conditions of the license
-they choose before applying it. Licensors should also secure all rights necessary
-before applying our licenses so that the public can reuse the material as
-expected. Licensors should clearly mark any material not subject to the license.
-This includes other CC-licensed material, or material used under an exception
-or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors
-
-Considerations for the public: By using one of our public licenses, a licensor
-grants the public permission to use the licensed material under specified
-terms and conditions. If the licensor's permission is not necessary for any
-reason–for example, because of any applicable exception or limitation to copyright–then
-that use is not regulated by the license. Our licenses grant only permissions
-under copyright and certain other rights that a licensor has authority to
-grant. Use of the licensed material may still be restricted for other reasons,
-including because others have copyright or other rights in the material. A
-licensor may make special requests, such as asking that all changes be marked
-or described. Although not required by our licenses, you are encouraged to
-respect those requests where reasonable. More considerations for the public
-: wiki.creativecommons.org/Considerations_for_licensees Creative Commons Attribution
-4.0 International Public License
-
-By exercising the Licensed Rights (defined below), You accept and agree to
-be bound by the terms and conditions of this Creative Commons Attribution
-4.0 International Public License ("Public License"). To the extent this Public
-License may be interpreted as a contract, You are granted the Licensed Rights
-in consideration of Your acceptance of these terms and conditions, and the
-Licensor grants You such rights in consideration of benefits the Licensor
-receives from making the Licensed Material available under these terms and
-conditions.
-
-Section 1 – Definitions.
-
-a. Adapted Material means material subject to Copyright and Similar Rights
-that is derived from or based upon the Licensed Material and in which the
-Licensed Material is translated, altered, arranged, transformed, or otherwise
-modified in a manner requiring permission under the Copyright and Similar
-Rights held by the Licensor. For purposes of this Public License, where the
-Licensed Material is a musical work, performance, or sound recording, Adapted
-Material is always produced where the Licensed Material is synched in timed
-relation with a moving image.
-
-b. Adapter's License means the license You apply to Your Copyright and Similar
-Rights in Your contributions to Adapted Material in accordance with the terms
-and conditions of this Public License.
-
-c. Copyright and Similar Rights means copyright and/or similar rights closely
-related to copyright including, without limitation, performance, broadcast,
-sound recording, and Sui Generis Database Rights, without regard to how the
-rights are labeled or categorized. For purposes of this Public License, the
-rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
-
-d. Effective Technological Measures means those measures that, in the absence
-of proper authority, may not be circumvented under laws fulfilling obligations
-under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996,
-and/or similar international agreements.
-
-e. Exceptions and Limitations means fair use, fair dealing, and/or any other
-exception or limitation to Copyright and Similar Rights that applies to Your
-use of the Licensed Material.
-
-f. Licensed Material means the artistic or literary work, database, or other
-material to which the Licensor applied this Public License.
-
-g. Licensed Rights means the rights granted to You subject to the terms and
-conditions of this Public License, which are limited to all Copyright and
-Similar Rights that apply to Your use of the Licensed Material and that the
-Licensor has authority to license.
-
-h. Licensor means the individual(s) or entity(ies) granting rights under this
-Public License.
-
-i. Share means to provide material to the public by any means or process that
-requires permission under the Licensed Rights, such as reproduction, public
-display, public performance, distribution, dissemination, communication, or
-importation, and to make material available to the public including in ways
-that members of the public may access the material from a place and at a time
-individually chosen by them.
-
-j. Sui Generis Database Rights means rights other than copyright resulting
-from Directive 96/9/EC of the European Parliament and of the Council of 11
-March 1996 on the legal protection of databases, as amended and/or succeeded,
-as well as other essentially equivalent rights anywhere in the world.
-
-k. You means the individual or entity exercising the Licensed Rights under
-this Public License. Your has a corresponding meaning.
-
-Section 2 – Scope.
-
-   a. License grant.
-
-1. Subject to the terms and conditions of this Public License, the Licensor
-hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive,
-irrevocable license to exercise the Licensed Rights in the Licensed Material
-to:
-
-         A. reproduce and Share the Licensed Material, in whole or in part; and
-
-         B. produce, reproduce, and Share Adapted Material.
-
-2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions
-and Limitations apply to Your use, this Public License does not apply, and
-You do not need to comply with its terms and conditions.
-
-      3. Term. The term of this Public License is specified in Section 6(a).
-
-4. Media and formats; technical modifications allowed. The Licensor authorizes
-You to exercise the Licensed Rights in all media and formats whether now known
-or hereafter created, and to make technical modifications necessary to do
-so. The Licensor waives and/or agrees not to assert any right or authority
-to forbid You from making technical modifications necessary to exercise the
-Licensed Rights, including technical modifications necessary to circumvent
-Effective Technological Measures. For purposes of this Public License, simply
-making modifications authorized by this Section 2(a)(4) never produces Adapted
-Material.
-
-      5. Downstream recipients.
-
-A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed
-Material automatically receives an offer from the Licensor to exercise the
-Licensed Rights under the terms and conditions of this Public License.
-
-B. No downstream restrictions. You may not offer or impose any additional
-or different terms or conditions on, or apply any Effective Technological
-Measures to, the Licensed Material if doing so restricts exercise of the Licensed
-Rights by any recipient of the Licensed Material.
-
-6. No endorsement. Nothing in this Public License constitutes or may be construed
-as permission to assert or imply that You are, or that Your use of the Licensed
-Material is, connected with, or sponsored, endorsed, or granted official status
-by, the Licensor or others designated to receive attribution as provided in
-Section 3(a)(1)(A)(i).
-
-   b. Other rights.
-
-1. Moral rights, such as the right of integrity, are not licensed under this
-Public License, nor are publicity, privacy, and/or other similar personality
-rights; however, to the extent possible, the Licensor waives and/or agrees
-not to assert any such rights held by the Licensor to the limited extent necessary
-to allow You to exercise the Licensed Rights, but not otherwise.
-
-2. Patent and trademark rights are not licensed under this Public License.
-
-3. To the extent possible, the Licensor waives any right to collect royalties
-from You for the exercise of the Licensed Rights, whether directly or through
-a collecting society under any voluntary or waivable statutory or compulsory
-licensing scheme. In all other cases the Licensor expressly reserves any right
-to collect such royalties.
-
-Section 3 – License Conditions.
-
-Your exercise of the Licensed Rights is expressly made subject to the following
-conditions.
-
-   a. Attribution.
-
-1. If You Share the Licensed Material (including in modified form), You must:
-
-A. retain the following if it is supplied by the Licensor with the Licensed
-Material:
-
-i. identification of the creator(s) of the Licensed Material and any others
-designated to receive attribution, in any reasonable manner requested by the
-Licensor (including by pseudonym if designated);
-
-            ii. a copyright notice;
-
-            iii. a notice that refers to this Public License;
-
-            iv. a notice that refers to the disclaimer of warranties;
-
-v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
-
-B. indicate if You modified the Licensed Material and retain an indication
-of any previous modifications; and
-
-C. indicate the Licensed Material is licensed under this Public License, and
-include the text of, or the URI or hyperlink to, this Public License.
-
-2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner
-based on the medium, means, and context in which You Share the Licensed Material.
-For example, it may be reasonable to satisfy the conditions by providing a
-URI or hyperlink to a resource that includes the required information.
-
-3. If requested by the Licensor, You must remove any of the information required
-by Section 3(a)(1)(A) to the extent reasonably practicable.
-
-4. If You Share Adapted Material You produce, the Adapter's License You apply
-must not prevent recipients of the Adapted Material from complying with this
-Public License.
-
-Section 4 – Sui Generis Database Rights.
-
-Where the Licensed Rights include Sui Generis Database Rights that apply to
-Your use of the Licensed Material:
-
-a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract,
-reuse, reproduce, and Share all or a substantial portion of the contents of
-the database;
-
-b. if You include all or a substantial portion of the database contents in
-a database in which You have Sui Generis Database Rights, then the database
-in which You have Sui Generis Database Rights (but not its individual contents)
-is Adapted Material; and
-
-c. You must comply with the conditions in Section 3(a) if You Share all or
-a substantial portion of the contents of the database.
-
-For the avoidance of doubt, this Section 4 supplements and does not replace
-Your obligations under this Public License where the Licensed Rights include
-other Copyright and Similar Rights.
-
-Section 5 – Disclaimer of Warranties and Limitation of Liability.
-
-a. Unless otherwise separately undertaken by the Licensor, to the extent possible,
-the Licensor offers the Licensed Material as-is and as-available, and makes
-no representations or warranties of any kind concerning the Licensed Material,
-whether express, implied, statutory, or other. This includes, without limitation,
-warranties of title, merchantability, fitness for a particular purpose, non-infringement,
-absence of latent or other defects, accuracy, or the presence or absence of
-errors, whether or not known or discoverable. Where disclaimers of warranties
-are not allowed in full or in part, this disclaimer may not apply to You.
-
-b. To the extent possible, in no event will the Licensor be liable to You
-on any legal theory (including, without limitation, negligence) or otherwise
-for any direct, special, indirect, incidental, consequential, punitive, exemplary,
-or other losses, costs, expenses, or damages arising out of this Public License
-or use of the Licensed Material, even if the Licensor has been advised of
-the possibility of such losses, costs, expenses, or damages. Where a limitation
-of liability is not allowed in full or in part, this limitation may not apply
-to You.
-
-c. The disclaimer of warranties and limitation of liability provided above
-shall be interpreted in a manner that, to the extent possible, most closely
-approximates an absolute disclaimer and waiver of all liability.
-
-Section 6 – Term and Termination.
-
-a. This Public License applies for the term of the Copyright and Similar Rights
-licensed here. However, if You fail to comply with this Public License, then
-Your rights under this Public License terminate automatically.
-
-b. Where Your right to use the Licensed Material has terminated under Section
-6(a), it reinstates:
-
-1. automatically as of the date the violation is cured, provided it is cured
-within 30 days of Your discovery of the violation; or
-
-      2. upon express reinstatement by the Licensor.
-
-c. For the avoidance of doubt, this Section 6(b) does not affect any right
-the Licensor may have to seek remedies for Your violations of this Public
-License.
-
-d. For the avoidance of doubt, the Licensor may also offer the Licensed Material
-under separate terms or conditions or stop distributing the Licensed Material
-at any time; however, doing so will not terminate this Public License.
-
-   e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
-
-Section 7 – Other Terms and Conditions.
-
-a. The Licensor shall not be bound by any additional or different terms or
-conditions communicated by You unless expressly agreed.
-
-b. Any arrangements, understandings, or agreements regarding the Licensed
-Material not stated herein are separate from and independent of the terms
-and conditions of this Public License.
-
-Section 8 – Interpretation.
-
-a. For the avoidance of doubt, this Public License does not, and shall not
-be interpreted to, reduce, limit, restrict, or impose conditions on any use
-of the Licensed Material that could lawfully be made without permission under
-this Public License.
-
-b. To the extent possible, if any provision of this Public License is deemed
-unenforceable, it shall be automatically reformed to the minimum extent necessary
-to make it enforceable. If the provision cannot be reformed, it shall be severed
-from this Public License without affecting the enforceability of the remaining
-terms and conditions.
-
-c. No term or condition of this Public License will be waived and no failure
-to comply consented to unless expressly agreed to by the Licensor.
-
-d. Nothing in this Public License constitutes or may be interpreted as a limitation
-upon, or waiver of, any privileges and immunities that apply to the Licensor
-or You, including from the legal processes of any jurisdiction or authority.
-
-Creative Commons is not a party to its public licenses. Notwithstanding, Creative
-Commons may elect to apply one of its public licenses to material it publishes
-and in those instances will be considered the "Licensor." The text of the
-Creative Commons public licenses is dedicated to the public domain under the
-CC0 Public Domain Dedication. Except for the limited purpose of indicating
-that material is shared under a Creative Commons public license or as otherwise
-permitted by the Creative Commons policies published at creativecommons.org/policies,
-Creative Commons does not authorize the use of the trademark "Creative Commons"
-or any other trademark or logo of Creative Commons without its prior written
-consent including, without limitation, in connection with any unauthorized
-modifications to any of its public licenses or any other arrangements, understandings,
-or agreements concerning use of licensed material. For the avoidance of doubt,
-this paragraph does not form part of the public licenses.
-
-Creative Commons may be contacted at creativecommons.org.
diff --git a/codegen/vulkan/LICENSES/LicenseRef-KhronosSpecCopyright.txt b/codegen/vulkan/LICENSES/LicenseRef-KhronosSpecCopyright.txt
deleted file mode 100644
index a39ec49..0000000
--- a/codegen/vulkan/LICENSES/LicenseRef-KhronosSpecCopyright.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-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/codegen/vulkan/LICENSES/LicenseRef-MPLUS.txt b/codegen/vulkan/LICENSES/LicenseRef-MPLUS.txt
deleted file mode 100644
index 9db1dd8..0000000
--- a/codegen/vulkan/LICENSES/LicenseRef-MPLUS.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-M+ Fonts License
-
-December 16, 2019
-
-M+ FONTS are a font family under the Free license. You can use, copy, and
-distribute it, with or without modification, either commercially and
-noncommercially.
diff --git a/codegen/vulkan/LICENSES/MIT.txt b/codegen/vulkan/LICENSES/MIT.txt
deleted file mode 100644
index 204b93d..0000000
--- a/codegen/vulkan/LICENSES/MIT.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-MIT License Copyright (c) <year> <copyright holders>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph) shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
-OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/codegen/vulkan/Makefile b/codegen/vulkan/Makefile
deleted file mode 100644
index b6a5eaf..0000000
--- a/codegen/vulkan/Makefile
+++ /dev/null
@@ -1,614 +0,0 @@
-# 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/codegen/vulkan/README.adoc b/codegen/vulkan/README.adoc
deleted file mode 100644
index 6826917..0000000
--- a/codegen/vulkan/README.adoc
+++ /dev/null
@@ -1,111 +0,0 @@
-// 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/codegen/vulkan/copyright-spec.txt b/codegen/vulkan/copyright-spec.txt
deleted file mode 100644
index a39ec49..0000000
--- a/codegen/vulkan/copyright-spec.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-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/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std.h b/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std.h
deleted file mode 100644
index 3338fe1..0000000
--- a/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
-** 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/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h b/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
deleted file mode 100644
index cb0d1df..0000000
--- a/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-** 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/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h b/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
deleted file mode 100644
index f3a0d3a..0000000
--- a/codegen/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-** 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/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std.h b/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std.h
deleted file mode 100644
index 179c6b7..0000000
--- a/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std.h
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
-** 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/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h b/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
deleted file mode 100644
index a1efa05..0000000
--- a/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-** 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/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h b/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h
deleted file mode 100644
index ffffef2..0000000
--- a/codegen/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-** 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/codegen/vulkan/include/vk_video/vulkan_video_codecs_common.h b/codegen/vulkan/include/vk_video/vulkan_video_codecs_common.h
deleted file mode 100644
index 8cc227a..0000000
--- a/codegen/vulkan/include/vk_video/vulkan_video_codecs_common.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-** 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/codegen/vulkan/include/vulkan/vk_platform.h b/codegen/vulkan/include/vulkan/vk_platform.h
deleted file mode 100644
index 18b913a..0000000
--- a/codegen/vulkan/include/vulkan/vk_platform.h
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// 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/codegen/vulkan/include/vulkan/vulkan.h b/codegen/vulkan/include/vulkan/vulkan.h
deleted file mode 100644
index 3f7cdba..0000000
--- a/codegen/vulkan/include/vulkan/vulkan.h
+++ /dev/null
@@ -1,92 +0,0 @@
-#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/codegen/vulkan/package-lock.json b/codegen/vulkan/package-lock.json
deleted file mode 100644
index ead9d52..0000000
--- a/codegen/vulkan/package-lock.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "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/codegen/vulkan/package.json b/codegen/vulkan/package.json
deleted file mode 100644
index 9aa37e1..0000000
--- a/codegen/vulkan/package.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "private": true,
-  "devDependencies": {
-    "escape-string-regexp": "^2.0.0",
-    "he": "^1.2.0",
-    "lunr": "2.3.8"
-  }
-}
diff --git a/codegen/vulkan/registry.txt b/codegen/vulkan/registry.txt
deleted file mode 100644
index baa4914..0000000
--- a/codegen/vulkan/registry.txt
+++ /dev/null
@@ -1,2575 +0,0 @@
-// 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/codegen/vulkan/scripts/README.adoc b/codegen/vulkan/scripts/README.adoc
deleted file mode 100644
index 0a60629..0000000
--- a/codegen/vulkan/scripts/README.adoc
+++ /dev/null
@@ -1,74 +0,0 @@
-// 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/codegen/vulkan/scripts/Retired/checkLinks.py b/codegen/vulkan/scripts/Retired/checkLinks.py
deleted file mode 100755
index 35103a8..0000000
--- a/codegen/vulkan/scripts/Retired/checkLinks.py
+++ /dev/null
@@ -1,353 +0,0 @@
-#!/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/codegen/vulkan/scripts/Retired/extensionStubSource.py b/codegen/vulkan/scripts/Retired/extensionStubSource.py
deleted file mode 100644
index b9ff837..0000000
--- a/codegen/vulkan/scripts/Retired/extensionStubSource.py
+++ /dev/null
@@ -1,327 +0,0 @@
-#!/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/codegen/vulkan/scripts/Retired/findBalance.py b/codegen/vulkan/scripts/Retired/findBalance.py
deleted file mode 100755
index 2a9efe1..0000000
--- a/codegen/vulkan/scripts/Retired/findBalance.py
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/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/codegen/vulkan/scripts/Retired/fixupRef.py b/codegen/vulkan/scripts/Retired/fixupRef.py
deleted file mode 100755
index 4a9b792..0000000
--- a/codegen/vulkan/scripts/Retired/fixupRef.py
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/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/codegen/vulkan/scripts/Retired/insertTags.py b/codegen/vulkan/scripts/Retired/insertTags.py
deleted file mode 100755
index a8c494c..0000000
--- a/codegen/vulkan/scripts/Retired/insertTags.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/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/codegen/vulkan/scripts/Retired/realign.py b/codegen/vulkan/scripts/Retired/realign.py
deleted file mode 100755
index c2780d4..0000000
--- a/codegen/vulkan/scripts/Retired/realign.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/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/codegen/vulkan/scripts/Retired/refDesc.py b/codegen/vulkan/scripts/Retired/refDesc.py
deleted file mode 100644
index be05a4b..0000000
--- a/codegen/vulkan/scripts/Retired/refDesc.py
+++ /dev/null
@@ -1,356 +0,0 @@
-#!/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/codegen/vulkan/scripts/__init__.py.docs b/codegen/vulkan/scripts/__init__.py.docs
deleted file mode 100644
index e4c3075..0000000
--- a/codegen/vulkan/scripts/__init__.py.docs
+++ /dev/null
@@ -1,36 +0,0 @@
-# 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/codegen/vulkan/scripts/asciidoctor-chunker/LICENSE b/codegen/vulkan/scripts/asciidoctor-chunker/LICENSE
deleted file mode 100644
index ab60297..0000000
--- a/codegen/vulkan/scripts/asciidoctor-chunker/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2018 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/codegen/vulkan/scripts/asciidoctor-chunker/README.md b/codegen/vulkan/scripts/asciidoctor-chunker/README.md
deleted file mode 100644
index 022c8f1..0000000
--- a/codegen/vulkan/scripts/asciidoctor-chunker/README.md
+++ /dev/null
@@ -1,123 +0,0 @@
-# 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/codegen/vulkan/scripts/asciidoctor-chunker/asciidoctor-chunker.js b/codegen/vulkan/scripts/asciidoctor-chunker/asciidoctor-chunker.js
deleted file mode 100755
index dd35f4e..0000000
--- a/codegen/vulkan/scripts/asciidoctor-chunker/asciidoctor-chunker.js
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/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/codegen/vulkan/scripts/cereal/__init__.py b/codegen/vulkan/scripts/cereal/__init__.py
deleted file mode 100644
index 1966572..0000000
--- a/codegen/vulkan/scripts/cereal/__init__.py
+++ /dev/null
@@ -1,20 +0,0 @@
-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 *
-from .api_log_decoder import *
-from .vkextensionstructuretype import VulkanGfxstreamStructureType, \
-    VulkanAndroidNativeBufferStructureType
diff --git a/codegen/vulkan/scripts/cereal/api_log_decoder.py b/codegen/vulkan/scripts/cereal/api_log_decoder.py
deleted file mode 100644
index 97930f5..0000000
--- a/codegen/vulkan/scripts/cereal/api_log_decoder.py
+++ /dev/null
@@ -1,338 +0,0 @@
-import os
-from typing import List, Set, Dict, Optional
-
-from . import VulkanType, VulkanCompoundType
-from .wrapperdefs import VulkanWrapperGenerator
-
-
-class ApiLogDecoder(VulkanWrapperGenerator):
-    """
-    This class generates decoding logic for the graphics API logs captured by
-    [GfxApiLogger](http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/base/GfxApiLogger.h)
-
-    This allows developers to see a pretty-printed version of the API log data when using
-    print_gfx_logs.py
-    """
-
-    # List of Vulkan APIs that we will generate decoding logic for
-    generated_apis = [
-        "vkAcquireImageANDROID",
-        "vkAllocateMemory",
-        "vkBeginCommandBufferAsyncGOOGLE",
-        "vkBindBufferMemory",
-        "vkBindImageMemory",
-        "vkCmdBeginRenderPass",
-        "vkCmdBindDescriptorSets",
-        "vkCmdBindIndexBuffer",
-        "vkCmdBindPipeline",
-        "vkCmdBindVertexBuffers",
-        "vkCmdClearAttachments",
-        "vkCmdClearColorImage",
-        "vkCmdCopyBufferToImage",
-        "vkCmdCopyImageToBuffer",
-        "vkCmdDraw",
-        "vkCmdDrawIndexed",
-        "vkCmdEndRenderPass",
-        "vkCmdPipelineBarrier",
-        "vkCmdSetScissor",
-        "vkCmdSetViewport",
-        "vkCollectDescriptorPoolIdsGOOGLE",
-        "vkCreateBufferWithRequirementsGOOGLE",
-        "vkCreateDescriptorPool",
-        "vkCreateDescriptorSetLayout",
-        "vkCreateFence",
-        "vkCreateFramebuffer",
-        "vkCreateGraphicsPipelines",
-        "vkCreateImageView",
-        "vkCreateImageWithRequirementsGOOGLE",
-        "vkCreatePipelineCache",
-        "vkCreateRenderPass",
-        "vkCreateSampler",
-        "vkCreateSemaphore",
-        "vkCreateShaderModule",
-        "vkDestroyBuffer",
-        "vkDestroyCommandPool",
-        "vkDestroyDescriptorPool",
-        "vkDestroyDescriptorSetLayout",
-        "vkDestroyDevice",
-        "vkDestroyFence",
-        "vkDestroyFramebuffer",
-        "vkDestroyImage",
-        "vkDestroyImageView",
-        "vkDestroyInstance",
-        "vkDestroyPipeline",
-        "vkDestroyPipelineCache",
-        "vkDestroyPipelineLayout",
-        "vkDestroyRenderPass",
-        "vkDestroySemaphore",
-        "vkDestroyShaderModule",
-        "vkEndCommandBufferAsyncGOOGLE",
-        "vkFreeCommandBuffers",
-        "vkFreeMemory",
-        "vkFreeMemorySyncGOOGLE",
-        "vkGetFenceStatus",
-        "vkGetMemoryHostAddressInfoGOOGLE",
-        "vkGetBlobGOOGLE",
-        "vkGetPhysicalDeviceFormatProperties",
-        "vkGetPhysicalDeviceProperties2KHR",
-        "vkGetPipelineCacheData",
-        "vkGetSwapchainGrallocUsageANDROID",
-        "vkQueueCommitDescriptorSetUpdatesGOOGLE",
-        "vkQueueFlushCommandsGOOGLE",
-        "vkQueueSignalReleaseImageANDROIDAsyncGOOGLE",
-        "vkQueueSubmitAsyncGOOGLE",
-        "vkQueueWaitIdle",
-        "vkResetFences",
-        "vkWaitForFences",
-    ]
-
-    def __init__(self, module, typeInfo):
-        VulkanWrapperGenerator.__init__(self, module, typeInfo)
-        self.typeInfo = typeInfo
-
-        # Set of Vulkan structs that we need to write decoding logic for
-        self.structs: Set[str] = set()
-
-        # Maps enum group names to the list of enums in the group, for all enum groups in the spec
-        # E.g.:  "VkResult": ["VK_SUCCESS", "VK_NOT_READY", "VK_TIMEOUT", etc...]
-        self.all_enums: Dict[str, List[str]] = {}
-
-        # Set of Vulkan enums that we need to write decoding logic for
-        self.needed_enums: Set[str] = {"VkStructureType"}
-
-    def onBegin(self):
-        self.module.append("""
-#####################################################################################################
-# Pretty-printer functions for Vulkan data structures
-# THIS FILE IS AUTO-GENERATED - DO NOT EDIT
-#
-# To re-generate this file, run generate-vulkan-sources.sh
-#####################################################################################################
-
-""".lstrip())
-
-    def onGenGroup(self, groupinfo, groupName, alias=None):
-        """Called for each enum group in the spec"""
-        for enum in groupinfo.elem.findall("enum"):
-            self.all_enums[groupName] = self.all_enums.get(groupName, []) + [enum.get('name')]
-
-    def onEnd(self):
-        for api_name in sorted(self.generated_apis):
-            self.process_api(api_name)
-        self.process_structs()
-        self.process_enums()
-
-    def process_api(self, api_name):
-        """Main entry point to generate decoding logic for each Vulkan API"""
-        api = self.typeInfo.apis[api_name]
-        self.module.append('def OP_{}(printer, indent: int):\n'.format(api_name))
-
-        # Decode the sequence number. All commands have sequence numbers, except those handled
-        # by VkSubdecoder.cpp. The logic here is a bit of a hack since it's based on the command
-        # name. Ideally, we would detect whether a particular command is part of a subdecode block
-        # in the decoding script.
-        if not api_name.startswith("vkCmd") and api_name != "vkBeginCommandBufferAsyncGOOGLE":
-            self.module.append('    printer.write_int("seqno: ", 4, indent)\n')
-
-        for param in api.parameters:
-            # Add any structs that this API uses to the list of structs to write decoding logic for
-            if self.typeInfo.isCompoundType(param.typeName):
-                self.structs.add(param.typeName)
-
-            # Don't try to print the pData field of vkQueueFlushCommandsGOOGLE, those are the
-            # commands processed as part of the subdecode pass
-            if api.name == "vkQueueFlushCommandsGOOGLE" and param.paramName == "pData":
-                continue
-
-            # Write out decoding logic for that parameter
-            self.process_type(param)
-
-        # Finally, add a return statement. This is needed in case the API has no parameters.
-        self.module.append('    return\n\n')
-
-    def process_structs(self):
-        """Writes decoding logic for all the structs that we use"""
-
-        # self.structs now contains all the structs used directly by the Vulkan APIs we use.
-        # Recursively expand this set to add all the structs used by these structs.
-        copy = self.structs.copy()
-        self.structs.clear()
-        for struct_name in copy:
-            self.expand_needed_structs(struct_name)
-
-        # Now we have the full list of structs that we need to write decoding logic for.
-        # Write a decoder for each of them
-        for struct_name in sorted(self.structs):
-            struct = self.typeInfo.structs[struct_name]
-            self.module.append('def struct_{}(printer, indent: int):\n'.format(struct_name))
-            for member in self.get_members(struct):
-                self.process_type(member)
-            self.module.append('\n')
-
-    def expand_needed_structs(self, struct_name: str):
-        """
-        Recursively adds all the structs used by a given struct to the list of structs to process
-        """
-        if struct_name in self.structs:
-            return
-        self.structs.add(struct_name)
-        struct = self.typeInfo.structs[struct_name]
-        for member in self.get_members(struct):
-            if self.typeInfo.isCompoundType(member.typeName):
-                self.expand_needed_structs(member.typeName)
-
-    def get_members(self, struct: VulkanCompoundType):
-        """
-        Returns the members of a struct/union that we need to process.
-        For structs, returns the list of all members
-        For unions, returns a list with just the first member.
-        """
-        return struct.members[0:1] if struct.isUnion else struct.members
-
-    def process_type(self, type: VulkanType):
-        """
-        Writes decoding logic for a single Vulkan type. This could be the parameter in a Vulkan API,
-        or a struct member.
-        """
-        if type.typeName == "VkStructureType":
-            self.module.append(
-                '    printer.write_stype_and_pnext("{}", indent)\n'.format(
-                    type.parent.structEnumExpr))
-            return
-
-        if type.isNextPointer():
-            return
-
-        if type.paramName == "commandBuffer":
-            if type.parent.name != "vkQueueFlushCommandsGOOGLE":
-                return
-
-        # Enums
-        if type.isEnum(self.typeInfo):
-            self.needed_enums.add(type.typeName)
-            self.module.append(
-                '    printer.write_enum("{}", {}, indent)\n'.format(
-                    type.paramName, type.typeName))
-            return
-
-        # Bitmasks
-        if type.isBitmask(self.typeInfo):
-            enum_type = self.typeInfo.bitmasks.get(type.typeName)
-            if enum_type:
-                self.needed_enums.add(enum_type)
-                self.module.append(
-                    '    printer.write_flags("{}", {}, indent)\n'.format(
-                        type.paramName, enum_type))
-                return
-            # else, fall through and let the primitive type logic handle it
-
-        # Structs or unions
-        if self.typeInfo.isCompoundType(type.typeName):
-            self.module.append(
-                '    printer.write_struct("{name}", struct_{type}, {optional}, {count}, indent)\n'
-                    .format(name=type.paramName,
-                            type=type.typeName,
-                            optional=type.isOptionalPointer(),
-                            count=self.get_length_expression(type)))
-            return
-
-        # Null-terminated strings
-        if type.isString():
-            self.module.append('    printer.write_string("{}", None, indent)\n'.format(
-                type.paramName))
-            return
-
-        # Arrays of primitive types
-        if type.staticArrExpr and type.primitiveEncodingSize and type.primitiveEncodingSize <= 8:
-            # Array sizes are specified either as a number, or as an enum value
-            array_size = int(type.staticArrExpr) if type.staticArrExpr.isdigit() \
-                else self.typeInfo.enumValues.get(type.staticArrExpr)
-            assert array_size is not None, type.staticArrExpr
-
-            if type.typeName == "char":
-                self.module.append(
-                    '    printer.write_string("{}", {}, indent)\n'.format(
-                        type.paramName, array_size))
-            elif type.typeName == "float":
-                self.module.append(
-                    '    printer.write_float("{}", indent, count={})\n'
-                        .format(type.paramName, array_size))
-            else:
-                self.module.append(
-                    '    printer.write_int("{name}", {int_size}, indent, signed={signed}, count={array_size})\n'
-                        .format(name=type.paramName,
-                                array_size=array_size,
-                                int_size=type.primitiveEncodingSize,
-                                signed=type.isSigned()))
-            return
-
-        # Pointers
-        if type.pointerIndirectionLevels > 0:
-            # Assume that all uint32* are always serialized directly rather than passed by pointers.
-            # This is probably not always true (e.g. out params) - fix this as needed.
-            size = 4 if type.primitiveEncodingSize == 4 else 8
-            self.module.append(
-                '    {name} = printer.write_int("{name}", {size}, indent, optional={opt}, count={count}, big_endian={big_endian})\n'
-                    .format(name=type.paramName,
-                            size=size,
-                            opt=type.isOptionalPointer(),
-                            count=self.get_length_expression(type),
-                            big_endian=self.using_big_endian(type)))
-            return
-
-        # Primitive types (ints, floats)
-        if type.isSimpleValueType(self.typeInfo) and type.primitiveEncodingSize:
-            if type.typeName == "float":
-                self.module.append(
-                    '    printer.write_float("{name}", indent)\n'.format(name=type.paramName))
-            else:
-                self.module.append(
-                    '    {name} = printer.write_int("{name}", {size}, indent, signed={signed}, big_endian={big_endian})\n'.format(
-                        name=type.paramName,
-                        size=type.primitiveEncodingSize,
-                        signed=type.isSigned(),
-                        big_endian=self.using_big_endian(type))
-                )
-            return
-
-        raise NotImplementedError(
-            "No decoding logic for {} {}".format(type.typeName, type.paramName))
-
-    def using_big_endian(self, type: VulkanType):
-        """For some reason gfxstream serializes some types as big endian"""
-        return type.typeName == "size_t"
-
-    def get_length_expression(self, type: VulkanType) -> Optional[str]:
-        """Returns the length expression for a given type"""
-        if type.lenExpr is None:
-            return None
-
-        if type.lenExpr.isalpha():
-            return type.lenExpr
-
-        # There are a couple of instances in the spec where we use a math expression to express the
-        # length (e.g. VkPipelineMultisampleStateCreateInfo). CodeGen().generalLengthAccess() has
-        # logic o parse these expressions correctly, but for now,we just use a simple lookup table.
-        known_expressions = {
-            r"latexmath:[\lceil{\mathit{rasterizationSamples} \over 32}\rceil]":
-                "int(rasterizationSamples / 32)",
-            r"latexmath:[\textrm{codeSize} \over 4]": "int(codeSize / 4)",
-            r"null-terminated": None
-        }
-        if type.lenExpr in known_expressions:
-            return known_expressions[type.lenExpr]
-
-        raise NotImplementedError("Unknown length expression: " + type.lenExpr)
-
-    def process_enums(self):
-        """
-        For each Vulkan enum that we use, write out a python dictionary mapping the enum values back
-        to the enum name as a string
-        """
-        for enum_name in sorted(self.needed_enums):
-            self.module.append('{} = {{\n'.format(enum_name))
-            for identifier in self.all_enums[enum_name]:
-                value = self.typeInfo.enumValues.get(identifier)
-                if value is not None and isinstance(value, int):
-                    self.module.append('    {}: "{}",\n'.format(value, identifier))
-            self.module.append('}\n\n')
diff --git a/codegen/vulkan/scripts/cereal/common/__init__.py b/codegen/vulkan/scripts/cereal/common/__init__.py
deleted file mode 100644
index dd6cdc9..0000000
--- a/codegen/vulkan/scripts/cereal/common/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from .vulkantypes import *
-from .codegen import *
diff --git a/codegen/vulkan/scripts/cereal/common/codegen.py b/codegen/vulkan/scripts/cereal/common/codegen.py
deleted file mode 100644
index b6b8a6b..0000000
--- a/codegen/vulkan/scripts/cereal/common/codegen.py
+++ /dev/null
@@ -1,1061 +0,0 @@
-# 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
-from pathlib import Path, PurePosixPath
-
-import os
-import sys
-import shutil
-import subprocess
-
-# Class capturing a single file
-
-
-class SingleFileModule(object):
-    def __init__(self, suffix, directory, basename, customAbsDir=None, suppress=False):
-        self.directory = directory
-        self.basename = basename
-        self.customAbsDir = customAbsDir
-        self.suffix = suffix
-        self.file = None
-
-        self.preamble = ""
-        self.postamble = ""
-
-        self.suppress = suppress
-
-    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)
-
-        self.file = open(filename + self.suffix, "w", encoding="utf-8")
-        self.file.write(self.preamble)
-
-    def append(self, toAppend):
-        if self.suppress:
-            return
-
-        self.file.write(toAppend)
-
-    def end(self):
-        if self.suppress:
-            return
-
-        self.file.write(self.postamble)
-        self.file.close()
-
-    def getMakefileSrcEntry(self):
-        return ""
-
-    def getCMakeSrcEntry(self):
-        return ""
-
-# 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,
-            headerOnly=False, suppressFeatureGuards=False):
-        self._headerFileModule = SingleFileModule(
-            ".h", directory, basename, customAbsDir, suppress or implOnly)
-        self._implFileModule = SingleFileModule(
-            ".cpp", directory, basename, customAbsDir, suppress or headerOnly)
-
-        self._headerOnly = headerOnly
-        self._implOnly = implOnly
-
-        self.directory = directory
-        self.basename = basename
-        self._customAbsDir = customAbsDir
-
-        self.suppressFeatureGuards = suppressFeatureGuards
-
-    @property
-    def suppress(self):
-        raise AttributeError("suppress is write only")
-
-    @suppress.setter
-    def suppress(self, value: bool):
-        self._headerFileModule.suppress = self._implOnly or value
-        self._implFileModule.suppress = self._headerOnly or value
-
-    @property
-    def headerPreamble(self) -> str:
-        return self._headerFileModule.preamble
-
-    @headerPreamble.setter
-    def headerPreamble(self, value: str):
-        self._headerFileModule.preamble = value
-
-    @property
-    def headerPostamble(self) -> str:
-        return self._headerFileModule.postamble
-
-    @headerPostamble.setter
-    def headerPostamble(self, value: str):
-        self._headerFileModule.postamble = value
-
-    @property
-    def implPreamble(self) -> str:
-        return self._implFileModule.preamble
-
-    @implPreamble.setter
-    def implPreamble(self, value: str):
-        self._implFileModule.preamble = value
-
-    @property
-    def implPostamble(self) -> str:
-        return self._implFileModule.postamble
-
-    @implPostamble.setter
-    def implPostamble(self, value: str):
-        self._implFileModule.postamble = value
-
-    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 = Path(self.directory)
-        baseName = Path(self.basename)
-        joined = PurePosixPath(dirName / baseName)
-        return "\n    " + str(joined) + ".cpp "
-
-    def begin(self, globalDir):
-        self._headerFileModule.begin(globalDir)
-        self._implFileModule.begin(globalDir)
-
-    def appendHeader(self, toAppend):
-        self._headerFileModule.append(toAppend)
-
-    def appendImpl(self, toAppend):
-        self._implFileModule.append(toAppend)
-
-    def end(self):
-        self._headerFileModule.end()
-        self._implFileModule.end()
-
-        clang_format_command = shutil.which('clang-format')
-        assert (clang_format_command is not None)
-
-        def formatFile(filename: Path):
-            assert (subprocess.call([clang_format_command, "-i",
-                    "--style=file", str(filename.resolve())]) == 0)
-
-        if not self._headerFileModule.suppress:
-            formatFile(Path(self._headerFileModule.file.name))
-
-        if not self._implFileModule.suppress:
-            formatFile(Path(self._implFileModule.file.name))
-
-
-class PyScript(SingleFileModule):
-    def __init__(self, directory, basename, customAbsDir=None, suppress=False):
-        super().__init__(".py", directory, basename, customAbsDir, suppress)
-
-
-# Class capturing a .proto protobuf definition file
-class Proto(SingleFileModule):
-
-    def __init__(self, directory, basename, customAbsDir=None, suppress=False):
-        super().__init__(".proto", directory, basename, customAbsDir, suppress)
-
-    def getMakefileSrcEntry(self):
-        super().getMakefileSrcEntry()
-        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):
-        super().getCMakeSrcEntry()
-        if self.customAbsDir:
-            return "\n" + self.basename + ".proto "
-
-        dirName = self.directory
-        baseName = self.basename
-        joined = os.path.join(dirName, baseName)
-        return "\n    " + joined + ".proto "
-
-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="", globalStatePrefix="", customParameters=None, checkForDeviceLost=False, checkForOutOfMemory=False):
-        callLhs = None
-
-        retTypeName = api.getRetTypeExpr()
-        retVar = None
-
-        if retTypeName != "void":
-            retVar = api.getRetVarExpr()
-            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)
-
-        if retTypeName == "VkResult" and checkForDeviceLost:
-            self.stmt("if ((%s) == VK_ERROR_DEVICE_LOST) %sDeviceLost()" % (callLhs, globalStatePrefix))
-
-        if retTypeName == "VkResult" and checkForOutOfMemory:
-            if api.name == "vkAllocateMemory":
-                self.stmt(
-                    "%sCheckOutOfMemory(%s, opcode, context, std::make_optional<uint64_t>(pAllocateInfo->allocationSize))"
-                    % (globalStatePrefix, callLhs))
-            else:
-                self.stmt(
-                    "%sCheckOutOfMemory(%s, opcode, context)"
-                    % (globalStatePrefix, callLhs))
-
-        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: Module, typeInfo: VulkanTypeInfo):
-        self.module: Module = module
-        self.typeInfo: VulkanTypeInfo = typeInfo
-        self.extensionStructTypes = OrderedDict()
-
-    def onBegin(self):
-        pass
-
-    def onEnd(self):
-        pass
-
-    def onBeginFeature(self, featureName, featureType):
-        pass
-
-    def onFeatureNewCmd(self, cmdName):
-        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": "VkCreateBlobGOOGLE",
-            "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/codegen/vulkan/scripts/cereal/common/vulkantypes.py b/codegen/vulkan/scripts/cereal/common/vulkantypes.py
deleted file mode 100644
index dc3a907..0000000
--- a/codegen/vulkan/scripts/cereal/common/vulkantypes.py
+++ /dev/null
@@ -1,1216 +0,0 @@
-# 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 typing import Dict, Optional, List, Set, Union
-from xml.etree.ElementTree import Element
-
-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",
-    "VkRenderPass",
-]
-
-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", "vkGetDeviceQueue2"],
-                    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")
-        if h == "VkRenderPass":
-            HANDLE_INFO[h] = \
-                HandleInfo(
-                    "VkRenderPass",
-                    ["vkCreateRenderPass", "vkCreateRenderPass2", "vkCreateRenderPass2KHR"],
-                    "vkDestroyRenderPass")
-    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",
-    "VkImageCreateInfo",
-]
-
-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: Optional[VulkanType] = None
-        self.typeName: str = ""
-
-        self.isTransformed = False
-
-        self.paramName: Optional[str] = None
-
-        self.lenExpr: Optional[str] = None  # Value of the `len` attribute in the spec
-        self.isOptional: bool = False
-        self.optionalStr: Optional[str] = None  # Value of the `optional` attribute in the spec
-
-        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 = {}
-
-        self.nonDispatchableHandleCreate = False
-        self.nonDispatchableHandleDestroy = False
-        self.dispatchHandle = False
-        self.dispatchableHandleCreate = False
-        self.dispatchableHandleDestroy = False
-
-
-    def __str__(self,):
-        return ("(vulkantype %s %s paramName %s len %s optional? %s "
-                "staticArrExpr %s)") % (
-            self.typeName + ("*" * self.pointerIndirectionLevels) +
-            ("ptr2constptr" if self.isPointerToConstPointer else ""), "const"
-            if self.isConst else "nonconst", self.paramName, self.lenExpr,
-            self.isOptional, self.staticArrExpr)
-
-    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):
-        return self.paramName == "pNext"
-
-    def isSigned(self):
-        return self.typeName in ["int", "int8_t", "int16_t", "int32_t", "int64_t"]
-
-    def isEnum(self, typeInfo):
-        return typeInfo.categoryOf(self.typeName) == "enum"
-
-    def isBitmask(self, typeInfo):
-        return typeInfo.categoryOf(self.typeName) == "enum"
-
-    # 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
-
-    def getPrintFormatSpecifier(self):
-        kKnownTypePrintFormatSpecifiers = {
-            'float': '%f',
-            'int': '%d',
-            'int32_t': '%d',
-            'size_t': '%ld',
-            'uint16_t': '%d',
-            'uint32_t': '%d',
-            'uint64_t': '%ld',
-            'VkBool32': '%d',
-            'VkDeviceSize': '%ld',
-            'VkFormat': '%d',
-            'VkImageLayout': '%d',
-        }
-
-        if self.pointerIndirectionLevels > 0 or self.isHandleType():
-            return '%p'
-
-        if self.typeName in kKnownTypePrintFormatSpecifiers:
-            return kKnownTypePrintFormatSpecifiers[self.typeName]
-
-        if self.typeName.endswith('Flags'):
-            # Based on `typedef uint32_t VkFlags;`
-            return '%d'
-
-        return None
-    def isOptionalPointer(self) -> bool:
-        return self.isOptional and \
-               self.pointerIndirectionLevels > 0 and \
-               (not self.isNextPointer())
-
-
-# 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: Element) -> VulkanType:
-    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: str, members: List[VulkanType], isUnion=False, structEnumExpr=None, structExtendsExpr=None, feature=None, initialEnv={}, optional=None):
-        self.name: str = name
-        self.typeName: str = name
-        self.members: List[VulkanType] = 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) -> Optional[VulkanType]:
-        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: str, retType: VulkanType, parameters, origName=None):
-        self.name: str = name
-        self.origName = name
-        self.retType: VulkanType = retType
-        self.parameters: List[VulkanType] = 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, generator):
-        self.generator = generator
-        self.categories: Set[str] = set([])
-
-        # Tracks what Vulkan type is part of what category.
-        self.typeCategories: Dict[str, str] = {}
-
-        # Tracks the primitive encoding size for each type, if applicable.
-        self.encodingSizes: Dict[str, Optional[int]] = {}
-
-        self.structs: Dict[str, VulkanCompoundType] = {}
-        self.apis: Dict[str, VulkanAPI] = {}
-
-        # Maps bitmask types to the enum type used for the flags
-        # E.g. "VkImageAspectFlags" -> "VkImageAspectFlagBits"
-        self.bitmasks: Dict[str, str] = {}
-
-        # Maps all enum names to their values.
-        # For aliases, the value is the name of the canonical enum
-        self.enumValues: Dict[str, Union[int, str]] = {}
-
-        self.feature = None
-
-    def initType(self, name: str, category: str):
-        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):
-        return self.typeCategories.get(name) == "handle"
-
-    def isCompoundType(self, name: str):
-        return self.typeCategories.get(name) in ["struct", "union"]
-
-    # Gets the best size in bytes
-    # for encoding/decoding a particular Vulkan type.
-    # If not applicable, returns None.
-    def setPrimitiveEncodingSize(self, name: str) -> Optional[int]:
-        baseEncodingSizes = {
-            "void": 8,
-            "char": 1,
-            "float": 4,
-            "uint8_t": 1,
-            "uint16_t": 2,
-            "uint32_t": 4,
-            "uint64_t": 8,
-            "int": 4,
-            "int8_t": 1,
-            "int16_t": 2,
-            "int32_t": 4,
-            "int64_t": 8,
-            "size_t": 8,
-            "ssize_t": 8,
-            "VkBool32": 4,
-        }
-
-        if name in baseEncodingSizes:
-            return baseEncodingSizes[name]
-
-        category = self.typeCategories[name]
-
-        if category in [None, "api", "include", "define", "struct", "union"]:
-            return None
-
-        # Handles are pointers so they must be 8 bytes. Basetype includes VkDeviceSize which is 8 bytes.
-        if category in ["handle", "basetype", "funcpointer"]:
-            return 8
-
-        if category in ["enum", "bitmask"]:
-            return 4
-
-    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, featureType):
-        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)
-
-        if category == "bitmask":
-            self.bitmasks[name] = typeinfo.elem.get("requires")
-
-    def onGenStruct(self, typeinfo, typeName, alias):
-        if not alias:
-            members: List[VulkanType] = []
-
-            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,
-                }
-                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")
-        enums = groupinfo.elem.findall("enum")
-        for enum in enums:
-            intVal, strVal = self.generator.enumToValue(enum, True)
-            self.enumValues[enum.get('name')] = intVal if intVal is not None else strVal
-
-
-    def onGenEnum(self, enuminfo, name: str, alias):
-        self.initType(name, "enum")
-        value: str = enuminfo.elem.get("value")
-        if value and value.isdigit():
-            self.enumValues[name] = int(value)
-        elif value and value[0] == '"' and value[-1] == '"':
-            self.enumValues[name] = value[1:-1]
-        elif alias is not None:
-            self.enumValues[name] = alias
-        else:
-            # There's about a dozen cases of using the bitwise NOT operator (e.g.: `(~0U)`, `(~0ULL)`)
-            # to concisely represent large values. Just ignore them for now.
-            # In the future, we can add a lookup table to convert these to int
-            return
-
-    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: VulkanTypeInfo, vulkanType: VulkanType, forEachType):
-    if not vulkanType.isArrayOfStrings():
-        if vulkanType.isPointerToConstPointer:
-            return False
-
-    forEachType.registerTypeInfo(typeInfo)
-
-    needCheck = vulkanType.isOptionalPointer()
-
-    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 None
-
-    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/codegen/vulkan/scripts/cereal/counting.py b/codegen/vulkan/scripts/cereal/counting.py
deleted file mode 100644
index 0557d32..0000000
--- a/codegen/vulkan/scripts/cereal/counting.py
+++ /dev/null
@@ -1,698 +0,0 @@
-# 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 "bitwise_and" == 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/codegen/vulkan/scripts/cereal/decoder.py b/codegen/vulkan/scripts/cereal/decoder.py
deleted file mode 100644
index e082db0..0000000
--- a/codegen/vulkan/scripts/cereal/decoder.py
+++ /dev/null
@@ -1,912 +0,0 @@
-from .common.codegen import CodeGen, VulkanWrapperGenerator
-from .common.vulkantypes import VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, VulkanTypeInfo,\
-    VulkanType
-
-from .marshaling import VulkanMarshalingCodegen
-from .reservedmarshaling import VulkanReservedMarshalingCodegen
-from .transform import TransformCodegen
-
-from .wrapperdefs import API_PREFIX_MARSHAL
-from .wrapperdefs import API_PREFIX_RESERVEDUNMARSHAL
-from .wrapperdefs import MAX_PACKET_LENGTH
-from .wrapperdefs import VULKAN_STREAM_TYPE
-from .wrapperdefs import ROOT_TYPE_DEFAULT_VALUE
-from .wrapperdefs import RELAXED_APIS
-
-
-SKIPPED_DECODER_DELETES = [
-    "vkFreeDescriptorSets",
-]
-
-DELAYED_DECODER_DELETES = [
-    "vkDestroyPipelineLayout",
-]
-
-global_state_prefix = "m_state->on_"
-
-decoder_decl_preamble = """
-
-namespace gfxstream {
-class IOStream;
-class ProcessResources;
-}  // namespace gfxstream
-
-namespace gfxstream {
-namespace vk {
-
-class VkDecoder {
-public:
-    VkDecoder();
-    ~VkDecoder();
-    void setForSnapshotLoad(bool forSnapshotLoad);
-    size_t decode(void* buf, size_t bufsize, IOStream* stream,
-                  const ProcessResources* processResources, const VkDecoderContext&);
-private:
-    class Impl;
-    std::unique_ptr<Impl> mImpl;
-};
-
-}  // namespace vk
-}  // namespace gfxstream
-
-"""
-
-decoder_impl_preamble ="""
-namespace gfxstream {
-namespace vk {
-
-using android::base::MetricEventBadPacketLength;
-using android::base::MetricEventDuplicateSequenceNum;
-
-class VkDecoder::Impl {
-public:
-    Impl() : m_logCalls(android::base::getEnvironmentVariable("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),
-             m_prevSeqno(std::nullopt) {}
-    %s* stream() { return &m_vkStream; }
-    VulkanMemReadingStream* readStream() { return &m_vkMemReadingStream; }
-
-    void setForSnapshotLoad(bool forSnapshotLoad) {
-        m_forSnapshotLoad = forSnapshotLoad;
-    }
-
-    size_t decode(void* buf, size_t bufsize, IOStream* stream,
-                  const ProcessResources* processResources, const VkDecoderContext&);
-
-private:
-    bool m_logCalls;
-    bool m_forSnapshotLoad = 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;
-    std::optional<uint32_t> m_prevSeqno;
-};
-
-VkDecoder::VkDecoder() :
-    mImpl(new VkDecoder::Impl()) { }
-
-VkDecoder::~VkDecoder() = default;
-
-void VkDecoder::setForSnapshotLoad(bool forSnapshotLoad) {
-    mImpl->setForSnapshotLoad(forSnapshotLoad);
-}
-
-size_t VkDecoder::decode(void* buf, size_t bufsize, IOStream* stream,
-                         const ProcessResources* processResources,
-                         const VkDecoderContext& context) {
-    return mImpl->decode(buf, bufsize, stream, processResources, context);
-}
-
-// VkDecoder::Impl::decode to follow
-""" % (VULKAN_STREAM_TYPE, VULKAN_STREAM_TYPE)
-
-decoder_impl_postamble = """
-
-}  // namespace vk
-}  // namespace gfxstream
-
-"""
-
-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: VulkanTypeInfo, param: VulkanType, cgen, globalWrapped):
-    cgen.stmt("// Begin {} wrapped dispatchable handle unboxing for {}".format(
-        "global" if globalWrapped else "non",
-        param.paramName))
-
-    iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
-        cgen,
-        READ_STREAM,
-        ROOT_TYPE_DEFAULT_VALUE,
-        param.paramName,
-        "readStreamPtrPtr",
-        API_PREFIX_RESERVEDUNMARSHAL,
-        "",
-        direction="read",
-        dynAlloc=True))
-
-    if not globalWrapped:
-        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: VulkanAPI):
-        self.params: list[VulkanType] = []
-        self.toRead: list[VulkanType] = []
-        self.toWrite: list[VulkanType] = []
-
-        for i, param in enumerate(api.parameters):
-            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)
-
-
-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: VulkanTypeInfo, api: VulkanAPI, cgen, globalWrapped=False):
-    decodingParams = DecodingParameters(api)
-
-    paramsToRead = decodingParams.toRead
-
-    for p in paramsToRead:
-        emit_param_decl_for_reading(p, cgen)
-
-    for i, p in enumerate(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 in ["vkQueueFlushCommandsGOOGLE", "vkQueueFlushCommandsFromAuxMemoryGOOGLE"] 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)
-
-    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, \
-        globalStatePrefix=global_state_prefix, checkForDeviceLost=True,
-        checkForOutOfMemory=True)
-
-    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, context):
-    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))
-    if context:
-        customParams += ["context"]
-    cgen.vkApiCall(api, customPrefix=global_state_prefix, \
-        customParameters=customParams, globalStatePrefix=global_state_prefix, \
-        checkForDeviceLost=True, checkForOutOfMemory=True)
-
-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) seqnoPtr->fetch_add(1, std::memory_order_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_decoding(typeInfo, api, cgen, globalWrapped=False, context=False):
-    isAcquire = api.name in RELAXED_APIS
-    emit_decode_parameters(typeInfo, api, cgen, globalWrapped)
-
-    if isAcquire:
-        emit_seqno_incr(api, cgen)
-
-    if globalWrapped:
-        emit_global_state_wrapped_call(api, cgen, context)
-    else:
-        emit_dispatch_call(api, cgen)
-
-    emit_decode_parameters_writeback(typeInfo, api, cgen, autobox=not globalWrapped)
-    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_default_decoding(typeInfo, api, cgen):
-    emit_decoding(typeInfo, api, cgen)
-
-def emit_global_state_wrapped_decoding(typeInfo, api, cgen):
-    emit_decoding(typeInfo, api, cgen, globalWrapped=True)
-
-def emit_global_state_wrapped_decoding_with_context(typeInfo, api, cgen):
-    emit_decoding(typeInfo, api, cgen, globalWrapped=True, context=True)
-
-## Custom decoding definitions##################################################
-def decode_vkFlushMappedMemoryRanges(typeInfo: VulkanTypeInfo, 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(::emugl::FatalError(::emugl::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,
-
-    "vkGetDeviceQueue2" : emit_global_state_wrapped_decoding,
-
-    "vkBindImageMemory" : emit_global_state_wrapped_decoding,
-    "vkBindImageMemory2" : emit_global_state_wrapped_decoding,
-    "vkBindImageMemory2KHR" : 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_with_context,
-    "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,
-    "vkGetBufferMemoryRequirements" : emit_global_state_wrapped_decoding,
-    "vkGetBufferMemoryRequirements2": emit_global_state_wrapped_decoding,
-    "vkGetBufferMemoryRequirements2KHR": 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,
-
-    "vkCreateShaderModule": emit_global_state_wrapped_decoding,
-    "vkDestroyShaderModule": emit_global_state_wrapped_decoding,
-    "vkCreatePipelineCache": emit_global_state_wrapped_decoding,
-    "vkDestroyPipelineCache": emit_global_state_wrapped_decoding,
-    "vkCreateGraphicsPipelines": emit_global_state_wrapped_decoding,
-    "vkDestroyPipeline": 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_with_context,
-    "vkEndCommandBuffer" : emit_global_state_wrapped_decoding_with_context,
-    "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,
-    "vkCreateRenderPass2" : emit_global_state_wrapped_decoding,
-    "vkCreateRenderPass2KHR" : emit_global_state_wrapped_decoding,
-    "vkDestroyRenderPass" : emit_global_state_wrapped_decoding,
-    "vkCreateFramebuffer" : emit_global_state_wrapped_decoding,
-    "vkDestroyFramebuffer" : emit_global_state_wrapped_decoding,
-
-    "vkCreateSamplerYcbcrConversion": emit_global_state_wrapped_decoding,
-    "vkDestroySamplerYcbcrConversion": 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,
-    "vkGetBlobGOOGLE" : 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_with_context,
-    "vkEndCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding_with_context,
-    "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,
-    "vkGetLinearImageLayout2GOOGLE" : emit_global_state_wrapped_decoding,
-    "vkQueueFlushCommandsGOOGLE" : emit_global_state_wrapped_decoding_with_context,
-    "vkQueueFlushCommandsFromAuxMemoryGOOGLE" : emit_global_state_wrapped_decoding_with_context,
-    "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,
-
-    # VK_KHR_sampler_ycbcr_conversion
-    "vkCreateSamplerYcbcrConversionKHR": emit_global_state_wrapped_decoding,
-    "vkDestroySamplerYcbcrConversionKHR": emit_global_state_wrapped_decoding,
-}
-
-class VulkanDecoder(VulkanWrapperGenerator):
-    def __init__(self, module, typeInfo):
-        VulkanWrapperGenerator.__init__(self, module, typeInfo)
-        self.typeInfo: VulkanTypeInfo = typeInfo
-        self.cgen = CodeGen()
-
-    def onBegin(self,):
-        self.module.appendImpl(
-            "#define MAX_PACKET_LENGTH %s\n" % MAX_PACKET_LENGTH)
-        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,
-                               const ProcessResources* processResources,
-                               const VkDecoderContext& context)
-""")
-
-        self.cgen.beginBlock() # function body
-
-        self.cgen.stmt("const char* processName = context.processName")
-        self.cgen.stmt("auto& gfx_logger = *context.gfxApiLogger")
-        self.cgen.stmt("auto* healthMonitor = context.healthMonitor")
-        self.cgen.stmt("auto& metricsLogger = *context.metricsLogger")
-        self.cgen.stmt("if (len < 8) return 0")
-        self.cgen.stmt("bool queueSubmitWithCommandsEnabled = feature_is_enabled(kFeature_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("uint32_t packetLen = *(uint32_t *)(ptr + 4)")
-        self.cgen.line("""
-        // packetLen should be at least 8 (op code and packet length) and should not be excessively large
-        if (packetLen < 8 || packetLen > MAX_PACKET_LENGTH) {
-            WARN("Bad packet length %d detected, decode may fail", packetLen);
-            metricsLogger.logMetricEvent(MetricEventBadPacketLength{ .len = packetLen });
-        }
-        """)
-        self.cgen.stmt("if (end - ptr < packetLen) return ptr - (unsigned char*)buf")
-        self.cgen.stmt("gfx_logger.record(ptr, std::min(size_t(packetLen + 8), size_t(end - ptr)))")
-
-        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("""
-        std::unique_ptr<EventHangMetadata::HangAnnotations> executionData =
-            std::make_unique<EventHangMetadata::HangAnnotations>();
-        if (healthMonitor) {
-            executionData->insert(
-                 {{"packet_length", std::to_string(packetLen)},
-                 {"opcode", std::to_string(opcode)}});
-            if (processName) {
-                executionData->insert(
-                    {{"renderthread_guest_process", std::string(processName)}});
-            }
-            if (m_prevSeqno) {
-                executionData->insert({{"previous_seqno", std::to_string(m_prevSeqno.value())}});
-            }
-        }
-
-        std::atomic<uint32_t>* seqnoPtr = processResources->getSequenceNumberPtr();
-
-        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 (healthMonitor) executionData->insert({{"seqno", std::to_string(seqno)}});
-            if (m_prevSeqno  && seqno == m_prevSeqno.value()) {
-                WARN(
-                    "Seqno %d is the same as previously processed on thread %d. It might be a "
-                    "duplicate command.",
-                    seqno, getCurrentThreadId());
-                metricsLogger.logMetricEvent(MetricEventDuplicateSequenceNum{ .opcode = opcode });
-            }
-            if (seqnoPtr && !m_forSnapshotLoad) {
-                {
-                    auto seqnoWatchdog =
-                        WATCHDOG_BUILDER(healthMonitor,
-                                         "RenderThread seqno loop")
-                            .setHangType(EventHangMetadata::HangType::kRenderThread)
-                            .setAnnotations(std::make_unique<EventHangMetadata::HangAnnotations>(*executionData))
-                            /* Data gathered if this hangs*/
-                            .setOnHangCallback([=]() {
-                                auto annotations = std::make_unique<EventHangMetadata::HangAnnotations>();
-                                annotations->insert({{"seqnoPtr", std::to_string(seqnoPtr->load(std::memory_order_seq_cst))}});
-                                return annotations;
-                            })
-                            .build();
-                    while ((seqno - seqnoPtr->load(std::memory_order_seq_cst) != 1)) {
-                        #if (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)))
-                        _mm_pause();
-                        #elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
-                        __asm__ __volatile__("pause;");
-                        #endif
-                    }
-                    m_prevSeqno = seqno;
-                }
-            }
-        }
-        """)
-
-        self.cgen.line("""
-        gfx_logger.recordCommandExecution();
-        """)
-
-        self.cgen.line("""
-        auto executionWatchdog =
-            WATCHDOG_BUILDER(healthMonitor, "RenderThread VkDecoder command execution")
-                .setHangType(EventHangMetadata::HangType::kRenderThread)
-                .setAnnotations(std::move(executionData))
-                .build();
-        """)
-
-        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: VulkanAPI = 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())
-        self.module.appendImpl(decoder_impl_postamble)
diff --git a/codegen/vulkan/scripts/cereal/decodersnapshot.py b/codegen/vulkan/scripts/cereal/decodersnapshot.py
deleted file mode 100644
index 4ff97a1..0000000
--- a/codegen/vulkan/scripts/cereal/decodersnapshot.py
+++ /dev/null
@@ -1,267 +0,0 @@
-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, emugl::GfxApiLogger& gfx_logger,
-              emugl::HealthMonitor<>* healthMonitor);
-"""
-
-decoder_snapshot_decl_postamble = """
-private:
-    class Impl;
-    std::unique_ptr<Impl> mImpl;
-
-};
-"""
-
-decoder_snapshot_impl_preamble ="""
-
-using namespace gfxstream::vk;
-using emugl::GfxApiLogger;
-using emugl::HealthMonitor;
-
-class VkDecoderSnapshot::Impl {
-public:
-    Impl() { }
-
-    void save(android::base::Stream* stream) {
-        mReconstruction.save(stream);
-    }
-
-    void load(android::base::Stream* stream, GfxApiLogger& gfx_logger,
-              HealthMonitor<>* healthMonitor) {
-        mReconstruction.load(stream, gfx_logger, healthMonitor);
-    }
-
-"""
-
-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, GfxApiLogger& gfx_logger,
-                             HealthMonitor<>* healthMonitor) {
-    mImpl->load(stream, gfx_logger, healthMonitor);
-}
-
-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, featureType):
-        VulkanWrapperGenerator.onBeginFeature(self, featureName, featureType)
-        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/codegen/vulkan/scripts/cereal/deepcopy.py b/codegen/vulkan/scripts/cereal/deepcopy.py
deleted file mode 100644
index 52842e9..0000000
--- a/codegen/vulkan/scripts/cereal/deepcopy.py
+++ /dev/null
@@ -1,383 +0,0 @@
-# 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/codegen/vulkan/scripts/cereal/dispatch.py b/codegen/vulkan/scripts/cereal/dispatch.py
deleted file mode 100644
index 42cba8c..0000000
--- a/codegen/vulkan/scripts/cereal/dispatch.py
+++ /dev/null
@@ -1,499 +0,0 @@
-# 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, featureType):
-        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, featureType):
-        VulkanDispatch.onBeginFeature(self, featureName, featureType);
-
-    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/codegen/vulkan/scripts/cereal/encoder.py b/codegen/vulkan/scripts/cereal/encoder.py
deleted file mode 100644
index d3e3974..0000000
--- a/codegen/vulkan/scripts/cereal/encoder.py
+++ /dev/null
@@ -1,717 +0,0 @@
-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 = """
-using android::base::guest::HealthMonitor;
-
-class VkEncoder {
-public:
-    VkEncoder(IOStream* stream, HealthMonitor<>* healthMonitor = nullptr);
-    ~VkEncoder();
-
-#include "VkEncoder.h.inl"
-"""
-
-encoder_decl_postamble = """
-private:
-    class Impl;
-    std::unique_ptr<Impl> mImpl;
-    HealthMonitor<>* mHealthMonitor;
-};
-"""
-
-encoder_impl_preamble ="""
-
-using namespace gfxstream::vk;
-
-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",
-    "vkGetPhysicalDeviceFeatures2",
-    "vkGetPhysicalDeviceFeatures2KHR",
-    "vkGetPhysicalDeviceProperties",
-    "vkGetPhysicalDeviceProperties2",
-    "vkGetPhysicalDeviceProperties2KHR",
-    "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))
-    cgen.stmt("healthMonitorAnnotation_packetSize = std::make_optional(packetSize_%s)" % (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* packetBeginPtr = streamPtr")
-    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("healthMonitorAnnotation_seqno = std::make_optional(seqno)")
-
-    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
-
-    cgen.beginIf("watchdog")
-    cgen.stmt("size_t watchdogBufSize = std::min<size_t>(static_cast<size_t>(packetSize_%s), kWatchdogBufferMax)" % (api.name))
-    cgen.stmt("healthMonitorAnnotation_packetContents.resize(watchdogBufSize)")
-    cgen.stmt("memcpy(&healthMonitorAnnotation_packetContents[0], packetBeginPtr, watchdogBufSize)")
-    cgen.endIf()
-
-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_debug_log(typeInfo, api, cgen):
-    logFormat = []
-    logVargs = []
-    for param in api.parameters:
-        if param.paramName == "doLock":
-            continue
-
-        paramFormatSpecifier = param.getPrintFormatSpecifier()
-        if not paramFormatSpecifier:
-            continue
-
-        logFormat.append(param.paramName + ":" + paramFormatSpecifier)
-        logVargs.append(param.paramName)
-
-    logFormatStr = ", ".join(logFormat)
-    logVargsStr = ", ".join(logVargs)
-
-    cgen.stmt("ENCODER_DEBUG_LOG(\"%s(%s)\", %s)" % (api.name, logFormatStr, logVargsStr))
-
-def emit_health_watchdog(api, cgen):
-    cgen.stmt("std::optional<uint32_t> healthMonitorAnnotation_seqno = std::nullopt")
-    cgen.stmt("std::optional<uint32_t> healthMonitorAnnotation_packetSize = std::nullopt")
-    cgen.stmt("std::vector<uint8_t> healthMonitorAnnotation_packetContents")
-    cgen.line("""
-    auto watchdog = WATCHDOG_BUILDER(mHealthMonitor, \"%s in VkEncoder\")
-                        .setOnHangCallback([&]() {
-                            auto annotations = std::make_unique<EventHangMetadata::HangAnnotations>();
-                            if (healthMonitorAnnotation_seqno) {
-                                annotations->insert({{"seqno", std::to_string(healthMonitorAnnotation_seqno.value())}});
-                            }
-                            if (healthMonitorAnnotation_packetSize) {
-                                annotations->insert({{"packetSize", std::to_string(healthMonitorAnnotation_packetSize.value())}});
-                            }
-                            if (!healthMonitorAnnotation_packetContents.empty()) {
-                                annotations->insert(
-                                    {{"packetContents", getPacketContents(
-                                        &healthMonitorAnnotation_packetContents[0], healthMonitorAnnotation_packetContents.size())}});
-                            }
-                            return std::move(annotations);
-                        })
-                        .build();
-    """% (api.name)
-    )
-
-def emit_default_encoding(typeInfo, api, cgen):
-    emit_debug_log(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())
-
-        def emit_function_impl(cgen):
-            emit_health_watchdog(api, cgen)
-            if api.name in custom_encodes.keys():
-                custom_encodes[api.name](self.typeInfo, api, cgen)
-            else:
-                emit_default_encoding(self.typeInfo, api, cgen)
-
-        self.module.appendImpl(self.cgenImpl.makeFuncImpl(apiImpl, emit_function_impl))
-
-    def onEnd(self,):
-        self.module.appendHeader(encoder_decl_postamble)
-        self.cgenHeader.decrIndent()
diff --git a/codegen/vulkan/scripts/cereal/extensionstructs.py b/codegen/vulkan/scripts/cereal/extensionstructs.py
deleted file mode 100644
index 95c9523..0000000
--- a/codegen/vulkan/scripts/cereal/extensionstructs.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# 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/codegen/vulkan/scripts/cereal/frontend.py b/codegen/vulkan/scripts/cereal/frontend.py
deleted file mode 100644
index b182c0e..0000000
--- a/codegen/vulkan/scripts/cereal/frontend.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# 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/codegen/vulkan/scripts/cereal/functable.py b/codegen/vulkan/scripts/cereal/functable.py
deleted file mode 100644
index f16735a..0000000
--- a/codegen/vulkan/scripts/cereal/functable.py
+++ /dev/null
@@ -1,360 +0,0 @@
-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",
-    "vkCmdPipelineBarrier",
-    "vkCreateGraphicsPipelines",
-]
-
-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.cmdToFeatureType = {}
-        self.feature = None
-        self.featureType = 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, featureType):
-        self.feature = featureName
-        self.featureType = featureType
-
-    def onEndFeature(self):
-        self.feature = None
-        self.featureType = None
-
-    def onFeatureNewCmd(self, name):
-        self.cmdToFeatureType[name] = self.featureType
-
-    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()")
-                if "VkCommandBuffer" == api.parameters[0].typeName:
-                    cgen.stmt("VkDevice device = resources->getDevice(commandBuffer)")
-                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()")
-                if "VkCommandBuffer" == api.parameters[0].typeName:
-                    cgen.stmt("VkDevice device = resources->getDevice(commandBuffer);")
-                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")
-        self.cgen.stmt(
-            "bool has1_2OrHigher = resources->getApiVersionFromInstance(instance) >= VK_API_VERSION_1_2")
-
-        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_2":
-                if self.isDeviceDispatch(e):
-                    self.cgen.stmt("return (void*)dynCheck_entry_%s" % e.name)
-                else:
-                    self.cgen.stmt( \
-                        "return has1_2OrHigher ? %s : nullptr" % \
-                        entryPointExpr)
-            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":
-                entryNeedsInstanceExtensionCheck = self.cmdToFeatureType[e.name] == "instance"
-
-                entryPrefix = "dynCheck_" if self.isDeviceDispatch(e) else ""
-                entryPointExpr = "(void*)%sentry_%s" % (entryPrefix, e.name)
-
-                if entryNeedsInstanceExtensionCheck:
-                    self.cgen.stmt("bool hasExt = resources->hasInstanceExtension(instance, \"%s\")"  % f)
-                    self.cgen.stmt("return hasExt ? %s : nullptr" % entryPointExpr)
-                else:
-                    # TODO(b/236246382): We need to check the device extension support here.
-                    self.cgen.stmt("// TODO(b/236246382): Check support for device extension");
-                    self.cgen.stmt("return %s" % 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):
-        # TODO(230793667): improve the heuristic and just use "cmdToFeatureType"
-        return (len(api.parameters) > 0 and
-            "VkDevice" == api.parameters[0].typeName) or (
-            "VkCommandBuffer" == api.parameters[0].typeName and
-            self.cmdToFeatureType.get(api.name, "") == "device")
diff --git a/codegen/vulkan/scripts/cereal/handlemap.py b/codegen/vulkan/scripts/cereal/handlemap.py
deleted file mode 100644
index 6360e37..0000000
--- a/codegen/vulkan/scripts/cereal/handlemap.py
+++ /dev/null
@@ -1,264 +0,0 @@
-# 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/codegen/vulkan/scripts/cereal/marshaling.py b/codegen/vulkan/scripts/cereal/marshaling.py
deleted file mode 100644
index 3427fed..0000000
--- a/codegen/vulkan/scripts/cereal/marshaling.py
+++ /dev/null
@@ -1,1037 +0,0 @@
-# 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 requires %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 "bitwise_and" == 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, featureType):
-        VulkanWrapperGenerator.onBeginFeature(self, featureName, featureType)
-        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/codegen/vulkan/scripts/cereal/marshalingdefs.py b/codegen/vulkan/scripts/cereal/marshalingdefs.py
deleted file mode 100644
index 88791f6..0000000
--- a/codegen/vulkan/scripts/cereal/marshalingdefs.py
+++ /dev/null
@@ -1,528 +0,0 @@
-# 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,
-    "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,
-    "vkGetBlobGOOGLE": 20341,
-}
-
-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/codegen/vulkan/scripts/cereal/reservedmarshaling.py b/codegen/vulkan/scripts/cereal/reservedmarshaling.py
deleted file mode 100644
index 23ace9d..0000000
--- a/codegen/vulkan/scripts/cereal/reservedmarshaling.py
+++ /dev/null
@@ -1,1055 +0,0 @@
-# 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 "bitwise_and" == 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, featureType):
-        VulkanWrapperGenerator.onBeginFeature(self, featureName, featureType)
-        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/codegen/vulkan/scripts/cereal/subdecode.py b/codegen/vulkan/scripts/cereal/subdecode.py
deleted file mode 100644
index b77cad7..0000000
--- a/codegen/vulkan/scripts/cereal/subdecode.py
+++ /dev/null
@@ -1,395 +0,0 @@
-from .common.codegen import CodeGen, VulkanWrapperGenerator
-from .common.vulkantypes import VulkanAPI, iterateVulkanType, VulkanType
-
-from .reservedmarshaling import VulkanReservedMarshalingCodegen
-from .transform import TransformCodegen
-
-from .wrapperdefs import API_PREFIX_RESERVEDUNMARSHAL
-from .wrapperdefs import MAX_PACKET_LENGTH
-from .wrapperdefs import ROOT_TYPE_DEFAULT_VALUE
-
-
-decoder_decl_preamble = """
-"""
-
-decoder_impl_preamble = """
-"""
-
-global_state_prefix = "this->on_"
-
-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: VulkanAPI):
-        self.params: list[VulkanType] = []
-        self.toRead: list[VulkanType] = []
-        self.toWrite: list[VulkanType] = []
-
-        for i, param in enumerate(api.parameters[1:]):
-            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)
-
-
-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,
-                    checkForDeviceLost=True, globalStatePrefix=global_state_prefix,
-                    checkForOutOfMemory=True)
-
-    if api.name in driver_workarounds_global_lock_apis:
-        cgen.stmt("unlock()")
-
-
-def emit_global_state_wrapped_call(api, cgen, context=False):
-    customParams = ["pool", "(VkCommandBuffer)(boxed_dispatchHandle)"] + \
-        list(map(lambda p: p.paramName, api.parameters[1:]))
-    if context:
-        customParams += ["context"];
-    cgen.vkApiCall(api, customPrefix=global_state_prefix,
-                   customParameters=customParams, checkForDeviceLost=True,
-                   checkForOutOfMemory=True, globalStatePrefix=global_state_prefix)
-
-
-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)
-
-def emit_global_state_wrapped_decoding_with_context(typeInfo, api, cgen):
-    emit_decode_parameters(typeInfo, api, cgen, globalWrapped=True)
-    emit_global_state_wrapped_call(api, cgen, context=True)
-
-custom_decodes = {
-    "vkCmdCopyBufferToImage": emit_global_state_wrapped_decoding_with_context,
-    "vkCmdCopyImage": emit_global_state_wrapped_decoding,
-    "vkCmdCopyImageToBuffer": emit_global_state_wrapped_decoding,
-    "vkCmdExecuteCommands": emit_global_state_wrapped_decoding,
-    "vkBeginCommandBuffer": emit_global_state_wrapped_decoding_with_context,
-    "vkEndCommandBuffer": emit_global_state_wrapped_decoding_with_context,
-    "vkResetCommandBuffer": emit_global_state_wrapped_decoding,
-    "vkCmdPipelineBarrier": emit_global_state_wrapped_decoding,
-    "vkCmdBindPipeline": emit_global_state_wrapped_decoding,
-    "vkCmdBindDescriptorSets": emit_global_state_wrapped_decoding,
-    "vkCmdCopyQueryPoolResults": emit_global_state_wrapped_decoding,
-    "vkBeginCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding_with_context,
-    "vkEndCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding_with_context,
-    "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(
-            "#define MAX_PACKET_LENGTH %s\n" % MAX_PACKET_LENGTH)
-
-        self.module.appendImpl(
-            "size_t subDecode(VulkanMemReadingStream* readStream, VulkanDispatch* vk, void* boxed_dispatchHandle, void* dispatchHandle, VkDeviceSize dataSize, const void* pData, const VkDecoderContext& context)\n")
-
-        self.cgen.beginBlock()  # function body
-
-        self.cgen.stmt("auto& metricsLogger = *context.metricsLogger")
-        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("uint32_t packetLen = *(uint32_t *)(ptr + 4)")
-        self.cgen.line("""
-        // packetLen should be at least 8 (op code and packet length) and should not be excessively large
-        if (packetLen < 8 || packetLen > MAX_PACKET_LENGTH) {
-            WARN("Bad packet length %d detected, subdecode may fail", packetLen);
-            metricsLogger.logMetricEvent(MetricEventBadPacketLength{ .len = packetLen });
-        }
-        """)
-        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(::emugl::FatalError(::emugl::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/codegen/vulkan/scripts/cereal/testing.py b/codegen/vulkan/scripts/cereal/testing.py
deleted file mode 100644
index 898532f..0000000
--- a/codegen/vulkan/scripts/cereal/testing.py
+++ /dev/null
@@ -1,399 +0,0 @@
-# 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/codegen/vulkan/scripts/cereal/transform.py b/codegen/vulkan/scripts/cereal/transform.py
deleted file mode 100644
index 79aff0e..0000000
--- a/codegen/vulkan/scripts/cereal/transform.py
+++ /dev/null
@@ -1,348 +0,0 @@
-# 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/codegen/vulkan/scripts/cereal/unbox.py b/codegen/vulkan/scripts/cereal/unbox.py
deleted file mode 100644
index f18fa27..0000000
--- a/codegen/vulkan/scripts/cereal/unbox.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# 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/codegen/vulkan/scripts/cereal/vkextensionstructuretype.py b/codegen/vulkan/scripts/cereal/vkextensionstructuretype.py
deleted file mode 100644
index 8db988a..0000000
--- a/codegen/vulkan/scripts/cereal/vkextensionstructuretype.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (c) 2022 The Android Open Source Project
-# Copyright (c) 2022 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 .wrapperdefs import VulkanWrapperGenerator
-
-
-class VulkanExtensionStructureType(VulkanWrapperGenerator):
-    def __init__(self, extensionName: str, module, typeInfo):
-        super().__init__(module, typeInfo)
-        self._extensionName = extensionName
-
-    def onGenGroup(self, groupinfo, groupName, alias=None):
-        super().onGenGroup(groupinfo, groupName, alias)
-        elem = groupinfo.elem
-        if (not elem.get('type') == 'enum'):
-            return
-        if (not elem.get('name') == 'VkStructureType'):
-            return
-        extensionEnumFactoryMacro = f'{self._extensionName.upper()}_ENUM'
-        for enum in elem.findall(f"enum[@extname='{self._extensionName}']"):
-            name = enum.get('name')
-            offset = enum.get('offset')
-            self.module.appendHeader(
-                f"#define {name} {extensionEnumFactoryMacro}(VkStructureType, {offset})\n")
-
-
-class VulkanGfxstreamStructureType(VulkanExtensionStructureType):
-    def __init__(self, module, typeInfo):
-        super().__init__('VK_GOOGLE_gfxstream', module, typeInfo)
-
-
-class VulkanAndroidNativeBufferStructureType(VulkanExtensionStructureType):
-    def __init__(self, module, typeInfo):
-        super().__init__('VK_ANDROID_native_buffer', module, typeInfo)
diff --git a/codegen/vulkan/scripts/cereal/wrapperdefs.py b/codegen/vulkan/scripts/cereal/wrapperdefs.py
deleted file mode 100644
index 9b96987..0000000
--- a/codegen/vulkan/scripts/cereal/wrapperdefs.py
+++ /dev/null
@@ -1,108 +0,0 @@
-# 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",
-    "VkImportBufferGOOGLE": "VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE",
-    "VkCreateBlobGOOGLE": "VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE",
-}
-
-MAX_PACKET_LENGTH = "(400 * 1024 * 1024) // 400MB"
-
-
-
diff --git a/codegen/vulkan/scripts/cerealgenerator.py b/codegen/vulkan/scripts/cerealgenerator.py
deleted file mode 100644
index 02d7f22..0000000
--- a/codegen/vulkan/scripts/cerealgenerator.py
+++ /dev/null
@@ -1,802 +0,0 @@
-#!/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 *
-from pathlib import Path, PurePosixPath
-
-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
-from reg import GroupInfo, TypeInfo, EnumInfo
-
-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.
-"""
-
-# We put the long generated commands in a separate paragraph, so that the formatter won't mess up
-# with other texts.
-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 makePosixRelative(someArg):
-        if os.path.exists(someArg):
-            return str(PurePosixPath(Path(os.path.relpath(someArg))))
-        return someArg
-
-    return ' '.join(map(makePosixRelative, 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)
-
-        self.modules = {}
-        self.protos = {}
-        self.moduleList = []
-        self.protoList = []
-
-        self.wrappers = []
-
-        self.codegen = cereal.CodeGen()
-
-        self.guestBaseLibDirPrefix = \
-            envGetOrDefault("VK_CEREAL_GUEST_BASELIB_PREFIX", "aemu/base")
-        self.baseLibDirPrefix = \
-            envGetOrDefault("VK_CEREAL_BASELIB_PREFIX", "aemu/base")
-        self.baseLibLinkName = \
-            envGetOrDefault("VK_CEREAL_BASELIB_LINKNAME", "android-emu-base")
-        self.vulkanHeaderTargetName = envGetOrDefault("VK_CEREAL_VK_HEADER_TARGET", "")
-        self.utilsHeader = envGetOrDefault("VK_CEREAL_UTILS_LINKNAME", "")
-        self.utilsHeaderDirPrefix = envGetOrDefault("VK_CEREAL_UTILS_PREFIX", "utils")
-
-        # THe host always needs all possible guest struct definitions, while the guest only needs
-        # platform sepcific headers.
-        self.hostCommonExtraVulkanHeaders = '#include "vk_android_native_buffer.h"'
-        self.host_cmake_generator = lambda cppFiles: f"""{autogeneratedMkTemplate % banner_command(sys.argv)}
-add_library(OpenglRender_vulkan_cereal {cppFiles})
-target_compile_definitions(OpenglRender_vulkan_cereal PRIVATE -DVK_GOOGLE_gfxstream)
-if (WIN32)
-    target_compile_definitions(OpenglRender_vulkan_cereal PRIVATE -DVK_USE_PLATFORM_WIN32_KHR)
-endif()
-target_link_libraries(
-    OpenglRender_vulkan_cereal
-    PUBLIC
-    {self.baseLibLinkName}
-    {self.vulkanHeaderTargetName}
-    PRIVATE
-    {self.utilsHeader})
-
-target_include_directories(OpenglRender_vulkan_cereal
-                           PUBLIC
-                           .
-                           PRIVATE
-                           ..
-                           ../..
-                           ../../../include)
-"""
-
-        encoderInclude = f"""
-#include "{self.guestBaseLibDirPrefix}/AndroidHealthMonitor.h"
-#include "goldfish_vk_private_defs.h"
-#include <memory>
-
-namespace gfxstream {{
-class IOStream;
-}}
-"""
-        encoderImplInclude = f"""
-#include "EncoderDebug.h"
-#include "IOStream.h"
-#include "Resources.h"
-#include "ResourceTracker.h"
-#include "Validation.h"
-#include "%s.h"
-
-#include "{self.guestBaseLibDirPrefix}/AlignedBuf.h"
-#include "{self.guestBaseLibDirPrefix}/BumpPool.h"
-#include "{self.guestBaseLibDirPrefix}/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 <memory>
-#include <optional>
-#include <unordered_map>
-#include <string>
-#include <vector>
-
-""" % 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 = f"""
-{self.hostCommonExtraVulkanHeaders}
-#include "goldfish_vk_private_defs.h"
-
-#include "%s.h"
-#include "{self.baseLibDirPrefix}/files/StreamSerializing.h"
-""" % VULKAN_STREAM_TYPE
-
-        testingInclude = f"""
-{self.hostCommonExtraVulkanHeaders}
-#include "goldfish_vk_private_defs.h"
-#include <string.h>
-#include <functional>
-using OnFailCompareFunc = std::function<void(const char*)>;
-"""
-        poolInclude = f"""
-{self.hostCommonExtraVulkanHeaders}
-#include "goldfish_vk_private_defs.h"
-#include "{self.baseLibDirPrefix}/BumpPool.h"
-using android::base::Allocator;
-using android::base::BumpPool;
-"""
-        handleMapInclude = f"""
-{self.hostCommonExtraVulkanHeaders}
-#include "goldfish_vk_private_defs.h"
-#include "VulkanHandleMapping.h"
-"""
-        transformIncludeGuest = """
-#include "goldfish_vk_private_defs.h"
-"""
-        transformInclude = f"""
-{self.hostCommonExtraVulkanHeaders}
-#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 = f"""
-#include "goldfish_vk_private_defs.h"
-#include "{self.guestBaseLibDirPrefix}/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 = f"""
-{self.hostCommonExtraVulkanHeaders}
-#include "goldfish_vk_private_defs.h"
-namespace gfxstream {{
-namespace vk {{
-
-struct VulkanDispatch;
-
-}} // namespace vk
-}} // namespace gfxstream
-using DlOpenFunc = void* (void);
-using DlSymFunc = void* (void*, const char*);
-"""
-
-        extensionStructsInclude = f"""
-{self.hostCommonExtraVulkanHeaders}
-#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"
-#include <string.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 = f"""
-#include <memory>
-#include "{self.utilsHeaderDirPrefix}/GfxApiLogger.h"
-#include "{self.baseLibDirPrefix}/HealthMonitor.h"
-#include "common/goldfish_vk_private_defs.h"
-"""
-        decoderSnapshotImplIncludes = f"""
-#include "VulkanHandleMapping.h"
-#include "VkDecoderGlobalState.h"
-#include "VkReconstruction.h"
-
-#include "{self.baseLibDirPrefix}/synchronization/Lock.h"
-"""
-
-        decoderHeaderIncludes = f"""
-#include "VkDecoderContext.h"
-
-#include <memory>
-
-namespace android {{
-namespace base {{
-class BumpPool;
-}} // namespace android
-}} // namespace base
-
-"""
-
-        decoderImplIncludes = f"""
-#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 "{self.baseLibDirPrefix}/BumpPool.h"
-#include "{self.baseLibDirPrefix}/system/System.h"
-#include "{self.baseLibDirPrefix}/Tracing.h"
-#include "{self.baseLibDirPrefix}/Metrics.h"
-#include "render-utils/IOStream.h"
-#include "host/FrameBuffer.h"
-#include "host-common/feature_control.h"
-#include "host-common/GfxstreamFatalError.h"
-#include "host-common/logging.h"
-
-#include "VkDecoderGlobalState.h"
-#include "VkDecoderSnapshot.h"
-
-#include "VulkanDispatch.h"
-#include "%s.h"
-
-#include <functional>
-#include <optional>
-#include <unordered_map>
-""" % VULKAN_STREAM_TYPE
-
-        def createVkExtensionStructureTypePreamble(extensionName: str) -> str:
-            return f"""
-#define {extensionName}_ENUM(type,id) \
-    ((type)(1000000000 + (1000 * ({extensionName}_NUMBER - 1)) + (id)))
-"""
-        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.host_script_destination = envGetOrDefault("VK_CEREAL_HOST_SCRIPTS_DIR")
-        assert(self.host_script_destination is not None)
-
-        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(
-            "vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True,
-            moduleName="vulkan_gfxstream_structure_type_guest", useNamespace=False,
-            suppressVulkanHeaders=True,
-            extraHeader=createVkExtensionStructureTypePreamble('VK_GOOGLE_GFXSTREAM'))
-
-        self.addGuestEncoderModule("func_table", extraImpl=functableImplInclude)
-
-        self.addCppModule("common", "goldfish_vk_extension_structs",
-                       extraHeader=extensionStructsInclude)
-        self.addCppModule("common", "goldfish_vk_marshaling",
-                       extraHeader=vulkanStreamIncludeHost,
-                       extraImpl=commonCerealImplIncludes)
-        self.addCppModule("common", "goldfish_vk_reserved_marshaling",
-                       extraHeader=vulkanStreamIncludeHost,
-                       extraImpl=commonCerealImplIncludes)
-        self.addCppModule("common", "goldfish_vk_testing",
-                       extraHeader=testingInclude,
-                       extraImpl=commonCerealImplIncludes)
-        self.addCppModule("common", "goldfish_vk_deepcopy",
-                       extraHeader=poolInclude,
-                       extraImpl=commonCerealImplIncludes + deepcopyInclude)
-        self.addCppModule("common", "goldfish_vk_handlemap",
-                       extraHeader=handleMapInclude,
-                       extraImpl=commonCerealImplIncludes)
-        self.addCppModule("common", "goldfish_vk_dispatch",
-                       extraHeader=dispatchHeaderDefs,
-                       extraImpl=dispatchImplIncludes)
-        self.addCppModule("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.addModule(cereal.PyScript(self.host_tag, "vulkan_printer", customAbsDir=Path(
-            self.host_script_destination) / "print_gfx_logs"), moduleName="ApiLogDecoder")
-        self.addHostModule(
-            "vulkan_gfxstream_structure_type", headerOnly=True, suppressFeatureGuards=True,
-            moduleName="vulkan_gfxstream_structure_type_host", useNamespace=False,
-            suppressVulkanHeaders=True,
-            extraHeader=createVkExtensionStructureTypePreamble('VK_GOOGLE_GFXSTREAM'))
-        self.addHostModule(
-            "vk_android_native_buffer_structure_type", headerOnly=True, suppressFeatureGuards=True,
-            useNamespace=False, suppressVulkanHeaders=True,
-            extraHeader=createVkExtensionStructureTypePreamble('VK_ANDROID_NATIVE_BUFFER'))
-
-        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.addWrapper(cereal.ApiLogDecoder, "ApiLogDecoder")
-        self.addWrapper(cereal.VulkanGfxstreamStructureType,
-                        "vulkan_gfxstream_structure_type_guest")
-        self.addWrapper(cereal.VulkanGfxstreamStructureType, "vulkan_gfxstream_structure_type_host")
-        self.addWrapper(cereal.VulkanAndroidNativeBufferStructureType,
-                        "vk_android_native_buffer_structure_type")
-
-        self.guestAndroidMkCppFiles = ""
-        self.hostCMakeCppFiles = ""
-        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:
-                self.hostCMakeCppFiles += cmakeSrcEntry
-
-        self.forEachModule(addSrcEntry)
-
-    def addGuestEncoderModule(
-            self, basename, extraHeader="", extraImpl="", useNamespace=True, headerOnly=False,
-            suppressFeatureGuards=False, moduleName=None, suppressVulkanHeaders=False):
-        if not os.path.exists(self.guest_abs_encoder_destination):
-            print("Path [%s] not found (guest encoder path), skipping" % self.guest_abs_encoder_destination)
-            return
-        self.addCppModule(self.guest_encoder_tag, basename, extraHeader=extraHeader,
-                       extraImpl=extraImpl, customAbsDir=self.guest_abs_encoder_destination,
-                       useNamespace=useNamespace, headerOnly=headerOnly,
-                       suppressFeatureGuards=suppressFeatureGuards, moduleName=moduleName,
-                       suppressVulkanHeaders=suppressVulkanHeaders)
-
-    def addGuestHalModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True):
-        if not os.path.exists(self.guest_abs_hal_destination):
-            print("Path [%s] not found (guest encoder path), skipping" % self.guest_abs_encoder_destination)
-            return
-        self.addCppModule(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,
-            suppress=False, headerOnly=False, suppressFeatureGuards=False, moduleName=None,
-            suppressVulkanHeaders=False):
-        if not os.path.exists(self.host_abs_decoder_destination):
-            print("Path [%s] not found (host encoder path), skipping" %
-                  self.host_abs_decoder_destination)
-            return
-        if not suppressVulkanHeaders:
-            extraHeader = self.hostCommonExtraVulkanHeaders + '\n' + extraHeader
-        self.addCppModule(
-            self.host_tag, basename, extraHeader=extraHeader, extraImpl=extraImpl,
-            customAbsDir=self.host_abs_decoder_destination, useNamespace=useNamespace,
-            implOnly=implOnly, suppress=suppress, headerOnly=headerOnly,
-            suppressFeatureGuards=suppressFeatureGuards, moduleName=moduleName,
-            suppressVulkanHeaders=suppressVulkanHeaders)
-
-    def addModule(self, module, moduleName=None):
-        if moduleName is None:
-            moduleName = module.basename
-        self.moduleList.append(moduleName)
-        self.modules[moduleName] = module
-
-    def addCppModule(
-            self, directory, basename, extraHeader="", extraImpl="", customAbsDir=None,
-            useNamespace=True, implOnly=False, suppress=False, headerOnly=False,
-            suppressFeatureGuards=False, moduleName=None, suppressVulkanHeaders=False):
-        module = cereal.Module(
-            directory, basename, customAbsDir=customAbsDir, suppress=suppress, implOnly=implOnly,
-            headerOnly=headerOnly, suppressFeatureGuards=suppressFeatureGuards)
-        self.addModule(module, moduleName=moduleName)
-        module.headerPreamble = copyrightHeader
-        module.headerPreamble += \
-                autogeneratedHeaderTemplate % \
-                (basename, "(header) generated by %s" % banner_command(sys.argv))
-
-
-        namespaceBegin = """
-namespace gfxstream {
-namespace vk {
-""" if useNamespace else ""
-
-        namespaceEnd = """
-}  // namespace vk"
-}  // namespace gfxstream
-""" if useNamespace else ""
-
-        module.headerPreamble += "#pragma once\n"
-        if (not suppressVulkanHeaders):
-            module.headerPreamble += "#include <vulkan/vulkan.h>\n"
-            module.headerPreamble += '#include "vulkan_gfxstream.h"\n'
-        module.headerPreamble += extraHeader + '\n'
-        if namespaceBegin:
-            module.headerPreamble += namespaceBegin + '\n'
-
-        module.implPreamble = copyrightHeader
-        module.implPreamble += \
-                autogeneratedHeaderTemplate % \
-                (basename, "(impl) generated by %s" % \
-                    banner_command(sys.argv))
-        if not implOnly:
-            module.implPreamble += """
-#include "%s.h"
-
-%s
-
-%s
-
-""" % (basename, extraImpl, namespaceBegin)
-
-        module.headerPostamble = """
-%s
-""" % namespaceEnd
-        module.implPostamble = """
-%s
-""" % namespaceEnd
-
-    def addWrapper(self, moduleType, moduleName, **kwargs):
-        if moduleName not in self.modules:
-            print(f'Unknown module: {moduleName}. All known modules are: {", ".join(self.modules)}.')
-            return
-        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.hostCMakeCppFiles),
-                  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.featureType)
-
-        self.forEachModule(
-            lambda m: m.appendHeader("#ifdef %s\n" % self.featureName)
-            if isinstance(m, cereal.Module) and not m.suppressFeatureGuards else None)
-        self.forEachModule(
-            lambda m: m.appendImpl("#ifdef %s\n" % self.featureName)
-            if isinstance(m, cereal.Module) and not m.suppressFeatureGuards else None)
-        self.forEachWrapper(lambda w: w.onBeginFeature(self.featureName, self.featureType))
-        # functable needs to understand the feature type (device vs instance) of each cmd
-        for features in interface.findall('require'):
-            for c in features.findall('command'):
-                self.forEachWrapper(lambda w: w.onFeatureNewCmd(c.get('name')))
-
-    def endFeature(self):
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-
-        self.typeInfo.onEndFeature()
-
-        self.forEachModule(lambda m: m.appendHeader("#endif\n") if isinstance(
-            m, cereal.Module) and not m.suppressFeatureGuards else None)
-        self.forEachModule(lambda m: m.appendImpl("#endif\n") if isinstance(
-            m, cereal.Module) and not m.suppressFeatureGuards else None)
-        self.forEachWrapper(lambda w: w.onEndFeature())
-
-    def genType(self, typeinfo: 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: 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: 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/codegen/vulkan/scripts/cgenerator.py b/codegen/vulkan/scripts/cgenerator.py
deleted file mode 100644
index 5614602..0000000
--- a/codegen/vulkan/scripts/cgenerator.py
+++ /dev/null
@@ -1,420 +0,0 @@
-#!/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/codegen/vulkan/scripts/checkXrefs b/codegen/vulkan/scripts/checkXrefs
deleted file mode 100755
index 6d5dc7d..0000000
--- a/codegen/vulkan/scripts/checkXrefs
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/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/codegen/vulkan/scripts/check_html_xrefs.py b/codegen/vulkan/scripts/check_html_xrefs.py
deleted file mode 100755
index 0081e6c..0000000
--- a/codegen/vulkan/scripts/check_html_xrefs.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/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/codegen/vulkan/scripts/check_spec_links.py b/codegen/vulkan/scripts/check_spec_links.py
deleted file mode 100755
index 16cfe43..0000000
--- a/codegen/vulkan/scripts/check_spec_links.py
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/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/codegen/vulkan/scripts/ci/check_undefined b/codegen/vulkan/scripts/ci/check_undefined
deleted file mode 100755
index b747b1d..0000000
--- a/codegen/vulkan/scripts/ci/check_undefined
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/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/codegen/vulkan/scripts/comment_convert.py b/codegen/vulkan/scripts/comment_convert.py
deleted file mode 100755
index f1fa938..0000000
--- a/codegen/vulkan/scripts/comment_convert.py
+++ /dev/null
@@ -1,203 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (c) 2019 Collabora, Ltd.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
-#
-# Purpose:      This script converts leading comments on some Python
-#               classes and functions into docstrings.
-#               It doesn't attempt to deal with line continuations, etc.
-#               so you may want to "join line" on your def statements
-#               temporarily before running.
-
-import re
-
-from spec_tools.file_process import LinewiseFileProcessor
-
-COMMENT_RE = re.compile(r" *#(!.*| (?P<content>.*))?")
-CONVERTIBLE_DEF_RE = re.compile(r"(?P<indentation> *)(def|class) .*:")
-
-
-class CommentConverter(LinewiseFileProcessor):
-    def __init__(self, single_line_quotes=False, allow_blank_lines=False):
-        super().__init__()
-        self.comment_lines = []
-        "Temporary storage for contiguous comment lines."
-
-        self.trailing_empty_lines = []
-        "Temporary storage for empty lines following a comment."
-
-        self.output_lines = []
-        "Fully-processed output lines."
-
-        self.single_line_quotes = single_line_quotes
-        "Whether we generate simple, single-line quotes for single line comments."
-
-        self.allow_blank_lines = allow_blank_lines
-        "Whether we allow blank lines between a comment and the thing it's considered to document."
-
-        self.done_with_initial_comment = False
-        "Have we read our first non-comment line yet?"
-
-    def output_line(self, line=None):
-        if line:
-            self.output_lines.append(line)
-        else:
-            self.output_lines.append("")
-
-    def output_normal_line(self, line):
-        # flush any comment lines we had stored and output this line.
-        self.dump_comment_lines()
-        self.output_line(line)
-
-    def dump_comment_lines(self):
-        # Early out for empty
-        if not self.comment_lines:
-            return
-
-        for line in self.comment_lines:
-            self.output_line(line)
-        self.comment_lines = []
-
-        for line in self.trailing_empty_lines:
-            self.output_line(line)
-        self.trailing_empty_lines = []
-
-    def dump_converted_comment_lines(self, indent):
-        # Early out for empty
-        if not self.comment_lines:
-            return
-
-        for line in self.trailing_empty_lines:
-            self.output_line(line)
-        self.trailing_empty_lines = []
-
-        indent = indent + '    '
-
-        def extract(line):
-            match = COMMENT_RE.match(line)
-            content = match.group('content')
-            if content:
-                return content
-            return ""
-
-        # Extract comment content
-        lines = [extract(line) for line in self.comment_lines]
-
-        # Drop leading empty comments.
-        while lines and not lines[0].strip():
-            lines.pop(0)
-
-        # Drop trailing empty comments.
-        while lines and not lines[-1].strip():
-            lines.pop()
-
-        # Add single- or multi-line-string quote
-        if self.single_line_quotes \
-            and len(lines) == 1 \
-                and '"' not in lines[0]:
-            quote = '"'
-        else:
-            quote = '"""'
-        lines[0] = quote + lines[0]
-        lines[-1] = lines[-1] + quote
-
-        # Output lines, indenting content as required.
-        for line in lines:
-            if line:
-                self.output_line(indent + line)
-            else:
-                # Don't indent empty comment lines
-                self.output_line()
-
-        # Clear stored comment lines since we processed them
-        self.comment_lines = []
-
-    def queue_comment_line(self, line):
-        if self.trailing_empty_lines:
-            # If we had blank lines between comment lines, they are separate blocks
-            self.dump_comment_lines()
-        self.comment_lines.append(line)
-
-    def handle_empty_line(self, line):
-        """Handle an empty line.
-
-        Contiguous empty lines between a comment and something documentable do not
-        disassociate the comment from the documentable thing.
-        We have someplace else to store these lines in case there isn't something
-        documentable coming up."""
-        if self.comment_lines and self.allow_blank_lines:
-            self.trailing_empty_lines.append(line)
-        else:
-            self.output_normal_line(line)
-
-    def is_next_line_doc_comment(self):
-        next_line = self.next_line_rstripped
-        if next_line is None:
-            return False
-
-        return next_line.strip().startswith('"')
-
-    def process_line(self, line_num, line):
-        line = line.rstrip()
-        comment_match = COMMENT_RE.match(line)
-        def_match = CONVERTIBLE_DEF_RE.match(line)
-
-        # First check if this is a comment line.
-        if comment_match:
-            if self.done_with_initial_comment:
-                self.queue_comment_line(line)
-            else:
-                self.output_line(line)
-        else:
-            # If not a comment line, then by definition we're done with the comment header.
-            self.done_with_initial_comment = True
-            if not line.strip():
-                self.handle_empty_line(line)
-            elif def_match and not self.is_next_line_doc_comment():
-                # We got something we can make a docstring for:
-                # print the thing the docstring is for first,
-                # then the converted comment.
-
-                indent = def_match.group('indentation')
-                self.output_line(line)
-                self.dump_converted_comment_lines(indent)
-            else:
-                # Can't make a docstring for this line:
-                self.output_normal_line(line)
-
-    def process(self, fn, write=False):
-        self.process_file(fn)
-
-        if write:
-            with open(fn, 'w', encoding='utf-8') as fp:
-                for line in self.output_lines:
-                    fp.write(line)
-                    fp.write('\n')
-
-        # Reset state
-        self.__init__(self.single_line_quotes, self.allow_blank_lines)
-
-
-def main():
-    import argparse
-
-    parser = argparse.ArgumentParser()
-    parser.add_argument('filenames', metavar='filename',
-                        type=str, nargs='+',
-                        help='A Python file to transform.')
-    parser.add_argument('-b', '--blanklines', action='store_true',
-                        help='Allow blank lines between a comment and a define and still convert that comment.')
-
-    args = parser.parse_args()
-
-    converter = CommentConverter(allow_blank_lines=args.blanklines)
-    for fn in args.filenames:
-        print("Processing", fn)
-        converter.process(fn, write=True)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/codegen/vulkan/scripts/compImages.sh b/codegen/vulkan/scripts/compImages.sh
deleted file mode 100755
index d9f3670..0000000
--- a/codegen/vulkan/scripts/compImages.sh
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/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/codegen/vulkan/scripts/conventions.py b/codegen/vulkan/scripts/conventions.py
deleted file mode 100644
index edf9059..0000000
--- a/codegen/vulkan/scripts/conventions.py
+++ /dev/null
@@ -1,358 +0,0 @@
-#!/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/codegen/vulkan/scripts/deperiodize_vuids.py b/codegen/vulkan/scripts/deperiodize_vuids.py
deleted file mode 100755
index c02a158..0000000
--- a/codegen/vulkan/scripts/deperiodize_vuids.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/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/codegen/vulkan/scripts/docgenerator.py b/codegen/vulkan/scripts/docgenerator.py
deleted file mode 100644
index bb86eb5..0000000
--- a/codegen/vulkan/scripts/docgenerator.py
+++ /dev/null
@@ -1,482 +0,0 @@
-#!/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/codegen/vulkan/scripts/extensionmetadocgenerator.py b/codegen/vulkan/scripts/extensionmetadocgenerator.py
deleted file mode 100644
index 07d2c94..0000000
--- a/codegen/vulkan/scripts/extensionmetadocgenerator.py
+++ /dev/null
@@ -1,665 +0,0 @@
-#!/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/codegen/vulkan/scripts/genRef.py b/codegen/vulkan/scripts/genRef.py
deleted file mode 100755
index f108204..0000000
--- a/codegen/vulkan/scripts/genRef.py
+++ /dev/null
@@ -1,1087 +0,0 @@
-#!/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/codegen/vulkan/scripts/genRelease b/codegen/vulkan/scripts/genRelease
deleted file mode 100755
index f3c4a2a..0000000
--- a/codegen/vulkan/scripts/genRelease
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/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/codegen/vulkan/scripts/genanchorlinks.py b/codegen/vulkan/scripts/genanchorlinks.py
deleted file mode 100644
index c589bb3..0000000
--- a/codegen/vulkan/scripts/genanchorlinks.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/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/codegen/vulkan/scripts/generator.py b/codegen/vulkan/scripts/generator.py
deleted file mode 100644
index cb5f0f5..0000000
--- a/codegen/vulkan/scripts/generator.py
+++ /dev/null
@@ -1,1204 +0,0 @@
-#!/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.featureType = 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')
-        self.featureType = interface.get('type')
-        # 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.featureType = 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/codegen/vulkan/scripts/genspec.py b/codegen/vulkan/scripts/genspec.py
deleted file mode 100644
index dfa55cc..0000000
--- a/codegen/vulkan/scripts/genspec.py
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/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/codegen/vulkan/scripts/genvk.py b/codegen/vulkan/scripts/genvk.py
deleted file mode 100755
index 02cd1a5..0000000
--- a/codegen/vulkan/scripts/genvk.py
+++ /dev/null
@@ -1,854 +0,0 @@
-#!/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)
-        ]
-
-    gfxstreamPrefixStrings = [
-        '// Copyright (C) 2022 The Android Open Source Project',
-        '// Copyright (C) 2022 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.',
-        '//',
-        '// Autogenerated header vulkan_gfxstream.h',
-        '// Please do not modify directly;',
-        '// re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,',
-        '// or directly from Python by calling the genvk.py script with correct parameters.',
-        '',
-        '#pragma once',
-        '#ifdef VK_GFXSTREAM_STRUCTURE_TYPE_EXT',
-        '#include "vulkan_gfxstream_structure_type.h"',
-        '#endif',
-    ]
-    # gfxstream specific header
-    genOpts['vulkan_gfxstream.h'] = [
-          COutputGenerator,
-          CGeneratorOptions(
-            conventions       = conventions,
-            filename          = 'vulkan_gfxstream.h',
-            directory         = directory,
-            genpath           = None,
-            apiname           = 'vulkan',
-            profile           = None,
-            versions          = featuresPat,
-            emitversions      = None,
-            defaultExtensions = None,
-            addExtensions     = makeREstring(['VK_GOOGLE_gfxstream'], None),
-            removeExtensions  = None,
-            emitExtensions    = makeREstring(['VK_GOOGLE_gfxstream'], None),
-            prefixText        = gfxstreamPrefixStrings,
-            genFuncPointers   = True,
-            # Use #pragma once in the prefixText instead, so that we can put the copyright comments
-            # at the beginning of the file.
-            protectFile       = False,
-            protectFeature    = False,
-            protectProto      = '#ifndef',
-            protectProtoStr   = 'VK_NO_PROTOTYPES',
-            apicall           = 'VKAPI_ATTR ',
-            apientry          = 'VKAPI_CALL ',
-            apientryp         = 'VKAPI_PTR *',
-            alignFuncParam    = 48,
-            misracstyle       = misracstyle,
-            misracppstyle     = misracppstyle)
-        ]
-
-    androidNativeBufferPrefixStrings = [
-        '// Copyright (C) 2022 The Android Open Source Project',
-        '// Copyright (C) 2022 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.',
-        '//',
-        '// Autogenerated header vk_android_native_buffer.h',
-        '// Please do not modify directly;',
-        '// re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,',
-        '// or directly from Python by calling the genvk.py script with correct parameters.',
-        '',
-        '#pragma once',
-        '#ifndef VK_ANDROID_native_buffer',
-        '#include "vk_android_native_buffer_structure_type.h"',
-        '#endif /* VK_ANDROID_native_buffer */',
-    ]
-    #  header
-    genOpts['vk_android_native_buffer.h'] = [
-          COutputGenerator,
-          CGeneratorOptions(
-            conventions       = conventions,
-            filename          = 'vk_android_native_buffer.h',
-            directory         = directory,
-            genpath           = None,
-            apiname           = 'vulkan',
-            profile           = None,
-            versions          = featuresPat,
-            emitversions      = None,
-            defaultExtensions = None,
-            addExtensions     = makeREstring(['VK_ANDROID_native_buffer'], None),
-            removeExtensions  = None,
-            emitExtensions    = makeREstring(['VK_ANDROID_native_buffer'], None),
-            prefixText        = androidNativeBufferPrefixStrings,
-            genFuncPointers   = True,
-            # Use #pragma once in the prefixText instead, so that we can put the copyright comments
-            # at the beginning of the file.
-            protectFile       = False,
-            protectFeature    = True,
-            protectProto      = '#ifndef',
-            protectProtoStr   = 'VK_NO_PROTOTYPES',
-            apicall           = 'VKAPI_ATTR ',
-            apientry          = 'VKAPI_CALL ',
-            apientryp         = 'VKAPI_PTR *',
-            alignFuncParam    = 48,
-            misracstyle       = misracstyle,
-            misracppstyle     = misracppstyle)
-        ]
-
-    # 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/codegen/vulkan/scripts/globalizeIncludes b/codegen/vulkan/scripts/globalizeIncludes
deleted file mode 100755
index 3fad777..0000000
--- a/codegen/vulkan/scripts/globalizeIncludes
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/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/codegen/vulkan/scripts/hostsyncgenerator.py b/codegen/vulkan/scripts/hostsyncgenerator.py
deleted file mode 100644
index a94db14..0000000
--- a/codegen/vulkan/scripts/hostsyncgenerator.py
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/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/codegen/vulkan/scripts/htmldiff/htmldiff b/codegen/vulkan/scripts/htmldiff/htmldiff
deleted file mode 100755
index a3361c7..0000000
--- a/codegen/vulkan/scripts/htmldiff/htmldiff
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/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/codegen/vulkan/scripts/htmldiff/htmldiff.pl b/codegen/vulkan/scripts/htmldiff/htmldiff.pl
deleted file mode 100755
index af2a6cd..0000000
--- a/codegen/vulkan/scripts/htmldiff/htmldiff.pl
+++ /dev/null
@@ -1,581 +0,0 @@
-#!/usr/bin/perl
-#
-# htmldiff - present a diff marked version of two html documents
-#
-# Copyright (c) 1998-2006 MACS, Inc.
-#
-# Copyright (c) 2007 SiSco, Inc.
-#
-# SPDX-License-Identifier: MIT
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# See http://www.themacs.com for more information.
-#
-# usage: htmldiff [[-c] [-l] [-o] oldversion newversion [output]]
-#
-# -c - disable metahtml comment processing
-# -o - disable outputting of old text
-# -l - use navindex to create sequence of diffs
-# oldversion - the previous version of the document
-# newversion - the newer version of the document
-# output - a filename to place the output in. If omitted, the output goes to
-#          standard output.
-#
-# if invoked with no options or arguments, operates as a CGI script. It then
-# takes the following parameters:
-#
-# oldfile - the URL of the original file
-# newfile - the URL of the new file
-# mhtml - a flag to indicate whether it should be aware of MetaHTML comments.
-#
-# requires GNU diff utility
-# also requires the perl modules Getopt::Std
-#
-# NOTE: The markup created by htmldiff may not validate against the HTML 4.0
-# DTD. This is because the algorithm is realtively simple, and there are
-# places in the markup content model where the span element is not allowed.
-# Htmldiff is NOT aware of these places.
-#
-# $Source: /u/sources/public/2009/htmldiff/htmldiff.pl,v $
-# $Revision: 1.3 $
-#
-# $Log: htmldiff.pl,v $
-# Revision 1.3  2016/10/24 15:06:51  dom
-# Summary: Use nav script always
-#
-# Revision 1.2  2016/10/24 15:04:28  dom
-# Add navigation script
-#
-# Revision 1.1  2014-01-06 08:04:51  dom
-# added copy of htmldiff perl script since aptest.com repo no longer available
-#
-# Revision 1.5  2008/03/05 13:23:16  ahby
-# Fixed a problem with leading whitespace before markup.
-#
-# Revision 1.4  2007/12/13 13:09:16  ahby
-# Updated copyright and license.
-#
-# Revision 1.3  2007/12/13 12:53:34  ahby
-# Changed use of span to ins and del
-#
-# Revision 1.2  2002/02/13 16:27:23  ahby
-# Changed processing model.
-# Improved handling of old text and changed styles.
-#
-# Revision 1.1  2000/07/12 12:20:04  ahby
-# Updated to remove empty spans - this fixes validation problems under
-# strict.
-#
-# Revision 1.11  1999/12/08 19:46:45  ahby
-# Fixed validation errors introduced by placing markup where it didn't
-# belong.
-#
-# Revision 1.10  1999/10/18 13:42:58  ahby
-# Added -o to the usage message.
-#
-# Revision 1.9  1999/05/04 12:29:11  ahby
-# Added an option to turn off the display of old text.
-#
-# Revision 1.8  1999/04/09 14:37:27  ahby
-# Fixed a perl syntax error.
-#
-# Revision 1.7  1999/04/09 14:35:49  ahby
-# Added reference to MACS homepage.
-#
-# Revision 1.6  1999/04/09 14:35:09  ahby
-# Added comment about validity of generated markup.
-#
-# Revision 1.5  1999/02/22 22:17:54  ahby
-# Changed to use stylesheets.
-# Changed to rely upon span.
-# Changed to work around content model problems.
-#
-# Revision 1.4  1999/02/08 02:32:22  ahby
-# Added a copyright statement.
-#
-# Revision 1.3  1999/02/08 02:30:40  ahby
-# Added header processing.
-#
-# Revision 1.2  1998/12/10 17:31:31  ahby
-# Fixed to escape less-thans in change blocks and to not permit change
-# markup within specific elements (like TITLE).
-#
-# Revision 1.1  1998/11/26 00:09:22  ahby
-# Initial revision
-#
-#
-
-use Getopt::Std;
-
-sub usage {
-	print STDERR "htmldiff [-c] [-o] oldversion newversion [output]\n";
-	exit;
-}
-
-sub url_encode {
-    my $str = shift;
-    $str =~ s/([\x00-\x1f\x7F-\xFF])/
-                 sprintf ('%%%02x', ord ($1))/eg;
-    return $str;
-}
-
-# markit - diff-mark the streams
-#
-# markit(file1, file2)
-#
-# markit relies upon GNUdiff to mark up the text.
-#
-# The markup is encoded using special control sequences:
-#
-#   a block wrapped in control-a is deleted text
-#   a block wrapped in control-b is old text
-#   a block wrapped in control-c is new text
-#
-# The main processing loop attempts to wrap the text blocks in appropriate
-# SPANs based upon the type of text that it is.
-#
-# When the loop encounters a < in the text, it stops the span. Then it outputs
-# the element that is defined, then it restarts the span.
-
-sub markit {
-	my $retval = "";
-	my($file1) = shift;
-	my($file2) = shift;
-#	my $old="<span class=\\\"diff-old-a\\\">deleted text: </span>%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'";
-	my $old="%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'";
-	my $new="%c'\012'%c'\003'%c'\012'%>%c'\012'%c'\003'%c'\012'";
-	my $unchanged="%=";
-	my $changed="%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'%c'\004'%c'\012'%>%c'\012'%c'\004'%c'\012'";
-	if ($opt_o) {
-		$old = "";
-		$changed = "%c'\012'%c'\004'%c'\012'%>%c'\012'%c'\004'%c'\012'";
-	}
-#	my $old="%c'\002'<font color=\\\"purple\\\" size=\\\"-2\\\">deleted text:</font><s>%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'</s>%c'\012'%c'\002'";
-#	my $new="%c'\002'<font color=\\\"purple\\\"><u>%c'\012'%c'\002'%>%c'\002'</u></font>%c'\002'%c'\012'";
-#	my $unchanged="%=";
-#	my $changed="%c'\002'<s>%c'\012'%c'\001'%c'\012'%<%c'\012'%c'\001'%c'\012'</s><font color=\\\"purple\\\"><u>%c'\002'%c'\012'%>%c'\012'%c'\002'</u></font>%c'\002'%c'\012'";
-
-	my @span;
-	$span[0]="</span>";
-	$span[1]="<del class=\"diff-old\">";
-	$span[2]="<del class=\"diff-old\">";
-	$span[3]="<ins class=\"diff-new\">";
-	$span[4]="<ins class=\"diff-chg\">";
-
-	my @diffEnd ;
-	$diffEnd[1] = '</del>';
-	$diffEnd[2] = '</del>';
-	$diffEnd[3] = '</ins>';
-	$diffEnd[4] = '</ins>';
-
-	my $diffcounter = 0;
-
-	open(FILE, qq(diff -d --old-group-format="$old" --new-group-format="$new" --changed-group-format="$changed" --unchanged-group-format="$unchanged" $file1 $file2 |)) || die("Diff failed: $!");
-#	system (qq(diff --old-group-format="$old" --new-group-format="$new" --changed-group-format="$changed" --unchanged-group-format="$unchanged" $file1 $file2 > /tmp/output));
-
-	my $state = 0;
-	my $inblock = 0;
-	my $temp = "";
-	my $lineCount = 0;
-
-# strategy:
-#
-# process the output of diff...
-#
-# a link with control A-D means the start/end of the corresponding ordinal
-# state (1-4). Resting state is state 0.
-#
-# While in a state, accumulate the contents for that state. When exiting the
-# state, determine if it is appropriate to emit the contents with markup or
-# not (basically, if the accumulated buffer contains only empty lines or lines
-# with markup, then we don't want to emit the wrappers.  We don't need them.
-#
-# Note that if there is markup in the "old" block, that markup is silently
-# removed.  It isn't really that interesting, and it messes up the output
-# something fierce.
-
-	while (<FILE>) {
-		my $nextCounter = $diffcounter + 1;
-		my $anchor = $opt_l ? qq[<a tabindex="$diffcounter" id="diff-$diffcounter" href="#diff-$nextCounter">] : "" ;
-		my $anchorEnd = $opt_l ? q[</a>] : "" ;
-		$lineCount ++;
-		if ($state == 0) {	# if we are resting and we find a marker,
-							# then we must be entering a block
-			if (m/^([\001-\004])/) {
-				$state = ord($1);
-				$_ = "";
-			}
-#			if (m/^\001/) {
-#				$state = 1;
-#				s/^/$span[1]/;
-#			} elsif (m/^\002/) {
-#				$state = 2;
-#				s/^/$span[2]/;
-#			} elsif (m/^\003/) {
-#				$state = 3;
-#				s/^/$span[3]/;
-#			} elsif (m/^\004/) {
-#				$state = 4;
-#				s/^/$span[4]/;
-#			}
-		} else {
-			# if we are in "old" state, remove markup
-			if (($state == 1) || ($state == 2)) {
-				s/\<.*\>//;	# get rid of any old markup
-				s/\</&lt;/g; # escape any remaining STAG or ETAGs
-				s/\>/&gt;/g;
-			}
-			# if we found another marker, we must be exiting the state
-			if (m/^([\001-\004])/) {
-				if ($temp ne "") {
-					$_ = $span[$state] . $anchor . $temp . $anchorEnd . $diffEnd[$state] . "\n";
-					$temp = "";
-					$diffcounter++;
-				} else {
-					$_ = "" ;
-				}
-				$state = 0;
-			} elsif (m/^\s*\</) { # otherwise, is this line markup?
-				# if it is markup AND we haven't seen anything else yet,
-				# then we will emit the markup
-				if ($temp eq "") {
-					$retval .= $_;
-					$_ = "";
-				} else {	# we wrap it with the state switches and hold it
-					s/^/$anchorEnd$diffEnd[$state]/;
-					s/$/$span[$state]$anchor/;
-					$temp .= $_;
-					$_ = "";
-					$diffcounter++;
-				}
-			} else {
-				if (m/.+/) {
-					$temp .= $_;
-					$_ = "";
-				}
-			}
-		}
-
-		s/\001//g;
-		s/\002//g;
-		s/\003//g;
-		s/\004//g;
-		if ($_ !~ m/^$/) {
-			$retval .= $_;
-		}
-	}
-	close FILE;
-	$retval =~ s/$span[1]\n+$diffEnd[1]//g;
-	$retval =~ s/$span[2]\n+$diffEnd[2]//g;
-	$retval =~ s/$span[3]\n+$diffEnd[3]//g;
-	$retval =~ s/$span[4]\n+$diffEnd[4]//g;
-	$retval =~ s/$span[1]\n*$//g;
-	$retval =~ s/$span[2]\n*$//g;
-	$retval =~ s/$span[3]\n*$//g;
-	$retval =~ s/$span[4]\n*$//g;
-	return $retval;
-}
-
-sub splitit {
-	my $filename = shift;
-	my $headertmp = shift;
-	my $inheader=0;
-	my $preformatted=0;
-	my $inelement=0;
-	my $retval = "";
-	my $styles = q(<style type='text/css'>
-.diff-old-a {
-  font-size: smaller;
-  color: red;
-}
-.diff-new a { text-decoration: none; }
-.diff-new { background-color: yellow; }
-.diff-chg { background-color: lime; }
-.diff-chg a { text-decoration: none; }
-.diff-new:before,
-.diff-new:after
-    { content: "\2191" }
-.diff-chg:before, .diff-chg:after
-    { content: "\2195" }
-.diff-old { text-decoration: line-through; background-color: #FBB; }
-.diff-old:before,
-.diff-old:after
-    { content: "\2193" }
-.diff-old a { text-decoration: none; }
-:focus { border: thin red solid}
-</style>
-<script src="https://www.w3.org/2016/10/htmldiff-nav.js"></script>);
-	if ($opt_t) {
-		$styles .= q(
-<script type="text/javascript">
-<!--
-function setOldDisplay() {
-	for ( var s = 0; s < document.styleSheets.length; s++ ) {
-		var css = document.styleSheets[s];
-		var mydata ;
-		try { mydata = css.cssRules ;
-		if ( ! mydata ) mydata = css.rules;
-		for ( var r = 0; r < mydata.length; r++ ) {
-			if ( mydata[r].selectorText == '.diff-old' ) {
-				mydata[r].style.display = ( mydata[r].style.display == '' ) ? 'none'
-: '';
-				return;
-			}
-		}
-		} catch(e) {} ;
-	}
-}
--->
-</script>
-);
-
-	}
-
-	if ($stripheader) {
-		open(HEADER, ">$headertmp");
-	}
-
-	my $incomment = 0;
-	my $inhead = 1;
-	open(FILE, $filename) || die("File $filename cannot be opened: $!");
-	while (<FILE>) {
-		if ($inhead == 1) {
-			if (m/\<\/head/i) {
-				print HEADER $styles;
-			}
-			if (m/\<body/i) {
-				$inhead = 0;
-				print HEADER;
-				if ($opt_t) {
-					print HEADER q(
-<form action=""><input type="button" onclick="setOldDisplay()" value="Show/Hide Old Content" /></form>
-);
-				}
-				if ($opt_l) {
-					print HEADER q(
-						<p><em>NOTE: Click highlighted diff text to jump to the following difference.</em></p>
-					);
-				}
-				close HEADER;
-			} else {
-				print HEADER;
-			}
-		} else {
-			if ($incomment) {
-				if (m;-->;) {
-					$incomment = 0;
-					s/.*-->//;
-				} else {
-					next;
-				}
-			}
-			if (m;<!--;) {
-				while (m;<!--.*-->;) {
-					s/<!--.*?-->//;
-				}
-				if (m;<!--; ) {
-					$incomment = 1;
-					s/<!--.*//;
-				}
-			}
-			if (m/\<pre/i) {
-				$preformatted = 1;
-			}
-			if (m/\<\/pre\>/i) {
-				$preformatted = 0;
-			}
-			if ($preformatted) {
-				$retval .= $_;
-			} elsif ($mhtmlcomments && /^;;;/) {
-				$retval .= $_;
-			} else {
-				my @list = split(' ');
-				foreach $element (@list) {
-					if ($element =~ m/\<H[1-6]/i) {
-#						$inheader = 1;
-					}
-					if ($inheader == 0) {
-						$element =~ s/</\n</g;
-						$element =~ s/^\n//;
-						$element =~ s/>/>\n/g;
-						$element =~ s/\n$//;
-						$element =~ s/>\n([.,:!]+)/>$1/g;
-					}
-					if ($element =~ m/\<\/H[1-6]\>/i) {
-						$inheader = 0;
-					}
-					$retval .= "$element";
-					$inelement += ($element =~ s/</&lt;/g);
-					$inelement -= ($element =~ s/>/&gt;/g);
-					if ($inelement < 0) {
-						$inelement = 0;
-					}
-					if (($inelement == 0) && ($inheader == 0)) {
-						$retval .= "\n";
-					} else {
-						$retval .= " ";
-					}
-				}
-			undef @list;
-			}
-		}
-	}
-	$retval .= "\n";
-	close FILE;
-	return $retval;
-}
-
-$mhtmlcomments = 1;
-
-sub cli {
-	getopts("clto") || usage();
-
-	if ($opt_c) {$mhtmlcomments = 0;}
-
-	if (@ARGV < 2) { usage(); }
-
-	$file1 = $ARGV[0];
-	$file2 = $ARGV[1];
-	$file3 = $ARGV[2];
-
-	$tmp = splitit($file1, $headertmp1);
-	open (FILE, ">$tmp1");
-	print FILE $tmp;
-	close FILE;
-
-	$tmp = splitit($file2, $headertmp2);
-	open (FILE, ">$tmp2");
-	print FILE $tmp;
-	close FILE;
-
-	$output = "";
-
-	if ($stripheader) {
-		open(FILE, $headertmp2);
-		while (<FILE>) {
-			$output .= $_;
-		}
-		close(FILE);
-	}
-
-	$output .= markit($tmp1, $tmp2);
-
-	if ($file3) {
-		open(FILE, ">$file3");
-		print FILE $output;
-		close FILE;
-	} else {
-		print $output;
-	}
-}
-
-sub cgi {
-#	use LWP::UserAgent;
-#	use CGI;
-
-	my $query = new CGI;
-	my $url1 = $query->param("oldfile");
-	my $url2 = $query->param("newfile");
-	my $mhtml = $query->param("mhtml");
-
-	my $file1 = "/tmp/htdcgi1.$$";
-	my $file2 = "/tmp/htdcgi2.$$";
-
-	my $ua = new LWP::UserAgent;
-	$ua->agent("MACS, Inc. HTMLdiff/0.9 " . $ua->agent);
-
-	# Create a request
-
-	my $req1 = new HTTP::Request GET => $url1;
-
-	my $res1 = $ua->request($req1, $file1);
-	if ($res1->is_error) {
-		print $res1->error_as_HTML();
-		print "<p>The URL $url1 could not be found.  Please check it and try again.</p>";
-		return;
-	}
-
-	my $req2 = new HTTP::Request GET => $url2;
-
-	my $res2 = $ua->request($req2, $file2);
-	if ($res2->is_error) {
-		print $res2->error_as_HTML();
-		print "<p>The URL $url2 could not be found.  Please check it and try again.</p>";
-		return;
-	}
-
-	$split1 = splitit($file1, $headertmp1);
-	open (FILE, ">$tmp1");
-	print FILE $split1;
-	close FILE;
-
-	$split2 = splitit($file2, $headertmp2);
-	open (FILE, ">$tmp2");
-	print FILE $split2;
-	close FILE;
-
-	$output = "";
-
-	if ($stripheader) {
-		open(FILE, $headertmp2);
-		while (<FILE>) {
-			$output .= $_;
-		}
-		close(FILE);
-	}
-
-	$output .= markit($tmp1, $tmp2);
-
-	my $base=$res2->base;
-
-	if ($base !~ /\/$/) {
-		$base =~ s/[^\/]*$//;
-	}
-
-	if ( $output !~ /<base/i ) {
-		$output =~ s/<head>/<head>\n<base href="$base">/i ||
-	  	$output =~ s/<html>/<html>\n<base href="$base">/i ;
-	}
-
-	print $query->header(-type=>'text/html',-nph=>1);
-	print $output;
-
-	unlink $file1;
-	unlink $file2;
-
-}
-
-$tmp1="/tmp/htdtmp1.$$";
-$headertmp1="/tmp/htdhtmp1.$$";
-$tmp2="/tmp/htdtmp2.$$";
-$headertmp2="/tmp/htdhtmp2.$$";
-$stripheader = 1;
-
-if (@ARGV == 0) {
-	cgi();		# if no arguments, we must be operating as a cgi script
-} else {
-	cli();		# if there are arguments, then we are operating as a CLI
-}
-
-unlink $tmp1;
-unlink $headertmp1;
-unlink $tmp2;
-unlink $headertmp2;
diff --git a/codegen/vulkan/scripts/indexExt.py b/codegen/vulkan/scripts/indexExt.py
deleted file mode 100755
index 4eeb4f3..0000000
--- a/codegen/vulkan/scripts/indexExt.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/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/codegen/vulkan/scripts/interfacedocgenerator.py b/codegen/vulkan/scripts/interfacedocgenerator.py
deleted file mode 100644
index 05fafbc..0000000
--- a/codegen/vulkan/scripts/interfacedocgenerator.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/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/codegen/vulkan/scripts/linkcheck.py b/codegen/vulkan/scripts/linkcheck.py
deleted file mode 100755
index 252112b..0000000
--- a/codegen/vulkan/scripts/linkcheck.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/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/codegen/vulkan/scripts/make_ext_dependency.py b/codegen/vulkan/scripts/make_ext_dependency.py
deleted file mode 100755
index 5157128..0000000
--- a/codegen/vulkan/scripts/make_ext_dependency.py
+++ /dev/null
@@ -1,243 +0,0 @@
-#!/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/codegen/vulkan/scripts/makemanaliases.py b/codegen/vulkan/scripts/makemanaliases.py
deleted file mode 100755
index df44a8a..0000000
--- a/codegen/vulkan/scripts/makemanaliases.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/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/codegen/vulkan/scripts/promote.py b/codegen/vulkan/scripts/promote.py
deleted file mode 100755
index c6b73ba..0000000
--- a/codegen/vulkan/scripts/promote.py
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/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/codegen/vulkan/scripts/pygenerator.py b/codegen/vulkan/scripts/pygenerator.py
deleted file mode 100644
index 798ac32..0000000
--- a/codegen/vulkan/scripts/pygenerator.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/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/codegen/vulkan/scripts/reflib.py b/codegen/vulkan/scripts/reflib.py
deleted file mode 100644
index bab7d30..0000000
--- a/codegen/vulkan/scripts/reflib.py
+++ /dev/null
@@ -1,666 +0,0 @@
-#!/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/codegen/vulkan/scripts/reflow.py b/codegen/vulkan/scripts/reflow.py
deleted file mode 100755
index 1897b05..0000000
--- a/codegen/vulkan/scripts/reflow.py
+++ /dev/null
@@ -1,912 +0,0 @@
-#!/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/codegen/vulkan/scripts/reg.py b/codegen/vulkan/scripts/reg.py
deleted file mode 100644
index 254cfbd..0000000
--- a/codegen/vulkan/scripts/reg.py
+++ /dev/null
@@ -1,1466 +0,0 @@
-#!/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/codegen/vulkan/scripts/rubygenerator.py b/codegen/vulkan/scripts/rubygenerator.py
deleted file mode 100644
index 8042d9b..0000000
--- a/codegen/vulkan/scripts/rubygenerator.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/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/codegen/vulkan/scripts/scriptgenerator.py b/codegen/vulkan/scripts/scriptgenerator.py
deleted file mode 100644
index 204639d..0000000
--- a/codegen/vulkan/scripts/scriptgenerator.py
+++ /dev/null
@@ -1,380 +0,0 @@
-#!/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/codegen/vulkan/scripts/spec_tools/__init__.py b/codegen/vulkan/scripts/spec_tools/__init__.py
deleted file mode 100644
index 34c01f3..0000000
--- a/codegen/vulkan/scripts/spec_tools/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2018-2019 Collabora, Ltd.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
diff --git a/codegen/vulkan/scripts/spec_tools/algo.py b/codegen/vulkan/scripts/spec_tools/algo.py
deleted file mode 100644
index 3b4c81f..0000000
--- a/codegen/vulkan/scripts/spec_tools/algo.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/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/codegen/vulkan/scripts/spec_tools/attributes.py b/codegen/vulkan/scripts/spec_tools/attributes.py
deleted file mode 100644
index ef77181..0000000
--- a/codegen/vulkan/scripts/spec_tools/attributes.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/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/codegen/vulkan/scripts/spec_tools/base_printer.py b/codegen/vulkan/scripts/spec_tools/base_printer.py
deleted file mode 100644
index f48905a..0000000
--- a/codegen/vulkan/scripts/spec_tools/base_printer.py
+++ /dev/null
@@ -1,213 +0,0 @@
-"""Provides the BasePrinter base class for MacroChecker/Message output techniques."""
-
-# Copyright (c) 2018-2019 Collabora, Ltd.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
-
-from abc import ABC, abstractmethod
-from pathlib import Path
-
-from .macro_checker import MacroChecker
-from .macro_checker_file import MacroCheckerFile
-from .shared import EntityData, Message, MessageContext, MessageType
-
-
-def getColumn(message_context):
-    """Return the (zero-based) column number of the message context.
-
-    If a group is specified: returns the column of the start of the group.
-    If no group, but a match is specified: returns the column of the start of
-    the match.
-    If no match: returns column 0 (whole line).
-    """
-    if not message_context.match:
-        # whole line
-        return 0
-    if message_context.group is not None:
-        return message_context.match.start(message_context.group)
-    return message_context.match.start()
-
-
-class BasePrinter(ABC):
-    """Base class for a way of outputting results of a checker execution."""
-
-    def __init__(self):
-        """Constructor."""
-        self._cwd = None
-
-    def close(self):
-        """Write the tail end of the output and close it, if applicable.
-
-        Override if you want to print a summary or are writing to a file.
-        """
-        pass
-
-    ###
-    # Output methods: these should all print/output directly.
-    def output(self, obj):
-        """Output any object.
-
-        Delegates to other output* methods, if type known,
-        otherwise uses self.outputFallback().
-        """
-        if isinstance(obj, Message):
-            self.outputMessage(obj)
-        elif isinstance(obj, MacroCheckerFile):
-            self.outputCheckerFile(obj)
-        elif isinstance(obj, MacroChecker):
-            self.outputChecker(obj)
-        else:
-            self.outputFallback(self.formatBrief(obj))
-
-    @abstractmethod
-    def outputResults(self, checker, broken_links=True,
-                      missing_includes=False):
-        """Output the full results of a checker run.
-
-        Must be implemented.
-
-        Typically will call self.output() on the MacroChecker,
-        as well as calling self.outputBrokenAndMissing()
-        """
-        raise NotImplementedError
-
-    @abstractmethod
-    def outputBrokenLinks(self, checker, broken):
-        """Output the collection of broken links.
-
-        `broken` is a dictionary of entity names: usage contexts.
-
-        Must be implemented.
-
-        Called by self.outputBrokenAndMissing() if requested.
-        """
-        raise NotImplementedError
-
-    @abstractmethod
-    def outputMissingIncludes(self, checker, missing):
-        """Output a table of missing includes.
-
-        `missing` is a iterable entity names.
-
-        Must be implemented.
-
-        Called by self.outputBrokenAndMissing() if requested.
-        """
-        raise NotImplementedError
-
-    def outputChecker(self, checker):
-        """Output the contents of a MacroChecker object.
-
-        Default implementation calls self.output() on every MacroCheckerFile.
-        """
-        for f in checker.files:
-            self.output(f)
-
-    def outputCheckerFile(self, fileChecker):
-        """Output the contents of a MacroCheckerFile object.
-
-        Default implementation calls self.output() on every Message.
-        """
-        for m in fileChecker.messages:
-            self.output(m)
-
-    def outputBrokenAndMissing(self, checker, broken_links=True,
-                               missing_includes=False):
-        """Outputs broken links and missing includes, if desired.
-
-        Delegates to self.outputBrokenLinks() (if broken_links==True)
-        and self.outputMissingIncludes() (if missing_includes==True).
-        """
-        if broken_links:
-            broken = checker.getBrokenLinks()
-            if broken:
-                self.outputBrokenLinks(checker, broken)
-        if missing_includes:
-            missing = checker.getMissingUnreferencedApiIncludes()
-            if missing:
-                self.outputMissingIncludes(checker, missing)
-
-    @abstractmethod
-    def outputMessage(self, msg):
-        """Output a Message.
-
-        Must be implemented.
-        """
-        raise NotImplementedError
-
-    @abstractmethod
-    def outputFallback(self, msg):
-        """Output some text in a general way.
-
-        Must be implemented.
-        """
-        raise NotImplementedError
-
-    ###
-    # Format methods: these should all return a string.
-    def formatContext(self, context, _message_type=None):
-        """Format a message context in a verbose way, if applicable.
-
-        May override, default implementation delegates to
-        self.formatContextBrief().
-        """
-        return self.formatContextBrief(context)
-
-    def formatContextBrief(self, context, _with_color=True):
-        """Format a message context in a brief way.
-
-        May override, default is relativeFilename:line:column
-        """
-        return '{}:{}:{}'.format(self.getRelativeFilename(context.filename),
-                                 context.lineNum, getColumn(context))
-
-    def formatMessageTypeBrief(self, message_type, _with_color=True):
-        """Format a message type in a brief way.
-
-        May override, default is message_type:
-        """
-        return '{}:'.format(message_type)
-
-    def formatEntityBrief(self, entity_data, _with_color=True):
-        """Format an entity in a brief way.
-
-        May override, default is macro:entity.
-        """
-        return '{}:{}'.format(entity_data.macro, entity_data.entity)
-
-    def formatBrief(self, obj, with_color=True):
-        """Format any object in a brief way.
-
-        Delegates to other format*Brief methods, if known,
-        otherwise uses str().
-        """
-        if isinstance(obj, MessageContext):
-            return self.formatContextBrief(obj, with_color)
-        if isinstance(obj, MessageType):
-            return self.formatMessageTypeBrief(obj, with_color)
-        if isinstance(obj, EntityData):
-            return self.formatEntityBrief(obj, with_color)
-        return str(obj)
-
-    @property
-    def cwd(self):
-        """Get the current working directory, fully resolved.
-
-        Lazy initialized.
-        """
-        if not self._cwd:
-            self._cwd = Path('.').resolve()
-        return self._cwd
-
-    ###
-    # Helper function
-    def getRelativeFilename(self, fn):
-        """Return the given filename relative to the current directory,
-        if possible.
-        """
-        try:
-            return str(Path(fn).relative_to(self.cwd))
-        except ValueError:
-            return str(Path(fn))
diff --git a/codegen/vulkan/scripts/spec_tools/consistency_tools.py b/codegen/vulkan/scripts/spec_tools/consistency_tools.py
deleted file mode 100644
index c256a72..0000000
--- a/codegen/vulkan/scripts/spec_tools/consistency_tools.py
+++ /dev/null
@@ -1,697 +0,0 @@
-#!/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/codegen/vulkan/scripts/spec_tools/console_printer.py b/codegen/vulkan/scripts/spec_tools/console_printer.py
deleted file mode 100644
index 18acabf..0000000
--- a/codegen/vulkan/scripts/spec_tools/console_printer.py
+++ /dev/null
@@ -1,274 +0,0 @@
-"""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/codegen/vulkan/scripts/spec_tools/data_structures.py b/codegen/vulkan/scripts/spec_tools/data_structures.py
deleted file mode 100644
index f2808cf..0000000
--- a/codegen/vulkan/scripts/spec_tools/data_structures.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2019 Collabora, Ltd.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
-"""Provides general-purpose data structures."""
-
-
-class DictOfStringSets:
-    """A dictionary where the values are sets of strings.
-
-    Has some convenience functions to allow easier maintenance via
-    the .add method."""
-
-    def __init__(self, d=None):
-        self.d = {}
-        if d:
-            for k, v in d.items():
-                self.add(k, v)
-
-    def __getitem__(self, k):
-        return self.d[k]
-
-    def __contains__(self, k):
-        return k in self.d
-
-    def get(self, k, default=None):
-        return self.d.get(k, default)
-
-    def get_dict(self):
-        return self.d
-
-    def items(self):
-        """Return an iterator like dict().items()."""
-        return self.d.items()
-
-    def keys(self):
-        """Return an iterator over keys."""
-        return self.d.keys()
-
-    def values(self):
-        """Return an iterator over values."""
-        return self.d.values()
-
-    def add_key(self, k):
-        """Ensure the set for the given key exists."""
-        if k not in self.d:
-            self.d[k] = set()
-
-    def add(self, k, v):
-        self.add_key(k)
-        if isinstance(v, str):
-            v = (v, )
-        if not isinstance(v, set):
-            v = set(v)
-        self.d[k].update(v)
diff --git a/codegen/vulkan/scripts/spec_tools/entity_db.py b/codegen/vulkan/scripts/spec_tools/entity_db.py
deleted file mode 100644
index 9a8dcfb..0000000
--- a/codegen/vulkan/scripts/spec_tools/entity_db.py
+++ /dev/null
@@ -1,659 +0,0 @@
-"""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/codegen/vulkan/scripts/spec_tools/file_process.py b/codegen/vulkan/scripts/spec_tools/file_process.py
deleted file mode 100644
index f0d4c60..0000000
--- a/codegen/vulkan/scripts/spec_tools/file_process.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/python3
-#
-# Copyright (c) 2018-2019 Collabora, Ltd.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
-"Utilities for processing files."
-
-from pathlib import Path
-
-
-class LinewiseFileProcessor:
-    """A base class for code that processes an input file (or file handle) one line at a time."""
-
-    def __init__(self):
-        self._lines = []
-        self._line_num = 0
-        self._next_line = None
-        self._line = ''
-        self._filename = Path()
-
-    @property
-    def filename(self):
-        """The Path object of the currently processed file"""
-        return self._filename
-
-    @property
-    def relative_filename(self):
-        """The current file's Path relative to the current working directory"""
-        return self.filename.relative_to(Path('.').resolve())
-
-    @property
-    def line(self):
-        """The current line, including any trailing whitespace and the line ending."""
-        return self._line
-
-    @property
-    def line_number(self):
-        """Get 1-indexed line number."""
-        return self._line_num
-
-    @property
-    def line_rstripped(self):
-        """The current line without any trailing whitespace."""
-        if self.line is None:
-            return None
-        return self.line.rstrip()
-
-    @property
-    def trailing_whitespace(self):
-        """The trailing whitespace of the current line that gets removed when accessing rstrippedLine"""
-        non_whitespace_length = len(self.line_rstripped)
-        return self.line[non_whitespace_length:]
-
-    @property
-    def next_line(self):
-        """Peek at the next line, if any."""
-        return self._next_line
-
-    @property
-    def next_line_rstripped(self):
-        """Peek at the next line, if any, without any trailing whitespace."""
-        if self.next_line is None:
-            return None
-        return self.next_line.rstrip()
-
-    def get_preceding_line(self, relative_index=-1):
-        """Retrieve the line at an line number at the given relative index, if one exists. Returns None if there is no line there."""
-        if relative_index >= 0:
-            raise RuntimeError(
-                'relativeIndex must be negative, to retrieve a preceding line.')
-        if relative_index + self.line_number <= 0:
-            # There is no line at this index
-            return None
-        return self._lines[self.line_number + relative_index - 1]
-
-    def get_preceding_lines(self, num):
-        """Get *up to* the preceding num lines. Fewer may be returned if the requested number aren't available."""
-        return self._lines[- (num + 1):-1]
-
-    def process_line(self, line_num, line):
-        """Implement in your subclass to handle each new line."""
-        raise NotImplementedError
-
-    def _process_file_handle(self, file_handle):
-        # These are so we can process one line earlier than we're actually iterating thru.
-        processing_line_num = None
-        processing_line = None
-
-        def do_process_line():
-            self._line_num = processing_line_num
-            self._line = processing_line
-            if processing_line is not None:
-                self._lines.append(processing_line)
-                self.process_line(processing_line_num, processing_line)
-
-        for line_num, line in enumerate(file_handle, 1):
-            self._next_line = line
-            do_process_line()
-            processing_line_num = line_num
-            processing_line = line
-
-        # Finally process the left-over line
-        self._next_line = None
-        do_process_line()
-
-    def process_file(self, filename, file_handle=None):
-        """Main entry point - call with a filename and optionally the file handle to read from."""
-        if isinstance(filename, str):
-            filename = Path(filename).resolve()
-
-        self._filename = filename
-
-        if file_handle:
-            self._process_file_handle(file_handle)
-        else:
-            with self._filename.open('r', encoding='utf-8') as f:
-                self._process_file_handle(f)
diff --git a/codegen/vulkan/scripts/spec_tools/html_printer.py b/codegen/vulkan/scripts/spec_tools/html_printer.py
deleted file mode 100644
index eb1df40..0000000
--- a/codegen/vulkan/scripts/spec_tools/html_printer.py
+++ /dev/null
@@ -1,436 +0,0 @@
-"""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/codegen/vulkan/scripts/spec_tools/macro_checker.py b/codegen/vulkan/scripts/spec_tools/macro_checker.py
deleted file mode 100644
index a8a75aa..0000000
--- a/codegen/vulkan/scripts/spec_tools/macro_checker.py
+++ /dev/null
@@ -1,220 +0,0 @@
-"""Provides the MacroChecker class."""
-
-# Copyright (c) 2018-2019 Collabora, Ltd.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
-
-from io import StringIO
-import re
-
-
-class MacroChecker(object):
-    """Perform and track checking of one or more files in an API spec.
-
-    This does not necessarily need to be subclassed per-API: it is sufficiently
-    parameterized in the constructor for expected usage.
-    """
-
-    def __init__(self, enabled_messages, entity_db,
-                 macro_checker_file_type, root_path):
-        """Construct an object that tracks checking one or more files in an API spec.
-
-        enabled_messages -- a set of MessageId that should be enabled.
-        entity_db -- an object of a EntityDatabase subclass for this API.
-        macro_checker_file_type -- Type to instantiate to create the right
-                                   MacroCheckerFile subclass for this API.
-        root_path -- A Path object for the root of this repository.
-        """
-        self.enabled_messages = enabled_messages
-        self.entity_db = entity_db
-        self.macro_checker_file_type = macro_checker_file_type
-        self.root_path = root_path
-
-        self.files = []
-
-        self.refpages = set()
-
-        # keys: entity names. values: MessageContext
-        self.links = {}
-        self.apiIncludes = {}
-        self.validityIncludes = {}
-        self.headings = {}
-
-        # Regexes that are members because they depend on the name prefix.
-
-        # apiPrefix, followed by some word characters or * as many times as desired,
-        # NOT followed by >> and NOT preceded by one of the characters in that first character class.
-        # (which distinguish "names being used somewhere other than prose").
-        self.suspected_missing_macro_re = re.compile(
-            r'\b(?<![-=:/[\.`+,])(?P<entity_name>{}[\w*]+)\b(?!>>)'.format(
-                self.entity_db.case_insensitive_name_prefix_pattern)
-        )
-        self.heading_command_re = re.compile(
-            r'=+ (?P<command>{}[\w]+)'.format(self.entity_db.name_prefix)
-        )
-
-        macros_pattern = '|'.join((re.escape(macro)
-                                   for macro in self.entity_db.macros))
-        # the "formatting" group is to strip matching */**/_/__
-        # surrounding an entire macro.
-        self.macro_re = re.compile(
-            r'(?P<formatting>\**|_*)(?P<macro>{}):(?P<entity_name>[\w*]+((?P<subscript>[\[][^\]]*[\]]))?)(?P=formatting)'.format(macros_pattern))
-
-    def haveLinkTarget(self, entity):
-        """Report if we have parsed an API include (or heading) for an entity.
-
-        None if there is no entity with that name.
-        """
-        if not self.findEntity(entity):
-            return None
-        if entity in self.apiIncludes:
-            return True
-        return entity in self.headings
-
-    def hasFixes(self):
-        """Report if any files have auto-fixes."""
-        for f in self.files:
-            if f.hasFixes():
-                return True
-        return False
-
-    def addLinkToEntity(self, entity, context):
-        """Record seeing a link to an entity's docs from a context."""
-        if entity not in self.links:
-            self.links[entity] = []
-        self.links[entity].append(context)
-
-    def seenRefPage(self, entity):
-        """Check if a ref-page markup block has been seen for an entity."""
-        return entity in self.refpages
-
-    def addRefPage(self, entity):
-        """Record seeing a ref-page markup block for an entity."""
-        self.refpages.add(entity)
-
-    def findMacroAndEntity(self, macro, entity):
-        """Look up EntityData by macro and entity pair.
-
-        Forwards to the EntityDatabase.
-        """
-        return self.entity_db.findMacroAndEntity(macro, entity)
-
-    def findEntity(self, entity):
-        """Look up EntityData by entity name (case-sensitive).
-
-        Forwards to the EntityDatabase.
-        """
-        return self.entity_db.findEntity(entity)
-
-    def findEntityCaseInsensitive(self, entity):
-        """Look up EntityData by entity name (case-insensitive).
-
-        Forwards to the EntityDatabase.
-        """
-        return self.entity_db.findEntityCaseInsensitive(entity)
-
-    def getMemberNames(self, commandOrStruct):
-        """Given a command or struct name, retrieve the names of each member/param.
-
-        Returns an empty list if the entity is not found or doesn't have members/params.
-
-        Forwards to the EntityDatabase.
-        """
-        return self.entity_db.getMemberNames(commandOrStruct)
-
-    def likelyRecognizedEntity(self, entity_name):
-        """Guess (based on name prefix alone) if an entity is likely to be recognized.
-
-        Forwards to the EntityDatabase.
-        """
-        return self.entity_db.likelyRecognizedEntity(entity_name)
-
-    def isLinkedMacro(self, macro):
-        """Identify if a macro is considered a "linked" macro.
-
-        Forwards to the EntityDatabase.
-        """
-        return self.entity_db.isLinkedMacro(macro)
-
-    def processFile(self, filename):
-        """Parse an .adoc file belonging to the spec and check it for errors."""
-        class FileStreamMaker(object):
-            def __init__(self, filename):
-                self.filename = filename
-
-            def make_stream(self):
-                return open(self.filename, 'r', encoding='utf-8')
-
-        f = self.macro_checker_file_type(self, filename, self.enabled_messages,
-                                         FileStreamMaker(filename))
-        f.process()
-        self.files.append(f)
-
-    def processString(self, s):
-        """Process a string as if it were a spec file.
-
-        Used for testing purposes.
-        """
-        if "\n" in s.rstrip():
-            # remove leading spaces from each line to allow easier
-            # block-quoting in tests
-            s = "\n".join((line.lstrip() for line in s.split("\n")))
-            # fabricate a "filename" that will display better.
-            filename = "string{}\n****START OF STRING****\n{}\n****END OF STRING****\n".format(
-                len(self.files), s.rstrip())
-
-        else:
-            filename = "string{}: {}".format(
-                len(self.files), s.rstrip())
-
-        class StringStreamMaker(object):
-            def __init__(self, string):
-                self.string = string
-
-            def make_stream(self):
-                return StringIO(self.string)
-
-        f = self.macro_checker_file_type(self, filename, self.enabled_messages,
-                                         StringStreamMaker(s))
-        f.process()
-        self.files.append(f)
-        return f
-
-    def numDiagnostics(self):
-        """Return the total number of diagnostics (warnings and errors) over all the files processed."""
-        return sum((f.numDiagnostics() for f in self.files))
-
-    def numErrors(self):
-        """Return the total number of errors over all the files processed."""
-        return sum((f.numErrors() for f in self.files))
-
-    def getMissingUnreferencedApiIncludes(self):
-        """Return the unreferenced entity names that we expected to see an API include or link target for, but did not.
-
-        Counterpart to getBrokenLinks(): This method returns the entity names
-        that were not used in a linking macro (and thus wouldn't create a broken link),
-        but were nevertheless expected and not seen.
-        """
-        return (entity for entity in self.entity_db.generating_entities
-                if (not self.haveLinkTarget(entity)) and entity not in self.links)
-
-    def getBrokenLinks(self):
-        """Return the entity names and usage contexts that we expected to see an API include or link target for, but did not.
-
-        Counterpart to getMissingUnreferencedApiIncludes(): This method returns only the
-        entity names that were used in a linking macro (and thus create a broken link),
-        but were not seen. The values of the dictionary are a list of MessageContext objects
-        for each linking macro usage for this entity name.
-        """
-        return {entity: contexts for entity, contexts in self.links.items()
-                if self.entity_db.entityGenerates(entity) and not self.haveLinkTarget(entity)}
-
-    def getMissingRefPages(self):
-        """Return a list of entities that we expected, but did not see, a ref page block for.
-
-        The heuristics here are rather crude: we expect a ref page for every generating entry.
-        """
-        return (entity for entity in sorted(self.entity_db.generating_entities)
-                if entity not in self.refpages)
diff --git a/codegen/vulkan/scripts/spec_tools/macro_checker_file.py b/codegen/vulkan/scripts/spec_tools/macro_checker_file.py
deleted file mode 100644
index 3bca17a..0000000
--- a/codegen/vulkan/scripts/spec_tools/macro_checker_file.py
+++ /dev/null
@@ -1,1592 +0,0 @@
-"""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/codegen/vulkan/scripts/spec_tools/main.py b/codegen/vulkan/scripts/spec_tools/main.py
deleted file mode 100644
index 2cd4f69..0000000
--- a/codegen/vulkan/scripts/spec_tools/main.py
+++ /dev/null
@@ -1,244 +0,0 @@
-"""Provides a re-usable command-line interface to a MacroChecker."""
-
-# Copyright (c) 2018-2019 Collabora, Ltd.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
-
-
-import argparse
-import logging
-import re
-from pathlib import Path
-
-from .shared import MessageId
-
-
-def checkerMain(default_enabled_messages, make_macro_checker,
-                all_docs, available_messages=None):
-    """Perform the bulk of the work for a command-line interface to a MacroChecker.
-
-    Arguments:
-    default_enabled_messages -- The MessageId values that should be enabled by default.
-    make_macro_checker -- A function that can be called with a set of enabled MessageId to create a
-      properly-configured MacroChecker.
-    all_docs -- A list of all spec documentation files.
-    available_messages -- a list of all MessageId values that can be generated for this project.
-      Defaults to every value. (e.g. some projects don't have MessageId.LEGACY)
-    """
-    enabled_messages = set(default_enabled_messages)
-    if not available_messages:
-        available_messages = list(MessageId)
-
-    disable_args = []
-    enable_args = []
-
-    parser = argparse.ArgumentParser()
-    parser.add_argument(
-        "--scriptlocation",
-        help="Append the script location generated a message to the output.",
-        action="store_true")
-    parser.add_argument(
-        "--verbose",
-        "-v",
-        help="Output 'info'-level development logging messages.",
-        action="store_true")
-    parser.add_argument(
-        "--debug",
-        "-d",
-        help="Output 'debug'-level development logging messages (more verbose than -v).",
-        action="store_true")
-    parser.add_argument(
-        "-Werror",
-        "--warning_error",
-        help="Make warnings act as errors, exiting with non-zero error code",
-        action="store_true")
-    parser.add_argument(
-        "--include_warn",
-        help="List all expected but unseen include files, not just those that are referenced.",
-        action='store_true')
-    parser.add_argument(
-        "-Wmissing_refpages",
-        help="List all entities with expected but unseen ref page blocks. NOT included in -Wall!",
-        action='store_true')
-    parser.add_argument(
-        "--include_error",
-        help="Make expected but unseen include files cause exiting with non-zero error code",
-        action='store_true')
-    parser.add_argument(
-        "--broken_error",
-        help="Make missing include/anchor for linked-to entities cause exiting with non-zero error code. Weaker version of --include_error.",
-        action='store_true')
-    parser.add_argument(
-        "--dump_entities",
-        help="Just dump the parsed entity data to entities.json and exit.",
-        action='store_true')
-    parser.add_argument(
-        "--html",
-        help="Output messages to the named HTML file instead of stdout.")
-    parser.add_argument(
-        "file",
-        help="Only check the indicated file(s). By default, all chapters and extensions are checked.",
-        nargs="*")
-    parser.add_argument(
-        "--ignore_count",
-        type=int,
-        help="Ignore up to the given number of errors without exiting with a non-zero error code.")
-    parser.add_argument("-Wall",
-                        help="Enable all warning categories.",
-                        action='store_true')
-
-    for message_id in MessageId:
-        enable_arg = message_id.enable_arg()
-        enable_args.append((message_id, enable_arg))
-
-        disable_arg = message_id.disable_arg()
-        disable_args.append((message_id, disable_arg))
-        if message_id in enabled_messages:
-            parser.add_argument('-' + disable_arg, action="store_true",
-                                help="Disable message category {}: {}".format(str(message_id), message_id.desc()))
-            # Don't show the enable flag in help since it's enabled by default
-            parser.add_argument('-' + enable_arg, action="store_true",
-                                help=argparse.SUPPRESS)
-        else:
-            parser.add_argument('-' + enable_arg, action="store_true",
-                                help="Enable message category {}: {}".format(str(message_id), message_id.desc()))
-            # Don't show the disable flag in help since it's disabled by
-            # default
-            parser.add_argument('-' + disable_arg, action="store_true",
-                                help=argparse.SUPPRESS)
-
-    args = parser.parse_args()
-
-    arg_dict = vars(args)
-    for message_id, arg in enable_args:
-        if args.Wall or (arg in arg_dict and arg_dict[arg]):
-            enabled_messages.add(message_id)
-
-    for message_id, arg in disable_args:
-        if arg in arg_dict and arg_dict[arg]:
-            enabled_messages.discard(message_id)
-
-    if args.verbose:
-        logging.basicConfig(level='INFO')
-
-    if args.debug:
-        logging.basicConfig(level='DEBUG')
-
-    checker = make_macro_checker(enabled_messages)
-
-    if args.dump_entities:
-        with open('entities.json', 'w', encoding='utf-8') as f:
-            f.write(checker.getEntityJson())
-            exit(0)
-
-    if args.file:
-        files = (str(Path(f).resolve()) for f in args.file)
-    else:
-        files = all_docs
-
-    for fn in files:
-        checker.processFile(fn)
-
-    if args.html:
-        from .html_printer import HTMLPrinter
-        printer = HTMLPrinter(args.html)
-    else:
-        from .console_printer import ConsolePrinter
-        printer = ConsolePrinter()
-
-    if args.scriptlocation:
-        printer.show_script_location = True
-
-    if args.file:
-        printer.output("Only checked specified files.")
-        for f in args.file:
-            printer.output(f)
-    else:
-        printer.output("Checked all chapters and extensions.")
-
-    if args.warning_error:
-        numErrors = checker.numDiagnostics()
-    else:
-        numErrors = checker.numErrors()
-
-    check_includes = args.include_warn
-    check_broken = not args.file
-
-    if args.file and check_includes:
-        print('Note: forcing --include_warn off because only checking supplied files.')
-        check_includes = False
-
-    printer.outputResults(checker, broken_links=(not args.file),
-                          missing_includes=check_includes)
-
-    if check_broken:
-        numErrors += len(checker.getBrokenLinks())
-
-    if args.file and args.include_error:
-        print('Note: forcing --include_error off because only checking supplied files.')
-        args.include_error = False
-    if args.include_error:
-        numErrors += len(checker.getMissingUnreferencedApiIncludes())
-
-    check_missing_refpages = args.Wmissing_refpages
-    if args.file and check_missing_refpages:
-        print('Note: forcing -Wmissing_refpages off because only checking supplied files.')
-        check_missing_refpages = False
-
-    if check_missing_refpages:
-        missing = checker.getMissingRefPages()
-        if missing:
-            printer.output("Expected, but did not find, ref page blocks for the following {} entities: {}".format(
-                len(missing),
-                ', '.join(missing)
-            ))
-            if args.warning_error:
-                numErrors += len(missing)
-
-    printer.close()
-
-    if args.broken_error and not args.file:
-        numErrors += len(checker.getBrokenLinks())
-
-    if checker.hasFixes():
-        fixFn = 'applyfixes.sh'
-        print('Saving shell script to apply fixes as {}'.format(fixFn))
-        with open(fixFn, 'w', encoding='utf-8') as f:
-            f.write('#!/bin/sh -e\n')
-            for fileChecker in checker.files:
-                wroteComment = False
-                for msg in fileChecker.messages:
-                    if msg.fix is not None:
-                        if not wroteComment:
-                            f.write('\n# {}\n'.format(fileChecker.filename))
-                            wroteComment = True
-                        search, replace = msg.fix
-                        f.write(
-                            r"sed -i -r 's~\b{}\b~{}~g' {}".format(
-                                re.escape(search),
-                                replace,
-                                fileChecker.filename))
-                        f.write('\n')
-
-    print('Total number of errors with this run: {}'.format(numErrors))
-
-    if args.ignore_count:
-        if numErrors > args.ignore_count:
-            # Exit with non-zero error code so that we "fail" CI, etc.
-            print('Exceeded specified limit of {}, so exiting with error'.format(
-                args.ignore_count))
-            exit(1)
-        else:
-            print('At or below specified limit of {}, so exiting with success'.format(
-                args.ignore_count))
-            exit(0)
-
-    if numErrors:
-        # Exit with non-zero error code so that we "fail" CI, etc.
-        print('Exiting with error')
-        exit(1)
-    else:
-        print('Exiting with success')
-        exit(0)
diff --git a/codegen/vulkan/scripts/spec_tools/shared.py b/codegen/vulkan/scripts/spec_tools/shared.py
deleted file mode 100644
index bb6f165..0000000
--- a/codegen/vulkan/scripts/spec_tools/shared.py
+++ /dev/null
@@ -1,257 +0,0 @@
-"""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/codegen/vulkan/scripts/spec_tools/util.py b/codegen/vulkan/scripts/spec_tools/util.py
deleted file mode 100644
index b890679..0000000
--- a/codegen/vulkan/scripts/spec_tools/util.py
+++ /dev/null
@@ -1,58 +0,0 @@
-"""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/codegen/vulkan/scripts/spec_tools/validity.py b/codegen/vulkan/scripts/spec_tools/validity.py
deleted file mode 100644
index 745ba01..0000000
--- a/codegen/vulkan/scripts/spec_tools/validity.py
+++ /dev/null
@@ -1,216 +0,0 @@
-#!/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/codegen/vulkan/scripts/spirvcapgenerator.py b/codegen/vulkan/scripts/spirvcapgenerator.py
deleted file mode 100644
index 85740f3..0000000
--- a/codegen/vulkan/scripts/spirvcapgenerator.py
+++ /dev/null
@@ -1,308 +0,0 @@
-#!/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/codegen/vulkan/scripts/testSpecVersion.py b/codegen/vulkan/scripts/testSpecVersion.py
deleted file mode 100755
index 4ead2b6..0000000
--- a/codegen/vulkan/scripts/testSpecVersion.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/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/codegen/vulkan/scripts/test_check_spec_links.py b/codegen/vulkan/scripts/test_check_spec_links.py
deleted file mode 100644
index b0c82e3..0000000
--- a/codegen/vulkan/scripts/test_check_spec_links.py
+++ /dev/null
@@ -1,643 +0,0 @@
-#!/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/codegen/vulkan/scripts/test_check_spec_links_api_specific.py b/codegen/vulkan/scripts/test_check_spec_links_api_specific.py
deleted file mode 100644
index 76ce6a9..0000000
--- a/codegen/vulkan/scripts/test_check_spec_links_api_specific.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/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/codegen/vulkan/scripts/test_entity_db.py b/codegen/vulkan/scripts/test_entity_db.py
deleted file mode 100644
index ef08794..0000000
--- a/codegen/vulkan/scripts/test_entity_db.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python3 -i
-#
-# Copyright (c) 2018-2019 Collabora, Ltd.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# Author(s):    Ryan Pavlik <ryan.pavlik@collabora.com>
-
-
-import pytest
-
-from check_spec_links import VulkanEntityDatabase
-
-
-@pytest.fixture
-def db():
-    ret = VulkanEntityDatabase()
-    # print(ret.getEntityJson())
-    return ret
-
-
-def test_likely_recognized(db):
-    assert(db.likelyRecognizedEntity('vkBla'))
-    assert(db.likelyRecognizedEntity('VkBla'))
-    assert(db.likelyRecognizedEntity('VK_BLA'))
-
-
-def test_db(db):
-    assert(db.findEntity('vkCreateInstance'))
-
-    # VKAPI_CALL is not referenced, so not added to EntityDatabase.
-    # assert(db.findEntity('VKAPI_CALL'))
diff --git a/codegen/vulkan/scripts/translate_math.js b/codegen/vulkan/scripts/translate_math.js
deleted file mode 100644
index c2fd6d2..0000000
--- a/codegen/vulkan/scripts/translate_math.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// 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/codegen/vulkan/scripts/validitygenerator.py b/codegen/vulkan/scripts/validitygenerator.py
deleted file mode 100755
index a3a8456..0000000
--- a/codegen/vulkan/scripts/validitygenerator.py
+++ /dev/null
@@ -1,1497 +0,0 @@
-#!/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/codegen/vulkan/scripts/vkconventions.py b/codegen/vulkan/scripts/vkconventions.py
deleted file mode 100644
index a43f712..0000000
--- a/codegen/vulkan/scripts/vkconventions.py
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/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/codegen/vulkan/scripts/xml_consistency.py b/codegen/vulkan/scripts/xml_consistency.py
deleted file mode 100755
index 3651453..0000000
--- a/codegen/vulkan/scripts/xml_consistency.py
+++ /dev/null
@@ -1,390 +0,0 @@
-#!/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/codegen/vulkan/src/ext_loader/README.md b/codegen/vulkan/src/ext_loader/README.md
deleted file mode 100644
index c571986..0000000
--- a/codegen/vulkan/src/ext_loader/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-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/codegen/vulkan/styleguide.txt b/codegen/vulkan/styleguide.txt
deleted file mode 100644
index 3c1a8dd..0000000
--- a/codegen/vulkan/styleguide.txt
+++ /dev/null
@@ -1,381 +0,0 @@
-// 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/codegen/vulkan/tests/README.adoc b/codegen/vulkan/tests/README.adoc
deleted file mode 100644
index 9d52d4d..0000000
--- a/codegen/vulkan/tests/README.adoc
+++ /dev/null
@@ -1,22 +0,0 @@
-// 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/codegen/vulkan/tests/X11/Xlib.h b/codegen/vulkan/tests/X11/Xlib.h
deleted file mode 100644
index c3800e9..0000000
--- a/codegen/vulkan/tests/X11/Xlib.h
+++ /dev/null
@@ -1,14 +0,0 @@
-// 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/codegen/vulkan/tests/X11/extensions/Xrandr.h b/codegen/vulkan/tests/X11/extensions/Xrandr.h
deleted file mode 100644
index fc0d7c2..0000000
--- a/codegen/vulkan/tests/X11/extensions/Xrandr.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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/codegen/vulkan/tests/ggp_c/vulkan_types.h b/codegen/vulkan/tests/ggp_c/vulkan_types.h
deleted file mode 100644
index ae922a9..0000000
--- a/codegen/vulkan/tests/ggp_c/vulkan_types.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// 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/codegen/vulkan/tests/hpptest.cpp b/codegen/vulkan/tests/hpptest.cpp
deleted file mode 100644
index fd6acdd..0000000
--- a/codegen/vulkan/tests/hpptest.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-// 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/codegen/vulkan/tests/htest.c b/codegen/vulkan/tests/htest.c
deleted file mode 100644
index aba14d8..0000000
--- a/codegen/vulkan/tests/htest.c
+++ /dev/null
@@ -1,71 +0,0 @@
-//% 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/codegen/vulkan/tests/screen/screen.h b/codegen/vulkan/tests/screen/screen.h
deleted file mode 100644
index 4f73f08..0000000
--- a/codegen/vulkan/tests/screen/screen.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// 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/codegen/vulkan/tests/wayland-client.h b/codegen/vulkan/tests/wayland-client.h
deleted file mode 100644
index e69de29..0000000
--- a/codegen/vulkan/tests/wayland-client.h
+++ /dev/null
diff --git a/codegen/vulkan/tests/windows.h b/codegen/vulkan/tests/windows.h
deleted file mode 100644
index 8e9e484..0000000
--- a/codegen/vulkan/tests/windows.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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/codegen/vulkan/tests/xcb/xcb.h b/codegen/vulkan/tests/xcb/xcb.h
deleted file mode 100644
index 2438f18..0000000
--- a/codegen/vulkan/tests/xcb/xcb.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// 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/codegen/vulkan/tests/zircon/types.h b/codegen/vulkan/tests/zircon/types.h
deleted file mode 100644
index 5ad096d..0000000
--- a/codegen/vulkan/tests/zircon/types.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// 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/codegen/vulkan/update_valid_usage_ids.sh b/codegen/vulkan/update_valid_usage_ids.sh
deleted file mode 100755
index 524bcb3..0000000
--- a/codegen/vulkan/update_valid_usage_ids.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-# 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/codegen/vulkan/xml/Makefile b/codegen/vulkan/xml/Makefile
deleted file mode 100644
index d786bf7..0000000
--- a/codegen/vulkan/xml/Makefile
+++ /dev/null
@@ -1,158 +0,0 @@
-# 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/codegen/vulkan/xml/README.adoc b/codegen/vulkan/xml/README.adoc
deleted file mode 100644
index 1fee04d..0000000
--- a/codegen/vulkan/xml/README.adoc
+++ /dev/null
@@ -1,184 +0,0 @@
-// 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/codegen/vulkan/xml/generate-core-block.rb b/codegen/vulkan/xml/generate-core-block.rb
deleted file mode 100644
index 3a97e30..0000000
--- a/codegen/vulkan/xml/generate-core-block.rb
+++ /dev/null
@@ -1,125 +0,0 @@
-# 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/codegen/vulkan/xml/registry.rnc b/codegen/vulkan/xml/registry.rnc
deleted file mode 100644
index ad645c0..0000000
--- a/codegen/vulkan/xml/registry.rnc
+++ /dev/null
@@ -1,610 +0,0 @@
-# Copyright 2013-2021 The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-# Relax NG schema for Khronos Vulkan API Registry XML
-#
-# See https://www.khronos.org/vulkan/
-#
-# This definition is subject to change (mostly in the form of additions)
-
-namespace xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
-
-# Toplevel is a <registry> tag.
-# May be led by an optional <comment> tag containing e.g. copyrights.
-start = element registry {
-    (
-        element comment { text } ? |
-        Platforms         * |
-        Tags              * |
-        Types             * |
-        Enums             * |
-        Commands          * |
-        Feature           * |
-        Extensions        * |
-        SpirvExtensions   * |
-        SpirvCapabilities *
-    ) *
-}
-
-# <platforms> defines a group of platform names
-Platforms = element platforms {
-    Comment ? ,
-    Platform *
-}
-
-# <platform> defines a single platform name.
-#   name - string name of the platform, used as part of extension names
-#   protect - preprocessor symbol to include platform headers from <vulkan.h>
-#   comment - platform description
-Platform = element platform {
-    attribute name { text } ,
-    attribute protect { text } ,
-    Comment
-}
-
-# <tags> defines a group of author tags
-Tags = element tags {
-    Comment ? ,
-    Tag *
-}
-
-# <tag> defines a single author tag.
-#   name - name of the tag
-#   author - name of the author (usually a company or project name)
-#   contact - contact responsible for the tag (name and contact information)
-Tag = element tag {
-    attribute name { text } ,
-    attribute author { text } ,
-    attribute contact { text }
-}
-
-# <types> defines a group of types
-Types = element types {
-    Comment ? ,
-    (
-        Type |
-        element comment { text }
-    ) *
-}
-
-# <type> defines a single type. It is usually a C typedef but
-# may contain arbitrary C code.
-#   name - name of this type, if not present in the <name> tag
-#   api - matches a <feature> api attribute, if present
-#   alias - name of a type this type aliases
-#   requires - name of another type definition required by this one
-#   bitvalues - for a *Flags type, name of an enum definition that
-#       defines the valid values for parameters of that type
-#   name - name of the type being defined
-#   category - if present, 'enum' indicates a matching <enums>
-#       block to generate an enumerated type for, and 'struct'
-#       causes special interpretation of the contents of the type
-#       tag including ... TBD ...
-#       Other allowed values are 'include', 'define', 'handle' and 'bitmask',
-#       which don't change syntactic interpretation but allow organization in
-#       the generated header.
-#   parent - only applicable if category is 'handle'. Notes another type with
-#       the 'handle' category that acts as a parent object for this type.
-#   returnedonly - only applicable if category is 'struct'. Notes that this
-#       struct is going to be filled in by the API, rather than an application
-#       filling it out and passing it to the API.
-#   structextends - only applicable if category is 'struct'. Lists parent
-#       structures which this structure may extend via the pNext chain
-#       of the parent.
-#       When present it suppresses generation of automatic validity for the
-#       pNext member of that structure, and instead the structure is added
-#       to pNext chain validity for the parent structures it extends.
-#   allowduplicate - only applicable if category is 'struct'. pNext can include
-#       multiple structures of this type.
-#   objtypeenum - name of VK_OBJECT_TYPE_* API enumerant which corresponds
-#       to this type. Currently only specified for category="handle" types.
-#   comment - descriptive text with no semantic meaning
-# For types without a category, contents include
-#   <apientry /> - substitutes for an APIENTRY-style macro on output
-#   <name> - contains name of the type being defined
-#   <type> - contains name of types used to define this type. There
-#       may be multiple imbedded <type> tags
-# For types with category 'enum', contents should be empty
-# For types with category 'struct', contents should be one or more
-#   <member> - like <param> for a struct or union member
-#       len - if the member is an array, len may be one or more of the following
-#           things, separated by commas (one for each array indirection): another
-#           member of that struct, 'null-terminated' for a string, '1' to indicate it's
-#           just a pointer (used for nested pointers), or a latex equation (prefixed with
-#           'latexmath:')
-#       altlen - if len has latexmath equations, this contains equivalent C99
-#                expressions separated by commas.
-#       externsync - denotes that the member should be externally synchronized
-#           when accessed by Vulkan
-#       optional - whether this value can be omitted by providing NULL (for
-#           pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values)
-#       selector - for a union member, identifies a separate enum member that
-#           selects which of the union's members are valid
-#       selection - for a member of a union, identifies an enum value indicating the member is valid
-#       noautovalidity - tag stating that no automatic validity language should be generated
-#       values - comma-separated list of legal values, usually used only for sType enums
-#       limittype - only applicable for members of VkPhysicalDeviceProperties and
-#           VkPhysicalDeviceProperties2, their substrucutres, and extensions.
-#           Specifies the type of a device limit.
-#           Valid values: 'min', 'max', 'bitmask', 'range', 'struct', 'noauto'
-#       objecttype - only applicable for members representing a handle as
-#           a uint64_t value. Specifies the name of another member which is
-#           a VkObjectType or VkDebugReportObjectTypeEXT value specifying
-#           the type of object the handle references.
-#   <comment> - containing arbitrary text (unused)
-#
-# *** There's a problem here: I'm not sure how to represent the <type>
-# syntax where it may contain arbitrarily interleaved text, <type>, and
-# <enum> child tags. This allows only the syntax
-#   text <type>name</type> text <enum>name</enum> text
-# where <type> and <enum> are both optional and occur in the specified
-# order, which might eventually be a problem.
-Type = element type {
-    attribute api { text } ? ,
-    attribute alias { text } ? ,
-    attribute requires { text } ? ,
-    attribute bitvalues { text } ? ,
-    attribute name { TypeName } ? ,
-    attribute category { text } ? ,
-    attribute parent { TypeName } ? ,
-    attribute returnedonly { text } ? ,
-    attribute structextends { text } ? ,
-    attribute allowduplicate { text } ? ,
-    attribute objtypeenum { text } ? ,
-    Comment ? ,
-    (
-        (
-            ( text ,
-              element type { text } *
-            ) * ,
-            element apientry { text } ? ,
-            ( text ,
-              element type { text } *
-            ) * ,
-            element name { TypeName } ? ,
-            ( text ,
-              element type { text } *
-            ) *
-        ) |
-        (
-            element member {
-                attribute len { text } ? ,
-                attribute altlen { text } ? ,
-                attribute externsync { text } ? ,
-                attribute optional { text } ? ,
-                attribute selector { text } ? ,
-                attribute selection { EnumName } ? ,
-                attribute noautovalidity { text } ? ,
-                attribute values { text } ? ,
-                attribute limittype { text } ? ,
-                attribute objecttype { text } ? ,
-                mixed {
-                    element type { TypeName } ? ,
-                    element name { text } ? ,
-                    element enum { EnumName } ? ,
-                    element comment { text } ?
-                }
-            } |
-            element comment { text }
-        ) *
-    )
-}
-
-# <enums> defines a group of enumerants
-#   name - identifies a type name associated with this group. Should
-#       match a <type> name to trigger generation of the type.
-#   start, end - beginning and end of a numeric range
-#   vendor - owner of the numeric range
-#   type - 'enum' or 'bitmask', if present
-#   bitwidth - bit width of the enum value type.
-#   comment - descriptive text with no semantic meaning
-Enums = element enums {
-    attribute name { text } ? ,
-    attribute type { text } ? ,
-    attribute start { Integer } ? ,
-    attribute end { Integer } ? ,
-    attribute bitwidth { Integer } ? ,
-    Vendor ? ,
-    Comment ? ,
-    (
-        Enum |
-        Unused |
-        element comment { text}
-    ) *
-}
-
-# <enum> defines or references a single enumerant. There are two places it
-# can be used: in an <enums> block, providing a global definition which
-# may later be required by a feature or extension; or in a feature or
-# extension, defining an enumerant specific to that feature. The second
-# form has more possible attributes. Some combinations of attributes are
-# nonsensical in on or the other place, but these are not detected by the
-# validator.
-#
-# Ways to specify the enumerant value:
-#   value - integer (including hex) value of the enumerant
-#   bitpos - integer bit position of the enumerant in a bitmask
-#   [extnumber], offset, [dir] - integer extension number specifying a
-#       base block value (inherited from surrounding <extension> if
-#       not specified); integer offset in that block; and direction
-#       of offset ('-' for negative, positive if not specified).
-#   alias - name of another enum this is an alias of
-#
-# value and bitpos allow, and extnumber/offset/dir require:
-#   extends - type name of the enumerant being extended
-#
-# Other attributes:
-#   api - matches a <feature> api attribute, if present
-#   type - 'uint32_t', 'uint64_t', or 'float', if present. There are
-#       certain conditions under which the tag must be present, or absent,
-#       but they are context-dependent and difficult to express in the
-#       RNC syntax.
-#   name - enumerant name
-#   alias - another enumerant this is semantically identical to
-#   protect - additional #ifdef symbol to place around the enum
-#   comment - descriptive text with no semantic meaning
-Enum = element enum {
-    (
-      (
-        (
-          attribute value { Integer } &
-          attribute extends { TypeName } ?
-        ) |
-        (
-          attribute bitpos { Integer } &
-          attribute extends { TypeName } ?
-        ) |
-        (
-          attribute extnumber { Integer } ? &
-          attribute offset { Integer } &
-          attribute dir { text } ? &
-          attribute extends { TypeName }
-        ) |
-        (
-          attribute extends { TypeName } ? &
-          attribute alias { TypeName }
-        )
-      ) ? &
-      attribute protect { text } ? &
-      attribute api { text } ? &
-      attribute type { TypeSuffix } ? &
-      attribute name { text } &
-      Comment ?
-    )
-}
-
-# <unused> defines a range of enumerants not currently being used
-#   start, end - beginning and end of an unused numeric range
-#   vendor - unused
-#   comment - descriptive text with no semantic meaning
-Unused = element unused {
-    attribute start { Integer } ,
-    attribute end { Integer } ? ,
-    Vendor ? ,
-    Comment ?
-}
-
-# <commands> defines a group of commands
-Commands = element commands {
-    Comment ? ,
-    Command *
-}
-
-# <command> defines a single command
-#
-# There are two forms of the tag.
-#
-# The first only has 'name' and 'alias' attributes, and no contents.
-# It defines a command alias.
-#
-# The second fully defines a command, and has the following structure:
-# The possible attributes are not described in this comment block yet, but
-# are in readme.pdf. The "prefix" and "suffix" attributes are currently
-# present only in the OpenCL XML registry, where they are currently unused.
-#
-#   <proto> is the C function prototype, including the return type
-#   <param> are function parameters, in order
-#     len - if the member is an array, len may be one or more of the following
-#           things, separated by commas (one for each array indirection): another
-#           member of that struct, 'null-terminated' for a string, '1' to indicate it's
-#           just a pointer (used for nested pointers), or a latex equation (prefixed with
-#           'latexmath:')
-#     altlen - if len has latexmath equations, this contains equivalent C99
-#              expressions separated by commas.
-#     externsync - denotes that the member should be externally synchronized
-#         when accessed by Vulkan
-#     optional - whether this value can be omitted by providing NULL (for
-#         pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values)
-#     selector - for a union parameter, identifies a separate enum parameter that
-#         selects which of the union's members are valid
-#     noautovalidity - tag stating that no automatic validity language should be generated
-#     objecttype - only applicable for parameters representing a handle as
-#         a uint64_t value. Specifies the name of another parameter which is
-#         a VkObjectType or VkDebugReportObjectTypeEXT value specifying
-#         the type of object the handle references.
-#     <type> is a <type> name, if present
-#     <name> is the function / parameter name, if present (normally should
-#         be, except for void parameters).
-# The textual contents of <proto> and <param> should be legal C
-# for those parts of a function declaration.
-#   <alias> - denotes function aliasing, if present
-#     name - name of aliased function
-#   <description> - unused text
-#   <implicitexternsyncparams> are spec-language descriptions of
-#       objects that are not parameters of the command, but
-#       are related to them and also require external synchronization.
-Command = element command {
-    (   attribute name { text } ,
-        attribute alias { text } ) |
-    (
-        attribute queues { text } ? ,
-        attribute successcodes { text } ? ,
-        attribute errorcodes { text } ? ,
-        attribute renderpass { text } ? ,
-        attribute cmdbufferlevel { text } ? ,
-        attribute prefix { text } ? ,
-        attribute suffix { text } ? ,
-        Comment ? ,
-        element proto {
-            mixed {
-                element type { TypeName } ? ,
-                element name { text }
-            }
-        } ,
-        element param {
-            attribute len { text } ? ,
-            attribute altlen { text } ? ,
-            attribute externsync { text } ? ,
-            attribute optional { text } ? ,
-            attribute selector { text } ? ,
-            attribute noautovalidity { text } ? ,
-            attribute objecttype { text } ? ,
-            mixed {
-                element type { TypeName } ? ,
-                element name { text } ?
-            }
-        } * ,
-        (
-            element alias {
-                Name
-            } ? &
-            element description {
-                text
-            } ? &
-            element implicitexternsyncparams {
-                element param { text } *
-            } ?
-        )
-    )
-}
-
-# Each <feature> defines the interface of an API version (e.g. OpenGL 1.2)
-#   api - API tag (e.g. 'gl', 'gles2', etc. - used internally, not
-#     necessarily an actual API name
-#   name - version name (C preprocessor name, e.g. GL_VERSION_4_2)
-#   number - version number, e.g. 4.2
-#   protect - additional #ifdef symbol to place around the feature
-#   sortorder - order relative to other features, default 0
-#   <require> / <remove> contains features to require or remove in
-#                        this version
-#     profile - only require/remove when generated profile matches
-#     comment - descriptive text with no semantic meaning
-Feature = element feature {
-    attribute api { text } ,
-    Name ,
-    attribute number { xsd:float } ,
-    attribute protect { text } ? ,
-    attribute sortorder { xsd:integer } ?,
-    Comment ? ,
-    (
-        element require {
-            ProfileName ? ,
-            ExtensionName ? ,
-            Comment ? ,
-            (
-                InterfaceElement |
-                element comment { text }
-            ) *
-        } |
-        element remove {
-            ProfileName ? ,
-            Comment ? ,
-            (
-                InterfaceElement |
-                element comment { text }
-            ) *
-        }
-    ) *
-}
-
-Extensions = element extensions {
-    Comment ? ,
-    Extension *
-}
-
-# Defines the interface of an API <extension>. Like a <feature>
-# tag, but with slightly different attributes:
-#   api - regexp pattern matching one or more API tags, indicating
-#     which APIs the extension is known to work with. The only
-#     syntax supported is <name>{|<name>}* and each name must
-#     exactly match an API being generated (implicit ^$ surrounding).
-#   name - extension name string
-#   number - extension number (positive integer, should be unique)
-#   sortorder - order relative to other extensions, default 0
-#   protect - C preprocessor symbol to conditionally define the interface
-#   platform - should be one of the platform names defined in the
-#     <platform> tag. Currently unused.
-#   author - name of the author (usually a company or project name)
-#   contact - contact responsible for the tag (name and contact information)
-#   type - 'device' or 'instance', if present
-#   requires - commas-separated list of extension names required by this
-#       extension
-#   requiresCore - core version of Vulkan required by the extension, e.g.
-#       "1.1". Defaults to "1.0".
-#   supported - profile name(s) supporting this extension, e.g. 'vulkan'
-#       or 'disabled' to never generate output.
-#   promotedto - Vulkan version or a name of an extension that this
-#       extension was promoted to; e.g. 'VK_VERSION_1_1', or
-#       'VK_KHR_draw_indirect_county'
-#   deprecatedby - Vulkan version or a name of an extension that deprecates
-#       this extension. It may be empty string.
-#       e.g. 'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or ''
-#   obsoletedby - Vulkan version or a name of an extension that obsoletes
-#       this extension. It may be empty string.
-#       e.g. 'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or ''
-#   provisional - 'true' if this extension is released provisionally
-#   specialuse - contains one or more tokens separated by commas, indicating
-#       a special purpose of the extension. Tokens may include 'cadsupport',
-#       'd3demulation', 'devtools', 'debugging', and 'glemulation'. Others
-#       may be added in the future.
-# In addition, <require> / <remove> tags also support an api attribute:
-#     api - only require/remove these features for the matching API.
-#       Not a regular expression.
-Extension = element extension {
-    Name ,
-    attribute number { Integer } ? ,
-    attribute sortorder { xsd:integer } ?,
-    attribute protect { text } ? ,
-    attribute platform { text } ? ,
-    attribute author { text } ? ,
-    attribute contact { text } ? ,
-    attribute type { text } ? ,
-    attribute requires { text } ? ,
-    attribute requiresCore { text } ? ,
-    attribute supported { StringGroup } ? ,
-    attribute promotedto { text } ? ,
-    attribute deprecatedby { text } ? ,
-    attribute obsoletedby { text } ? ,
-    attribute provisional { text } ? ,
-    attribute specialuse { text } ? ,
-    Comment ? ,
-    (
-        element require {
-            attribute api { text } ? ,
-            ProfileName ? ,
-            ExtensionName ? ,
-            FeatureName ? ,
-            Comment ? ,
-            (
-                InterfaceElement |
-                element comment { text }
-            ) *
-        } |
-        element remove {
-            attribute api { text } ? ,
-            ProfileName ? ,
-            Comment ? ,
-            (
-                InterfaceElement |
-                element comment { text }
-            ) *
-        }
-    ) *
-}
-
-# Each <spirvextension> define a SPIR-V extension that can be used in the API.
-# Each <spirvcapability> define a SPIR-V capability that can be used in the API.
-# Contains information to both generate table in spec as well as validation
-# what needs to be enabled be used in Vulkan
-SpirvExtensions = element spirvextensions {
-    Comment ? ,
-    SpirvExtension *
-}
-
-SpirvExtension = element spirvextension {
-    Name ,
-    Enable *
-}
-
-SpirvCapabilities = element spirvcapabilities {
-    Comment ? ,
-    SpirvCapability *
-}
-
-SpirvCapability = element spirvcapability {
-    Name ,
-    Enable *
-}
-
-# <enable> defines a way to enable the parent element in the API.
-# If anyone of the <enable> elements are valid then the parent element
-# can be used.
-#
-# There are four forms of the tag.
-#
-# The first only has the minimal version of Vulkan of the application
-#
-# The second only has a single Vulkan extension that must be enabled
-#
-# The third has a single Vulkan feature with the struct where it is from
-#
-# The forth has a property struct, the member field in it, and the value
-# that must be present
-#
-# To make scripting easier, each <enable> has a require attribute to map
-# to the asciidoctor conditional logic in the spec. For version and
-# extension attribute variations, there is no need for the require attribute
-# since it is a redundant 1:1 mapping.
-#
-# The 'alias' attribute is used in cases where the anchor link can't be
-# propertly resolved and needs a manual name to link to
-Enable = element enable {
-    (
-        attribute version { text } ) |
-    (
-        attribute extension { text } ) |
-    (
-        attribute struct { text },
-        attribute feature { text },
-        attribute requires { text },
-        attribute alias { text } ? ) |
-    (
-        attribute property { text },
-        attribute member { text },
-        attribute value { text },
-        attribute requires { text } ? )
-}
-
-# Contents of a <require> / <remove> tag, defining a group
-# of features to require or remove.
-#   <type> / <enum> / <command> all have attributes
-#     name - feature name which must match
-InterfaceElement =
-    element type {
-        Name ,
-        Comment ?
-    } |
-    Enum |
-    element command {
-        Name ,
-        Comment ?
-    }
-
-# Integers are allowed to be either decimal or C-hex (0x[0-9A-F]+), but
-# XML Schema types don't seem to support hex notation, so we use this
-# as a placeholder.
-Integer = text
-
-# EnumName is an compile-time constant name
-EnumName = text
-
-# TypeName is an argument/return value C type name
-TypeName = text
-
-# TypeSuffix is a C numeric type suffix, e.g. 'u' or 'ull'
-TypeSuffix = text
-
-# StringGroup is a regular expression with an implicit
-#   '^(' and ')$' bracketing it.
-StringGroup = text
-
-# Repeatedly used attributes
-ProfileName = attribute profile { text }
-ExtensionName = attribute extension { text }
-FeatureName = attribute feature { text }
-Vendor = attribute vendor { text }
-Comment = attribute comment { text }
-Name = attribute name { text }
-
-
diff --git a/codegen/vulkan/xml/vk.xml b/codegen/vulkan/xml/vk.xml
deleted file mode 100644
index 73245d2..0000000
--- a/codegen/vulkan/xml/vk.xml
+++ /dev/null
@@ -1,18299 +0,0 @@
-<?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"
-                filterVar="flags"
-                filterFunc="(eq (bitwise_and flags VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) 0)">
-                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="VkCreateBlobGOOGLE" structextends="VkMemoryAllocateInfo">
-            <member values="VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE"><type>VkStructureType</type> <name>sType</name></member>
-            <member><type>void</type>*                  <name>pNext</name></member>
-            <member><type>uint32_t</type>   <name>blobMem</name></member>
-            <member><type>uint32_t</type>   <name>blobFlags</name></member>
-            <member><type>uint64_t</type>   <name>blobId</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>
-            <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>vkGetLinearImageLayout2GOOGLE</name></proto>
-            <param><type>VkDevice</type> <name>device</name></param>
-            <param>const <type>VkImageCreateInfo</type>* <name>pCreateInfo</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 successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY">
-            <proto><type>VkResult</type> <name>vkGetBlobGOOGLE</name></proto>
-            <param><type>VkDevice</type> <name>device</name></param>
-            <param externsync="true" devicememoryhandle="1"><type>VkDeviceMemory</type> <name>memory</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>
-            <proto><type>void</type> <name>vkQueueFlushCommandsFromAuxMemoryGOOGLE</name></proto>
-            <param externsync="true"><type>VkQueue</type> <name>queue</name></param>
-            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
-            <param><type>VkDeviceMemory</type> <name>deviceMemory</name></param>
-            <param><type>VkDeviceSize</type> <name>dataOffset</name></param>
-            <param><type>VkDeviceSize</type> <name>dataSize</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" type="instance">
-            <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_BUFFER_GOOGLE"/>
-                <enum offset="2" extends="VkStructureType"                  name="VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE"/>
-                <type name="VkImportColorBufferGOOGLE"/>
-                <type name="VkImportBufferGOOGLE"/>
-                <type name="VkCreateBlobGOOGLE"/>
-                <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="vkGetLinearImageLayout2GOOGLE"/>
-                <command name="vkQueueFlushCommandsGOOGLE"/>
-                <command name="vkQueueCommitDescriptorSetUpdatesGOOGLE"/>
-                <command name="vkCollectDescriptorPoolIdsGOOGLE"/>
-                <command name="vkQueueSignalReleaseImageANDROIDAsyncGOOGLE"/>
-                <command name="vkQueueFlushCommandsFromAuxMemoryGOOGLE"/>
-                <command name="vkGetBlobGOOGLE"/>
-            </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/common/CMakeLists.txt b/common/CMakeLists.txt
deleted file mode 100644
index 09684e6..0000000
--- a/common/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-add_subdirectory(vulkan)
\ No newline at end of file
diff --git a/common/vulkan/Android.bp b/common/vulkan/Android.bp
deleted file mode 100644
index 6267636..0000000
--- a/common/vulkan/Android.bp
+++ /dev/null
@@ -1,9 +0,0 @@
-cc_library_headers {
-    name: "gfxstream_vulkan_headers",
-    export_include_dirs: ["include"],
-    host_supported: true,
-    apex_available: [
-        "//apex_available:platform",
-        "com.android.virt",
-    ],
-}
diff --git a/common/vulkan/CMakeLists.txt b/common/vulkan/CMakeLists.txt
deleted file mode 100644
index d1a78ed..0000000
--- a/common/vulkan/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-add_library(gfxstream_vulkan_headers INTERFACE)
-target_include_directories(
-    gfxstream_vulkan_headers
-    INTERFACE include)
-android_license(TARGET gfxstream_vulkan_headers LICENSE Apache-2.0)
diff --git a/common/vulkan/include/vk_video/vulkan_video_codec_h264std.h b/common/vulkan/include/vk_video/vulkan_video_codec_h264std.h
deleted file mode 100644
index 3338fe1..0000000
--- a/common/vulkan/include/vk_video/vulkan_video_codec_h264std.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
-** 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/common/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h b/common/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
deleted file mode 100644
index cb0d1df..0000000
--- a/common/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-** 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/common/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h b/common/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
deleted file mode 100644
index f3a0d3a..0000000
--- a/common/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-** 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/common/vulkan/include/vk_video/vulkan_video_codec_h265std.h b/common/vulkan/include/vk_video/vulkan_video_codec_h265std.h
deleted file mode 100644
index 179c6b7..0000000
--- a/common/vulkan/include/vk_video/vulkan_video_codec_h265std.h
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
-** 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/common/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h b/common/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
deleted file mode 100644
index a1efa05..0000000
--- a/common/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-** 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/common/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h b/common/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h
deleted file mode 100644
index ffffef2..0000000
--- a/common/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-** 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/common/vulkan/include/vk_video/vulkan_video_codecs_common.h b/common/vulkan/include/vk_video/vulkan_video_codecs_common.h
deleted file mode 100644
index 8cc227a..0000000
--- a/common/vulkan/include/vk_video/vulkan_video_codecs_common.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-** 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/common/vulkan/include/vulkan/vk_platform.h b/common/vulkan/include/vulkan/vk_platform.h
deleted file mode 100644
index 18b913a..0000000
--- a/common/vulkan/include/vulkan/vk_platform.h
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// 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/common/vulkan/include/vulkan/vulkan.h b/common/vulkan/include/vulkan/vulkan.h
deleted file mode 100644
index 3f7cdba..0000000
--- a/common/vulkan/include/vulkan/vulkan.h
+++ /dev/null
@@ -1,92 +0,0 @@
-#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/common/vulkan/include/vulkan/vulkan_android.h b/common/vulkan/include/vulkan/vulkan_android.h
deleted file mode 100644
index a8a8306..0000000
--- a/common/vulkan/include/vulkan/vulkan_android.h
+++ /dev/null
@@ -1,125 +0,0 @@
-#ifndef VULKAN_ANDROID_H_
-#define VULKAN_ANDROID_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_KHR_android_surface 1
-struct ANativeWindow;
-#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
-#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
-typedef VkFlags VkAndroidSurfaceCreateFlagsKHR;
-typedef struct VkAndroidSurfaceCreateInfoKHR {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkAndroidSurfaceCreateFlagsKHR    flags;
-    struct ANativeWindow*             window;
-} VkAndroidSurfaceCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
-    VkInstance                                  instance,
-    const VkAndroidSurfaceCreateInfoKHR*        pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-
-#define VK_ANDROID_external_memory_android_hardware_buffer 1
-struct AHardwareBuffer;
-#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 4
-#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer"
-typedef struct VkAndroidHardwareBufferUsageANDROID {
-    VkStructureType    sType;
-    void*              pNext;
-    uint64_t           androidHardwareBufferUsage;
-} VkAndroidHardwareBufferUsageANDROID;
-
-typedef struct VkAndroidHardwareBufferPropertiesANDROID {
-    VkStructureType    sType;
-    void*              pNext;
-    VkDeviceSize       allocationSize;
-    uint32_t           memoryTypeBits;
-} VkAndroidHardwareBufferPropertiesANDROID;
-
-typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID {
-    VkStructureType                  sType;
-    void*                            pNext;
-    VkFormat                         format;
-    uint64_t                         externalFormat;
-    VkFormatFeatureFlags             formatFeatures;
-    VkComponentMapping               samplerYcbcrConversionComponents;
-    VkSamplerYcbcrModelConversion    suggestedYcbcrModel;
-    VkSamplerYcbcrRange              suggestedYcbcrRange;
-    VkChromaLocation                 suggestedXChromaOffset;
-    VkChromaLocation                 suggestedYChromaOffset;
-} VkAndroidHardwareBufferFormatPropertiesANDROID;
-
-typedef struct VkImportAndroidHardwareBufferInfoANDROID {
-    VkStructureType            sType;
-    const void*                pNext;
-    struct AHardwareBuffer*    buffer;
-} VkImportAndroidHardwareBufferInfoANDROID;
-
-typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkDeviceMemory     memory;
-} VkMemoryGetAndroidHardwareBufferInfoANDROID;
-
-typedef struct VkExternalFormatANDROID {
-    VkStructureType    sType;
-    void*              pNext;
-    uint64_t           externalFormat;
-} VkExternalFormatANDROID;
-
-typedef struct VkAndroidHardwareBufferFormatProperties2ANDROID {
-    VkStructureType                  sType;
-    void*                            pNext;
-    VkFormat                         format;
-    uint64_t                         externalFormat;
-    VkFormatFeatureFlags2KHR         formatFeatures;
-    VkComponentMapping               samplerYcbcrConversionComponents;
-    VkSamplerYcbcrModelConversion    suggestedYcbcrModel;
-    VkSamplerYcbcrRange              suggestedYcbcrRange;
-    VkChromaLocation                 suggestedXChromaOffset;
-    VkChromaLocation                 suggestedYChromaOffset;
-} VkAndroidHardwareBufferFormatProperties2ANDROID;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
-    VkDevice                                    device,
-    const struct AHardwareBuffer*               buffer,
-    VkAndroidHardwareBufferPropertiesANDROID*   pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
-    VkDevice                                    device,
-    const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
-    struct AHardwareBuffer**                    pBuffer);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_beta.h b/common/vulkan/include/vulkan/vulkan_beta.h
deleted file mode 100644
index d2f34d1..0000000
--- a/common/vulkan/include/vulkan/vulkan_beta.h
+++ /dev/null
@@ -1,833 +0,0 @@
-#ifndef VULKAN_BETA_H_
-#define VULKAN_BETA_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_KHR_video_queue 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR)
-#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION   2
-#define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue"
-
-typedef enum VkQueryResultStatusKHR {
-    VK_QUERY_RESULT_STATUS_ERROR_KHR = -1,
-    VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0,
-    VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1,
-    VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkQueryResultStatusKHR;
-
-typedef enum VkVideoCodecOperationFlagBitsKHR {
-    VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR = 0,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT = 0x00010000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT = 0x00020000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT = 0x00000001,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT = 0x00000002,
-#endif
-    VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoCodecOperationFlagBitsKHR;
-typedef VkFlags VkVideoCodecOperationFlagsKHR;
-
-typedef enum VkVideoChromaSubsamplingFlagBitsKHR {
-    VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR = 0,
-    VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001,
-    VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002,
-    VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004,
-    VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008,
-    VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoChromaSubsamplingFlagBitsKHR;
-typedef VkFlags VkVideoChromaSubsamplingFlagsKHR;
-
-typedef enum VkVideoComponentBitDepthFlagBitsKHR {
-    VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0,
-    VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001,
-    VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004,
-    VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010,
-    VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoComponentBitDepthFlagBitsKHR;
-typedef VkFlags VkVideoComponentBitDepthFlagsKHR;
-
-typedef enum VkVideoCapabilityFlagBitsKHR {
-    VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
-    VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002,
-    VK_VIDEO_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoCapabilityFlagBitsKHR;
-typedef VkFlags VkVideoCapabilityFlagsKHR;
-
-typedef enum VkVideoSessionCreateFlagBitsKHR {
-    VK_VIDEO_SESSION_CREATE_DEFAULT_KHR = 0,
-    VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001,
-    VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoSessionCreateFlagBitsKHR;
-typedef VkFlags VkVideoSessionCreateFlagsKHR;
-typedef VkFlags VkVideoBeginCodingFlagsKHR;
-typedef VkFlags VkVideoEndCodingFlagsKHR;
-
-typedef enum VkVideoCodingControlFlagBitsKHR {
-    VK_VIDEO_CODING_CONTROL_DEFAULT_KHR = 0,
-    VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001,
-    VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoCodingControlFlagBitsKHR;
-typedef VkFlags VkVideoCodingControlFlagsKHR;
-
-typedef enum VkVideoCodingQualityPresetFlagBitsKHR {
-    VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR = 0x00000001,
-    VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR = 0x00000002,
-    VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR = 0x00000004,
-    VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoCodingQualityPresetFlagBitsKHR;
-typedef VkFlags VkVideoCodingQualityPresetFlagsKHR;
-typedef struct VkVideoQueueFamilyProperties2KHR {
-    VkStructureType                  sType;
-    void*                            pNext;
-    VkVideoCodecOperationFlagsKHR    videoCodecOperations;
-} VkVideoQueueFamilyProperties2KHR;
-
-typedef struct VkVideoProfileKHR {
-    VkStructureType                     sType;
-    void*                               pNext;
-    VkVideoCodecOperationFlagBitsKHR    videoCodecOperation;
-    VkVideoChromaSubsamplingFlagsKHR    chromaSubsampling;
-    VkVideoComponentBitDepthFlagsKHR    lumaBitDepth;
-    VkVideoComponentBitDepthFlagsKHR    chromaBitDepth;
-} VkVideoProfileKHR;
-
-typedef struct VkVideoProfilesKHR {
-    VkStructureType             sType;
-    void*                       pNext;
-    uint32_t                    profileCount;
-    const VkVideoProfileKHR*    pProfiles;
-} VkVideoProfilesKHR;
-
-typedef struct VkVideoCapabilitiesKHR {
-    VkStructureType              sType;
-    void*                        pNext;
-    VkVideoCapabilityFlagsKHR    capabilityFlags;
-    VkDeviceSize                 minBitstreamBufferOffsetAlignment;
-    VkDeviceSize                 minBitstreamBufferSizeAlignment;
-    VkExtent2D                   videoPictureExtentGranularity;
-    VkExtent2D                   minExtent;
-    VkExtent2D                   maxExtent;
-    uint32_t                     maxReferencePicturesSlotsCount;
-    uint32_t                     maxReferencePicturesActiveCount;
-} VkVideoCapabilitiesKHR;
-
-typedef struct VkPhysicalDeviceVideoFormatInfoKHR {
-    VkStructureType              sType;
-    void*                        pNext;
-    VkImageUsageFlags            imageUsage;
-    const VkVideoProfilesKHR*    pVideoProfiles;
-} VkPhysicalDeviceVideoFormatInfoKHR;
-
-typedef struct VkVideoFormatPropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkFormat           format;
-} VkVideoFormatPropertiesKHR;
-
-typedef struct VkVideoPictureResourceKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkOffset2D         codedOffset;
-    VkExtent2D         codedExtent;
-    uint32_t           baseArrayLayer;
-    VkImageView        imageViewBinding;
-} VkVideoPictureResourceKHR;
-
-typedef struct VkVideoReferenceSlotKHR {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    int8_t                              slotIndex;
-    const VkVideoPictureResourceKHR*    pPictureResource;
-} VkVideoReferenceSlotKHR;
-
-typedef struct VkVideoGetMemoryPropertiesKHR {
-    VkStructureType           sType;
-    const void*               pNext;
-    uint32_t                  memoryBindIndex;
-    VkMemoryRequirements2*    pMemoryRequirements;
-} VkVideoGetMemoryPropertiesKHR;
-
-typedef struct VkVideoBindMemoryKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           memoryBindIndex;
-    VkDeviceMemory     memory;
-    VkDeviceSize       memoryOffset;
-    VkDeviceSize       memorySize;
-} VkVideoBindMemoryKHR;
-
-typedef struct VkVideoSessionCreateInfoKHR {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    uint32_t                        queueFamilyIndex;
-    VkVideoSessionCreateFlagsKHR    flags;
-    const VkVideoProfileKHR*        pVideoProfile;
-    VkFormat                        pictureFormat;
-    VkExtent2D                      maxCodedExtent;
-    VkFormat                        referencePicturesFormat;
-    uint32_t                        maxReferencePicturesSlotsCount;
-    uint32_t                        maxReferencePicturesActiveCount;
-} VkVideoSessionCreateInfoKHR;
-
-typedef struct VkVideoSessionParametersCreateInfoKHR {
-    VkStructureType                sType;
-    const void*                    pNext;
-    VkVideoSessionParametersKHR    videoSessionParametersTemplate;
-    VkVideoSessionKHR              videoSession;
-} VkVideoSessionParametersCreateInfoKHR;
-
-typedef struct VkVideoSessionParametersUpdateInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           updateSequenceCount;
-} VkVideoSessionParametersUpdateInfoKHR;
-
-typedef struct VkVideoBeginCodingInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkVideoBeginCodingFlagsKHR            flags;
-    VkVideoCodingQualityPresetFlagsKHR    codecQualityPreset;
-    VkVideoSessionKHR                     videoSession;
-    VkVideoSessionParametersKHR           videoSessionParameters;
-    uint32_t                              referenceSlotCount;
-    const VkVideoReferenceSlotKHR*        pReferenceSlots;
-} VkVideoBeginCodingInfoKHR;
-
-typedef struct VkVideoEndCodingInfoKHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkVideoEndCodingFlagsKHR    flags;
-} VkVideoEndCodingInfoKHR;
-
-typedef struct VkVideoCodingControlInfoKHR {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkVideoCodingControlFlagsKHR    flags;
-} VkVideoCodingControlInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession);
-typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements);
-typedef VkResult (VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters);
-typedef VkResult (VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
-typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkVideoProfileKHR*                    pVideoProfile,
-    VkVideoCapabilitiesKHR*                     pCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceVideoFormatInfoKHR*   pVideoFormatInfo,
-    uint32_t*                                   pVideoFormatPropertyCount,
-    VkVideoFormatPropertiesKHR*                 pVideoFormatProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR(
-    VkDevice                                    device,
-    const VkVideoSessionCreateInfoKHR*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkVideoSessionKHR*                          pVideoSession);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR(
-    VkDevice                                    device,
-    VkVideoSessionKHR                           videoSession,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR(
-    VkDevice                                    device,
-    VkVideoSessionKHR                           videoSession,
-    uint32_t*                                   pVideoSessionMemoryRequirementsCount,
-    VkVideoGetMemoryPropertiesKHR*              pVideoSessionMemoryRequirements);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR(
-    VkDevice                                    device,
-    VkVideoSessionKHR                           videoSession,
-    uint32_t                                    videoSessionBindMemoryCount,
-    const VkVideoBindMemoryKHR*                 pVideoSessionBindMemories);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR(
-    VkDevice                                    device,
-    const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkVideoSessionParametersKHR*                pVideoSessionParameters);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR(
-    VkDevice                                    device,
-    VkVideoSessionParametersKHR                 videoSessionParameters,
-    const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR(
-    VkDevice                                    device,
-    VkVideoSessionParametersKHR                 videoSessionParameters,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkVideoBeginCodingInfoKHR*            pBeginInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkVideoEndCodingInfoKHR*              pEndCodingInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkVideoCodingControlInfoKHR*          pCodingControlInfo);
-#endif
-
-
-#define VK_KHR_video_decode_queue 1
-#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 2
-#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue"
-
-typedef enum VkVideoDecodeFlagBitsKHR {
-    VK_VIDEO_DECODE_DEFAULT_KHR = 0,
-    VK_VIDEO_DECODE_RESERVED_0_BIT_KHR = 0x00000001,
-    VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoDecodeFlagBitsKHR;
-typedef VkFlags VkVideoDecodeFlagsKHR;
-typedef struct VkVideoDecodeInfoKHR {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkVideoDecodeFlagsKHR             flags;
-    VkOffset2D                        codedOffset;
-    VkExtent2D                        codedExtent;
-    VkBuffer                          srcBuffer;
-    VkDeviceSize                      srcBufferOffset;
-    VkDeviceSize                      srcBufferRange;
-    VkVideoPictureResourceKHR         dstPictureResource;
-    const VkVideoReferenceSlotKHR*    pSetupReferenceSlot;
-    uint32_t                          referenceSlotCount;
-    const VkVideoReferenceSlotKHR*    pReferenceSlots;
-} VkVideoDecodeInfoKHR;
-
-typedef void (VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkVideoDecodeInfoKHR*                 pFrameInfo);
-#endif
-
-
-#define VK_KHR_portability_subset 1
-#define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1
-#define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset"
-typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           constantAlphaColorBlendFactors;
-    VkBool32           events;
-    VkBool32           imageViewFormatReinterpretation;
-    VkBool32           imageViewFormatSwizzle;
-    VkBool32           imageView2DOn3DImage;
-    VkBool32           multisampleArrayImage;
-    VkBool32           mutableComparisonSamplers;
-    VkBool32           pointPolygons;
-    VkBool32           samplerMipLodBias;
-    VkBool32           separateStencilMaskRef;
-    VkBool32           shaderSampleRateInterpolationFunctions;
-    VkBool32           tessellationIsolines;
-    VkBool32           tessellationPointMode;
-    VkBool32           triangleFans;
-    VkBool32           vertexAttributeAccessBeyondStride;
-} VkPhysicalDevicePortabilitySubsetFeaturesKHR;
-
-typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           minVertexInputBindingStrideAlignment;
-} VkPhysicalDevicePortabilitySubsetPropertiesKHR;
-
-
-
-#define VK_KHR_video_encode_queue 1
-#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 3
-#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"
-
-typedef enum VkVideoEncodeFlagBitsKHR {
-    VK_VIDEO_ENCODE_DEFAULT_KHR = 0,
-    VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR = 0x00000001,
-    VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoEncodeFlagBitsKHR;
-typedef VkFlags VkVideoEncodeFlagsKHR;
-
-typedef enum VkVideoEncodeRateControlFlagBitsKHR {
-    VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR = 0,
-    VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR = 0x00000001,
-    VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoEncodeRateControlFlagBitsKHR;
-typedef VkFlags VkVideoEncodeRateControlFlagsKHR;
-
-typedef enum VkVideoEncodeRateControlModeFlagBitsKHR {
-    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR = 0,
-    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 1,
-    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 2,
-    VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkVideoEncodeRateControlModeFlagBitsKHR;
-typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR;
-typedef struct VkVideoEncodeInfoKHR {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkVideoEncodeFlagsKHR             flags;
-    uint32_t                          qualityLevel;
-    VkExtent2D                        codedExtent;
-    VkBuffer                          dstBitstreamBuffer;
-    VkDeviceSize                      dstBitstreamBufferOffset;
-    VkDeviceSize                      dstBitstreamBufferMaxRange;
-    VkVideoPictureResourceKHR         srcPictureResource;
-    const VkVideoReferenceSlotKHR*    pSetupReferenceSlot;
-    uint32_t                          referenceSlotCount;
-    const VkVideoReferenceSlotKHR*    pReferenceSlots;
-} VkVideoEncodeInfoKHR;
-
-typedef struct VkVideoEncodeRateControlInfoKHR {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    VkVideoEncodeRateControlFlagsKHR           flags;
-    VkVideoEncodeRateControlModeFlagBitsKHR    rateControlMode;
-    uint32_t                                   averageBitrate;
-    uint16_t                                   peakToAverageBitrateRatio;
-    uint16_t                                   frameRateNumerator;
-    uint16_t                                   frameRateDenominator;
-    uint32_t                                   virtualBufferSizeInMs;
-} VkVideoEncodeRateControlInfoKHR;
-
-typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkVideoEncodeInfoKHR*                 pEncodeInfo);
-#endif
-
-
-#define VK_EXT_video_encode_h264 1
-#include "vk_video/vulkan_video_codec_h264std.h"
-#include "vk_video/vulkan_video_codec_h264std_encode.h"
-#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 2
-#define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"
-
-typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT {
-    VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00000001,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00000002,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT = 0x00000004,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00000008,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000010,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000020,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00000040,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00000080,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00000100,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00000200,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT = 0x00000400,
-    VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkVideoEncodeH264CapabilityFlagBitsEXT;
-typedef VkFlags VkVideoEncodeH264CapabilityFlagsEXT;
-
-typedef enum VkVideoEncodeH264InputModeFlagBitsEXT {
-    VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
-    VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT = 0x00000002,
-    VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
-    VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkVideoEncodeH264InputModeFlagBitsEXT;
-typedef VkFlags VkVideoEncodeH264InputModeFlagsEXT;
-
-typedef enum VkVideoEncodeH264OutputModeFlagBitsEXT {
-    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
-    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002,
-    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
-    VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkVideoEncodeH264OutputModeFlagBitsEXT;
-typedef VkFlags VkVideoEncodeH264OutputModeFlagsEXT;
-
-typedef enum VkVideoEncodeH264CreateFlagBitsEXT {
-    VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT = 0,
-    VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT = 0x00000001,
-    VK_VIDEO_ENCODE_H264_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkVideoEncodeH264CreateFlagBitsEXT;
-typedef VkFlags VkVideoEncodeH264CreateFlagsEXT;
-typedef struct VkVideoEncodeH264CapabilitiesEXT {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    VkVideoEncodeH264CapabilityFlagsEXT    flags;
-    VkVideoEncodeH264InputModeFlagsEXT     inputModeFlags;
-    VkVideoEncodeH264OutputModeFlagsEXT    outputModeFlags;
-    VkExtent2D                             minPictureSizeInMbs;
-    VkExtent2D                             maxPictureSizeInMbs;
-    VkExtent2D                             inputImageDataAlignment;
-    uint8_t                                maxNumL0ReferenceForP;
-    uint8_t                                maxNumL0ReferenceForB;
-    uint8_t                                maxNumL1Reference;
-    uint8_t                                qualityLevelCount;
-    VkExtensionProperties                  stdExtensionVersion;
-} VkVideoEncodeH264CapabilitiesEXT;
-
-typedef struct VkVideoEncodeH264SessionCreateInfoEXT {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkVideoEncodeH264CreateFlagsEXT    flags;
-    VkExtent2D                         maxPictureSizeInMbs;
-    const VkExtensionProperties*       pStdExtensionVersion;
-} VkVideoEncodeH264SessionCreateInfoEXT;
-
-typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    uint32_t                                   spsStdCount;
-    const StdVideoH264SequenceParameterSet*    pSpsStd;
-    uint32_t                                   ppsStdCount;
-    const StdVideoH264PictureParameterSet*     pPpsStd;
-} VkVideoEncodeH264SessionParametersAddInfoEXT;
-
-typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT {
-    VkStructureType                                        sType;
-    const void*                                            pNext;
-    uint32_t                                               maxSpsStdCount;
-    uint32_t                                               maxPpsStdCount;
-    const VkVideoEncodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
-} VkVideoEncodeH264SessionParametersCreateInfoEXT;
-
-typedef struct VkVideoEncodeH264DpbSlotInfoEXT {
-    VkStructureType                         sType;
-    const void*                             pNext;
-    int8_t                                  slotIndex;
-    const StdVideoEncodeH264PictureInfo*    pStdPictureInfo;
-} VkVideoEncodeH264DpbSlotInfoEXT;
-
-typedef struct VkVideoEncodeH264NaluSliceEXT {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    const StdVideoEncodeH264SliceHeader*      pSliceHeaderStd;
-    uint32_t                                  mbCount;
-    uint8_t                                   refFinalList0EntryCount;
-    const VkVideoEncodeH264DpbSlotInfoEXT*    pRefFinalList0Entries;
-    uint8_t                                   refFinalList1EntryCount;
-    const VkVideoEncodeH264DpbSlotInfoEXT*    pRefFinalList1Entries;
-    uint32_t                                  precedingNaluBytes;
-    uint8_t                                   minQp;
-    uint8_t                                   maxQp;
-} VkVideoEncodeH264NaluSliceEXT;
-
-typedef struct VkVideoEncodeH264VclFrameInfoEXT {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    uint8_t                                   refDefaultFinalList0EntryCount;
-    const VkVideoEncodeH264DpbSlotInfoEXT*    pRefDefaultFinalList0Entries;
-    uint8_t                                   refDefaultFinalList1EntryCount;
-    const VkVideoEncodeH264DpbSlotInfoEXT*    pRefDefaultFinalList1Entries;
-    uint32_t                                  naluSliceEntryCount;
-    const VkVideoEncodeH264NaluSliceEXT*      pNaluSliceEntries;
-    const VkVideoEncodeH264DpbSlotInfoEXT*    pCurrentPictureInfo;
-} VkVideoEncodeH264VclFrameInfoEXT;
-
-typedef struct VkVideoEncodeH264EmitPictureParametersEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint8_t            spsId;
-    VkBool32           emitSpsEnable;
-    uint32_t           ppsIdEntryCount;
-    const uint8_t*     ppsIdEntries;
-} VkVideoEncodeH264EmitPictureParametersEXT;
-
-typedef struct VkVideoEncodeH264ProfileEXT {
-    VkStructureType           sType;
-    const void*               pNext;
-    StdVideoH264ProfileIdc    stdProfileIdc;
-} VkVideoEncodeH264ProfileEXT;
-
-
-
-#define VK_EXT_video_encode_h265 1
-#include "vk_video/vulkan_video_codec_h265std.h"
-#include "vk_video/vulkan_video_codec_h265std_encode.h"
-#define VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION 2
-#define VK_EXT_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_EXT_video_encode_h265"
-typedef VkFlags VkVideoEncodeH265CapabilityFlagsEXT;
-
-typedef enum VkVideoEncodeH265InputModeFlagBitsEXT {
-    VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
-    VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT = 0x00000002,
-    VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
-    VK_VIDEO_ENCODE_H265_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkVideoEncodeH265InputModeFlagBitsEXT;
-typedef VkFlags VkVideoEncodeH265InputModeFlagsEXT;
-
-typedef enum VkVideoEncodeH265OutputModeFlagBitsEXT {
-    VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
-    VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002,
-    VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
-    VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkVideoEncodeH265OutputModeFlagBitsEXT;
-typedef VkFlags VkVideoEncodeH265OutputModeFlagsEXT;
-typedef VkFlags VkVideoEncodeH265CreateFlagsEXT;
-
-typedef enum VkVideoEncodeH265CtbSizeFlagBitsEXT {
-    VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT = 0x00000001,
-    VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT = 0x00000002,
-    VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT = 0x00000004,
-    VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT = 0x00000008,
-    VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkVideoEncodeH265CtbSizeFlagBitsEXT;
-typedef VkFlags VkVideoEncodeH265CtbSizeFlagsEXT;
-typedef struct VkVideoEncodeH265CapabilitiesEXT {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    VkVideoEncodeH265CapabilityFlagsEXT    flags;
-    VkVideoEncodeH265InputModeFlagsEXT     inputModeFlags;
-    VkVideoEncodeH265OutputModeFlagsEXT    outputModeFlags;
-    VkVideoEncodeH265CtbSizeFlagsEXT       ctbSizes;
-    VkExtent2D                             inputImageDataAlignment;
-    uint8_t                                maxNumL0ReferenceForP;
-    uint8_t                                maxNumL0ReferenceForB;
-    uint8_t                                maxNumL1Reference;
-    uint8_t                                maxNumSubLayers;
-    uint8_t                                qualityLevelCount;
-    VkExtensionProperties                  stdExtensionVersion;
-} VkVideoEncodeH265CapabilitiesEXT;
-
-typedef struct VkVideoEncodeH265SessionCreateInfoEXT {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkVideoEncodeH265CreateFlagsEXT    flags;
-    const VkExtensionProperties*       pStdExtensionVersion;
-} VkVideoEncodeH265SessionCreateInfoEXT;
-
-typedef struct VkVideoEncodeH265SessionParametersAddInfoEXT {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    uint32_t                                   vpsStdCount;
-    const StdVideoH265VideoParameterSet*       pVpsStd;
-    uint32_t                                   spsStdCount;
-    const StdVideoH265SequenceParameterSet*    pSpsStd;
-    uint32_t                                   ppsStdCount;
-    const StdVideoH265PictureParameterSet*     pPpsStd;
-} VkVideoEncodeH265SessionParametersAddInfoEXT;
-
-typedef struct VkVideoEncodeH265SessionParametersCreateInfoEXT {
-    VkStructureType                                        sType;
-    const void*                                            pNext;
-    uint32_t                                               maxVpsStdCount;
-    uint32_t                                               maxSpsStdCount;
-    uint32_t                                               maxPpsStdCount;
-    const VkVideoEncodeH265SessionParametersAddInfoEXT*    pParametersAddInfo;
-} VkVideoEncodeH265SessionParametersCreateInfoEXT;
-
-typedef struct VkVideoEncodeH265DpbSlotInfoEXT {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    int8_t                                    slotIndex;
-    const StdVideoEncodeH265ReferenceInfo*    pStdReferenceInfo;
-} VkVideoEncodeH265DpbSlotInfoEXT;
-
-typedef struct VkVideoEncodeH265ReferenceListsEXT {
-    VkStructureType                                    sType;
-    const void*                                        pNext;
-    uint8_t                                            referenceList0EntryCount;
-    const VkVideoEncodeH265DpbSlotInfoEXT*             pReferenceList0Entries;
-    uint8_t                                            referenceList1EntryCount;
-    const VkVideoEncodeH265DpbSlotInfoEXT*             pReferenceList1Entries;
-    const StdVideoEncodeH265ReferenceModifications*    pReferenceModifications;
-} VkVideoEncodeH265ReferenceListsEXT;
-
-typedef struct VkVideoEncodeH265NaluSliceEXT {
-    VkStructureType                              sType;
-    const void*                                  pNext;
-    uint32_t                                     ctbCount;
-    const VkVideoEncodeH265ReferenceListsEXT*    pReferenceFinalLists;
-    const StdVideoEncodeH265SliceHeader*         pSliceHeaderStd;
-} VkVideoEncodeH265NaluSliceEXT;
-
-typedef struct VkVideoEncodeH265VclFrameInfoEXT {
-    VkStructureType                              sType;
-    const void*                                  pNext;
-    const VkVideoEncodeH265ReferenceListsEXT*    pReferenceFinalLists;
-    uint32_t                                     naluSliceEntryCount;
-    const VkVideoEncodeH265NaluSliceEXT*         pNaluSliceEntries;
-    const StdVideoEncodeH265PictureInfo*         pCurrentPictureInfo;
-} VkVideoEncodeH265VclFrameInfoEXT;
-
-typedef struct VkVideoEncodeH265EmitPictureParametersEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint8_t            vpsId;
-    uint8_t            spsId;
-    VkBool32           emitVpsEnable;
-    VkBool32           emitSpsEnable;
-    uint32_t           ppsIdEntryCount;
-    const uint8_t*     ppsIdEntries;
-} VkVideoEncodeH265EmitPictureParametersEXT;
-
-typedef struct VkVideoEncodeH265ProfileEXT {
-    VkStructureType           sType;
-    const void*               pNext;
-    StdVideoH265ProfileIdc    stdProfileIdc;
-} VkVideoEncodeH265ProfileEXT;
-
-
-
-#define VK_EXT_video_decode_h264 1
-#include "vk_video/vulkan_video_codec_h264std_decode.h"
-#define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 3
-#define VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME "VK_EXT_video_decode_h264"
-
-typedef enum VkVideoDecodeH264PictureLayoutFlagBitsEXT {
-    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_EXT = 0,
-    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_EXT = 0x00000001,
-    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_EXT = 0x00000002,
-    VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkVideoDecodeH264PictureLayoutFlagBitsEXT;
-typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsEXT;
-typedef VkFlags VkVideoDecodeH264CreateFlagsEXT;
-typedef struct VkVideoDecodeH264ProfileEXT {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    StdVideoH264ProfileIdc                    stdProfileIdc;
-    VkVideoDecodeH264PictureLayoutFlagsEXT    pictureLayout;
-} VkVideoDecodeH264ProfileEXT;
-
-typedef struct VkVideoDecodeH264CapabilitiesEXT {
-    VkStructureType          sType;
-    void*                    pNext;
-    uint32_t                 maxLevel;
-    VkOffset2D               fieldOffsetGranularity;
-    VkExtensionProperties    stdExtensionVersion;
-} VkVideoDecodeH264CapabilitiesEXT;
-
-typedef struct VkVideoDecodeH264SessionCreateInfoEXT {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkVideoDecodeH264CreateFlagsEXT    flags;
-    const VkExtensionProperties*       pStdExtensionVersion;
-} VkVideoDecodeH264SessionCreateInfoEXT;
-
-typedef struct VkVideoDecodeH264SessionParametersAddInfoEXT {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    uint32_t                                   spsStdCount;
-    const StdVideoH264SequenceParameterSet*    pSpsStd;
-    uint32_t                                   ppsStdCount;
-    const StdVideoH264PictureParameterSet*     pPpsStd;
-} VkVideoDecodeH264SessionParametersAddInfoEXT;
-
-typedef struct VkVideoDecodeH264SessionParametersCreateInfoEXT {
-    VkStructureType                                        sType;
-    const void*                                            pNext;
-    uint32_t                                               maxSpsStdCount;
-    uint32_t                                               maxPpsStdCount;
-    const VkVideoDecodeH264SessionParametersAddInfoEXT*    pParametersAddInfo;
-} VkVideoDecodeH264SessionParametersCreateInfoEXT;
-
-typedef struct VkVideoDecodeH264PictureInfoEXT {
-    VkStructureType                         sType;
-    const void*                             pNext;
-    const StdVideoDecodeH264PictureInfo*    pStdPictureInfo;
-    uint32_t                                slicesCount;
-    const uint32_t*                         pSlicesDataOffsets;
-} VkVideoDecodeH264PictureInfoEXT;
-
-typedef struct VkVideoDecodeH264MvcEXT {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    const StdVideoDecodeH264Mvc*    pStdMvc;
-} VkVideoDecodeH264MvcEXT;
-
-typedef struct VkVideoDecodeH264DpbSlotInfoEXT {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    const StdVideoDecodeH264ReferenceInfo*    pStdReferenceInfo;
-} VkVideoDecodeH264DpbSlotInfoEXT;
-
-
-
-#define VK_EXT_video_decode_h265 1
-#include "vk_video/vulkan_video_codec_h265std_decode.h"
-#define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 1
-#define VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME "VK_EXT_video_decode_h265"
-typedef VkFlags VkVideoDecodeH265CreateFlagsEXT;
-typedef struct VkVideoDecodeH265ProfileEXT {
-    VkStructureType           sType;
-    const void*               pNext;
-    StdVideoH265ProfileIdc    stdProfileIdc;
-} VkVideoDecodeH265ProfileEXT;
-
-typedef struct VkVideoDecodeH265CapabilitiesEXT {
-    VkStructureType          sType;
-    void*                    pNext;
-    uint32_t                 maxLevel;
-    VkExtensionProperties    stdExtensionVersion;
-} VkVideoDecodeH265CapabilitiesEXT;
-
-typedef struct VkVideoDecodeH265SessionCreateInfoEXT {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkVideoDecodeH265CreateFlagsEXT    flags;
-    const VkExtensionProperties*       pStdExtensionVersion;
-} VkVideoDecodeH265SessionCreateInfoEXT;
-
-typedef struct VkVideoDecodeH265SessionParametersAddInfoEXT {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    uint32_t                                   spsStdCount;
-    const StdVideoH265SequenceParameterSet*    pSpsStd;
-    uint32_t                                   ppsStdCount;
-    const StdVideoH265PictureParameterSet*     pPpsStd;
-} VkVideoDecodeH265SessionParametersAddInfoEXT;
-
-typedef struct VkVideoDecodeH265SessionParametersCreateInfoEXT {
-    VkStructureType                                        sType;
-    const void*                                            pNext;
-    uint32_t                                               maxSpsStdCount;
-    uint32_t                                               maxPpsStdCount;
-    const VkVideoDecodeH265SessionParametersAddInfoEXT*    pParametersAddInfo;
-} VkVideoDecodeH265SessionParametersCreateInfoEXT;
-
-typedef struct VkVideoDecodeH265PictureInfoEXT {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    StdVideoDecodeH265PictureInfo*    pStdPictureInfo;
-    uint32_t                          slicesCount;
-    const uint32_t*                   pSlicesDataOffsets;
-} VkVideoDecodeH265PictureInfoEXT;
-
-typedef struct VkVideoDecodeH265DpbSlotInfoEXT {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    const StdVideoDecodeH265ReferenceInfo*    pStdReferenceInfo;
-} VkVideoDecodeH265DpbSlotInfoEXT;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_core.h b/common/vulkan/include/vulkan/vulkan_core.h
deleted file mode 100644
index 19e9ffe..0000000
--- a/common/vulkan/include/vulkan/vulkan_core.h
+++ /dev/null
@@ -1,13625 +0,0 @@
-#ifndef VULKAN_CORE_H_
-#define VULKAN_CORE_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_VERSION_1_0 1
-#include "vk_platform.h"
-
-#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
-
-
-#ifndef VK_USE_64_BIT_PTR_DEFINES
-    #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !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
-
-
-#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE
-    #if (VK_USE_64_BIT_PTR_DEFINES==1)
-        #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSVC_LANG) && (_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
-
-
-#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
-
-// DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead.
-#define VK_MAKE_VERSION(major, minor, patch) \
-    ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
-
-// 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 VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0
-
-#define VK_MAKE_API_VERSION(variant, major, minor, patch) \
-    ((((uint32_t)(variant)) << 29) | (((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
-
-// Vulkan 1.0 version number
-#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0
-
-// Version of this file
-#define VK_HEADER_VERSION 198
-
-// Complete version of this file
-#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 2, VK_HEADER_VERSION)
-
-// DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead.
-#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
-
-// DEPRECATED: This define is deprecated. VK_API_VERSION_MINOR should be used instead.
-#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU)
-
-// DEPRECATED: This define is deprecated. VK_API_VERSION_PATCH should be used instead.
-#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
-
-#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29)
-#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22) & 0x7FU)
-#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU)
-#define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
-typedef uint32_t VkBool32;
-typedef uint64_t VkDeviceAddress;
-typedef uint64_t VkDeviceSize;
-typedef uint32_t VkFlags;
-typedef uint32_t VkSampleMask;
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
-VK_DEFINE_HANDLE(VkInstance)
-VK_DEFINE_HANDLE(VkPhysicalDevice)
-VK_DEFINE_HANDLE(VkDevice)
-VK_DEFINE_HANDLE(VkQueue)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
-VK_DEFINE_HANDLE(VkCommandBuffer)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
-#define VK_UUID_SIZE                      16U
-#define VK_ATTACHMENT_UNUSED              (~0U)
-#define VK_FALSE                          0U
-#define VK_LOD_CLAMP_NONE                 1000.0F
-#define VK_QUEUE_FAMILY_IGNORED           (~0U)
-#define VK_REMAINING_ARRAY_LAYERS         (~0U)
-#define VK_REMAINING_MIP_LEVELS           (~0U)
-#define VK_SUBPASS_EXTERNAL               (~0U)
-#define VK_TRUE                           1U
-#define VK_WHOLE_SIZE                     (~0ULL)
-#define VK_MAX_MEMORY_TYPES               32U
-#define VK_MAX_MEMORY_HEAPS               16U
-#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256U
-#define VK_MAX_EXTENSION_NAME_SIZE        256U
-#define VK_MAX_DESCRIPTION_SIZE           256U
-
-typedef enum VkResult {
-    VK_SUCCESS = 0,
-    VK_NOT_READY = 1,
-    VK_TIMEOUT = 2,
-    VK_EVENT_SET = 3,
-    VK_EVENT_RESET = 4,
-    VK_INCOMPLETE = 5,
-    VK_ERROR_OUT_OF_HOST_MEMORY = -1,
-    VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
-    VK_ERROR_INITIALIZATION_FAILED = -3,
-    VK_ERROR_DEVICE_LOST = -4,
-    VK_ERROR_MEMORY_MAP_FAILED = -5,
-    VK_ERROR_LAYER_NOT_PRESENT = -6,
-    VK_ERROR_EXTENSION_NOT_PRESENT = -7,
-    VK_ERROR_FEATURE_NOT_PRESENT = -8,
-    VK_ERROR_INCOMPATIBLE_DRIVER = -9,
-    VK_ERROR_TOO_MANY_OBJECTS = -10,
-    VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
-    VK_ERROR_FRAGMENTED_POOL = -12,
-    VK_ERROR_UNKNOWN = -13,
-    VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000,
-    VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003,
-    VK_ERROR_FRAGMENTATION = -1000161000,
-    VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000,
-    VK_ERROR_SURFACE_LOST_KHR = -1000000000,
-    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
-    VK_SUBOPTIMAL_KHR = 1000001003,
-    VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
-    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
-    VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
-    VK_ERROR_INVALID_SHADER_NV = -1000012000,
-    VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000,
-    VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
-    VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000,
-    VK_THREAD_IDLE_KHR = 1000268000,
-    VK_THREAD_DONE_KHR = 1000268001,
-    VK_OPERATION_DEFERRED_KHR = 1000268002,
-    VK_OPERATION_NOT_DEFERRED_KHR = 1000268003,
-    VK_PIPELINE_COMPILE_REQUIRED_EXT = 1000297000,
-    VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY,
-    VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE,
-    VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION,
-    VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS,
-    VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS,
-    VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED_EXT,
-    VK_RESULT_MAX_ENUM = 0x7FFFFFFF
-} VkResult;
-
-typedef enum VkStructureType {
-    VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
-    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
-    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
-    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
-    VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
-    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
-    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
-    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
-    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
-    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
-    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
-    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
-    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
-    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
-    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
-    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
-    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
-    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
-    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
-    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
-    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
-    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
-    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
-    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
-    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
-    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
-    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
-    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
-    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
-    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
-    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
-    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
-    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
-    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
-    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
-    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
-    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
-    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000,
-    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000,
-    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000,
-    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000,
-    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001,
-    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006,
-    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013,
-    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001,
-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000,
-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001,
-    VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002,
-    VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003,
-    VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001,
-    VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002,
-    VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004,
-    VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006,
-    VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000,
-    VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001,
-    VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002,
-    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003,
-    VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = 1000120000,
-    VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002,
-    VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003,
-    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000,
-    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001,
-    VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002,
-    VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004,
-    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = 1000085000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000,
-    VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002,
-    VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004,
-    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000,
-    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001,
-    VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000,
-    VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001,
-    VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000,
-    VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000,
-    VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 1000063000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = 49,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = 50,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = 51,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = 52,
-    VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = 1000147000,
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = 1000109000,
-    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = 1000109001,
-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = 1000109002,
-    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = 1000109003,
-    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = 1000109004,
-    VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = 1000109005,
-    VK_STRUCTURE_TYPE_SUBPASS_END_INFO = 1000109006,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = 1000177000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = 1000196000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = 1000180000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = 1000082000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = 1000197000,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = 1000161000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = 1000161001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = 1000161002,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = 1000161003,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = 1000161004,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = 1000199000,
-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = 1000199001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = 1000221000,
-    VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = 1000246000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = 1000130000,
-    VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = 1000130001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = 1000211000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = 1000108000,
-    VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = 1000108001,
-    VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = 1000108002,
-    VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = 1000108003,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = 1000253000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = 1000175000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = 1000241000,
-    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = 1000241001,
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = 1000241002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = 1000261000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = 1000207000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = 1000207001,
-    VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = 1000207002,
-    VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = 1000207003,
-    VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = 1000207004,
-    VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = 1000207005,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = 1000257000,
-    VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = 1000244001,
-    VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = 1000257002,
-    VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = 1000257003,
-    VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = 1000257004,
-    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
-    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007,
-    VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008,
-    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009,
-    VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012,
-    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
-    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
-    VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
-    VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000,
-    VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
-    VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000,
-    VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000,
-    VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000,
-    VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID = 1000010000,
-    VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000,
-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000,
-    VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
-    VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
-    VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR = 1000023000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR = 1000023001,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR = 1000023002,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR = 1000023003,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR = 1000023004,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR = 1000023005,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000023006,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR = 1000023007,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR = 1000023008,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR = 1000023009,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR = 1000023010,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR = 1000023011,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR = 1000023012,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR = 1000023013,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR = 1000023014,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000,
-#endif
-    VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
-    VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
-    VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = 1000028000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = 1000028001,
-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002,
-    VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX = 1000029000,
-    VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX = 1000029001,
-    VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX = 1000029002,
-    VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000,
-    VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT = 1000038000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT = 1000038001,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000038002,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000038003,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT = 1000038004,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT = 1000038005,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT = 1000038006,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT = 1000038007,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT = 1000038008,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT = 1000039000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT = 1000039001,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000039002,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT = 1000039003,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT = 1000039004,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT = 1000039005,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_EXT = 1000039006,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT = 1000039007,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT = 1000039008,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT = 1000039009,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT = 1000040000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT = 1000040001,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT = 1000040002,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT = 1000040003,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT = 1000040004,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000040005,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000040006,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT = 1000040007,
-#endif
-    VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000,
-    VK_STRUCTURE_TYPE_RENDERING_INFO_KHR = 1000044000,
-    VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR = 1000044001,
-    VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR = 1000044002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR = 1000044003,
-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR = 1000044004,
-    VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000044006,
-    VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT = 1000044007,
-    VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD = 1000044008,
-    VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX = 1000044009,
-    VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000,
-    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000,
-    VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001,
-    VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000,
-    VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001,
-    VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
-    VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
-    VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = 1000066000,
-    VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001,
-    VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000,
-    VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001,
-    VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002,
-    VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003,
-    VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000,
-    VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001,
-    VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002,
-    VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000,
-    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000,
-    VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001,
-    VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002,
-    VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003,
-    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000,
-    VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000,
-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001,
-    VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002,
-    VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000,
-    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000,
-    VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000,
-    VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001,
-    VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002,
-    VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003,
-    VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000,
-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
-    VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000,
-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = 1000102000,
-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = 1000102001,
-    VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
-    VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000,
-    VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000,
-    VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001,
-    VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002,
-    VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000,
-    VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR = 1000116000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR = 1000116001,
-    VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR = 1000116002,
-    VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR = 1000116003,
-    VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR = 1000116004,
-    VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR = 1000116005,
-    VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR = 1000116006,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
-    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
-    VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
-    VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000,
-    VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001,
-    VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002,
-    VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003,
-    VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004,
-    VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000,
-    VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
-    VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000,
-    VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001,
-    VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002,
-    VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003,
-    VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004,
-    VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = 1000129000,
-    VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = 1000129001,
-    VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002,
-    VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003,
-    VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004,
-    VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005,
-    VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID = 1000129006,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = 1000138000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = 1000138001,
-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = 1000138002,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = 1000138003,
-    VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000,
-    VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001,
-    VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003,
-    VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001,
-    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002,
-    VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000,
-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = 1000150007,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = 1000150000,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = 1000150002,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = 1000150003,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = 1000150004,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = 1000150005,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = 1000150006,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR = 1000150009,
-    VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = 1000150010,
-    VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = 1000150011,
-    VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = 1000150012,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR = 1000150013,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR = 1000150014,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = 1000150017,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR = 1000150020,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR = 1000347000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR = 1000347001,
-    VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = 1000150015,
-    VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = 1000150016,
-    VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = 1000150018,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR = 1000348013,
-    VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = 1000154000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = 1000154001,
-    VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = 1000158000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = 1000158002,
-    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003,
-    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004,
-    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005,
-    VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT = 1000158006,
-    VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
-    VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = 1000163000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = 1000163001,
-#endif
-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002,
-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = 1000164005,
-    VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = 1000165000,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000165001,
-    VK_STRUCTURE_TYPE_GEOMETRY_NV = 1000165003,
-    VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = 1000165004,
-    VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV = 1000165005,
-    VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = 1000165006,
-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = 1000165007,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = 1000165008,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = 1000165009,
-    VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = 1000165011,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = 1000165012,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = 1000166000,
-    VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000,
-    VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001,
-    VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
-    VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
-    VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000,
-    VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000,
-    VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT = 1000187000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT = 1000187001,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000187002,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT = 1000187003,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT = 1000187004,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT = 1000187005,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT = 1000187006,
-#endif
-    VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
-    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002,
-    VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000,
-    VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000192000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = 1000201000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = 1000203000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = 1000204000,
-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = 1000205000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002,
-    VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000,
-    VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000,
-    VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL = 1000210000,
-    VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001,
-    VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002,
-    VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003,
-    VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004,
-    VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000,
-    VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000,
-    VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = 1000213001,
-    VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = 1000215000,
-    VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = 1000218000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = 1000218001,
-    VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = 1000218002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = 1000225000,
-    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = 1000225001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = 1000225002,
-    VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000226000,
-    VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR = 1000226001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR = 1000226002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR = 1000226003,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR = 1000226004,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = 1000227000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = 1000229000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = 1000238000,
-    VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = 1000238001,
-    VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = 1000239000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000,
-    VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = 1000245000,
-    VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR = 1000248000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000,
-    VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = 1000250000,
-    VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = 1000250001,
-    VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = 1000250002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = 1000251000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = 1000252000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT = 1000254000,
-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT = 1000254001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT = 1000254002,
-    VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = 1000255000,
-    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = 1000255002,
-    VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = 1000255001,
-    VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = 1000259000,
-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = 1000259001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = 1000259002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT = 1000260000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000,
-    VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001,
-    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002,
-    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003,
-    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004,
-    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT = 1000273000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = 1000277000,
-    VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = 1000277001,
-    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = 1000277002,
-    VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV = 1000277003,
-    VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV = 1000277004,
-    VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = 1000277005,
-    VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = 1000277006,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000,
-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = 1000280000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = 1000280001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000,
-    VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = 1000282001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = 1000284000,
-    VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT = 1000284001,
-    VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT = 1000284002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = 1000286000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = 1000286001,
-    VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = 1000287000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = 1000287001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = 1000287002,
-    VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = 1000290000,
-    VK_STRUCTURE_TYPE_PRESENT_ID_KHR = 1000294000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR = 1000294001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = 1000295000,
-    VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = 1000295001,
-    VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = 1000295002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = 1000297000,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001,
-#endif
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000,
-    VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001,
-    VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR = 1000314000,
-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR = 1000314001,
-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR = 1000314002,
-    VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR = 1000314003,
-    VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR = 1000314004,
-    VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR = 1000314005,
-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR = 1000314006,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR = 1000314007,
-    VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV = 1000314008,
-    VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV = 1000314009,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = 1000323000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = 1000325000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001,
-    VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV = 1000327000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV = 1000327001,
-    VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV = 1000327002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = 1000330000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001,
-    VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = 1000335000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000,
-    VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = 1000337000,
-    VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = 1000337001,
-    VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = 1000337002,
-    VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = 1000337003,
-    VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = 1000337004,
-    VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = 1000337005,
-    VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = 1000337006,
-    VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = 1000337007,
-    VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = 1000337008,
-    VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = 1000337009,
-    VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = 1000337010,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT = 1000344000,
-    VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = 1000351000,
-    VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = 1000351002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT = 1000352000,
-    VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001,
-    VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT = 1000353000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT = 1000356000,
-    VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = 1000360000,
-    VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000,
-    VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001,
-    VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002,
-    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000,
-    VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001,
-    VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA = 1000366000,
-    VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA = 1000366001,
-    VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA = 1000366002,
-    VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA = 1000366003,
-    VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA = 1000366004,
-    VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA = 1000366005,
-    VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA = 1000366006,
-    VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA = 1000366007,
-    VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA = 1000366008,
-    VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA = 1000366009,
-    VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI = 1000369000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI = 1000369001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI = 1000369002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI = 1000370000,
-    VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV = 1000371000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = 1000371001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000,
-    VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000,
-    VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = 1000388000,
-    VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = 1000388001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = 1000392000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT = 1000392001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT = 1000411000,
-    VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT = 1000411001,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT = 1000412000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = 1000413000,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR = 1000413001,
-    VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR = 1000413002,
-    VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR = 1000413003,
-    VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE = 1000385000,
-    VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE = 1000385001,
-    VK_STRUCTURE_TYPE_CREATE_BLOB_GOOGLE = 1000385002,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
-    VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
-    VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD,
-    VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
-    VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2,
-    VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,
-    VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2,
-    VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2,
-    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO,
-    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO,
-    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES,
-    VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,
-    VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO,
-    VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES,
-    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
-    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO,
-    VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES,
-    VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES,
-    VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO,
-    VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO,
-    VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO,
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
-    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,
-    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
-    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
-    VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO,
-    VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO,
-    VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES,
-    VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES,
-    VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO,
-    VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR,
-    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS,
-    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES,
-    VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
-    VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2,
-    VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
-    VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2,
-    VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO,
-    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,
-    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,
-    VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
-    VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
-    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES,
-    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO,
-    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES,
-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES,
-    VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO,
-    VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
-    VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO,
-    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES,
-    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT,
-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT,
-    VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO,
-    VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES,
-    VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO,
-    VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO,
-    VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO,
-    VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO,
-    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES,
-    VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkStructureType;
-
-typedef enum VkImageLayout {
-    VK_IMAGE_LAYOUT_UNDEFINED = 0,
-    VK_IMAGE_LAYOUT_GENERAL = 1,
-    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
-    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
-    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
-    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
-    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
-    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
-    VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
-    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000,
-    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001,
-    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = 1000241000,
-    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = 1000241001,
-    VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002,
-    VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003,
-    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR = 1000024002,
-#endif
-    VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
-    VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000,
-    VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = 1000164003,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002,
-#endif
-    VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR = 1000314000,
-    VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR = 1000314001,
-    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
-    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
-    VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR,
-    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
-    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
-    VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL,
-    VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
-    VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
-} VkImageLayout;
-
-typedef enum VkObjectType {
-    VK_OBJECT_TYPE_UNKNOWN = 0,
-    VK_OBJECT_TYPE_INSTANCE = 1,
-    VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
-    VK_OBJECT_TYPE_DEVICE = 3,
-    VK_OBJECT_TYPE_QUEUE = 4,
-    VK_OBJECT_TYPE_SEMAPHORE = 5,
-    VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
-    VK_OBJECT_TYPE_FENCE = 7,
-    VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
-    VK_OBJECT_TYPE_BUFFER = 9,
-    VK_OBJECT_TYPE_IMAGE = 10,
-    VK_OBJECT_TYPE_EVENT = 11,
-    VK_OBJECT_TYPE_QUERY_POOL = 12,
-    VK_OBJECT_TYPE_BUFFER_VIEW = 13,
-    VK_OBJECT_TYPE_IMAGE_VIEW = 14,
-    VK_OBJECT_TYPE_SHADER_MODULE = 15,
-    VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
-    VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
-    VK_OBJECT_TYPE_RENDER_PASS = 18,
-    VK_OBJECT_TYPE_PIPELINE = 19,
-    VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
-    VK_OBJECT_TYPE_SAMPLER = 21,
-    VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
-    VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
-    VK_OBJECT_TYPE_FRAMEBUFFER = 24,
-    VK_OBJECT_TYPE_COMMAND_POOL = 25,
-    VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000,
-    VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000,
-    VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
-    VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
-    VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
-    VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
-    VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_OBJECT_TYPE_VIDEO_SESSION_KHR = 1000023000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR = 1000023001,
-#endif
-    VK_OBJECT_TYPE_CU_MODULE_NVX = 1000029000,
-    VK_OBJECT_TYPE_CU_FUNCTION_NVX = 1000029001,
-    VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000,
-    VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000,
-    VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000,
-    VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000,
-    VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000,
-    VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000,
-    VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = 1000277000,
-    VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = 1000295000,
-    VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA = 1000366000,
-    VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
-    VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION,
-    VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkObjectType;
-
-typedef enum VkPipelineCacheHeaderVersion {
-    VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
-    VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineCacheHeaderVersion;
-
-typedef enum VkVendorId {
-    VK_VENDOR_ID_VIV = 0x10001,
-    VK_VENDOR_ID_VSI = 0x10002,
-    VK_VENDOR_ID_KAZAN = 0x10003,
-    VK_VENDOR_ID_CODEPLAY = 0x10004,
-    VK_VENDOR_ID_MESA = 0x10005,
-    VK_VENDOR_ID_POCL = 0x10006,
-    VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF
-} VkVendorId;
-
-typedef enum VkSystemAllocationScope {
-    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
-    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
-    VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
-    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
-    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
-    VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
-} VkSystemAllocationScope;
-
-typedef enum VkInternalAllocationType {
-    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
-    VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkInternalAllocationType;
-
-typedef enum VkFormat {
-    VK_FORMAT_UNDEFINED = 0,
-    VK_FORMAT_R4G4_UNORM_PACK8 = 1,
-    VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
-    VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
-    VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
-    VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
-    VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
-    VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
-    VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
-    VK_FORMAT_R8_UNORM = 9,
-    VK_FORMAT_R8_SNORM = 10,
-    VK_FORMAT_R8_USCALED = 11,
-    VK_FORMAT_R8_SSCALED = 12,
-    VK_FORMAT_R8_UINT = 13,
-    VK_FORMAT_R8_SINT = 14,
-    VK_FORMAT_R8_SRGB = 15,
-    VK_FORMAT_R8G8_UNORM = 16,
-    VK_FORMAT_R8G8_SNORM = 17,
-    VK_FORMAT_R8G8_USCALED = 18,
-    VK_FORMAT_R8G8_SSCALED = 19,
-    VK_FORMAT_R8G8_UINT = 20,
-    VK_FORMAT_R8G8_SINT = 21,
-    VK_FORMAT_R8G8_SRGB = 22,
-    VK_FORMAT_R8G8B8_UNORM = 23,
-    VK_FORMAT_R8G8B8_SNORM = 24,
-    VK_FORMAT_R8G8B8_USCALED = 25,
-    VK_FORMAT_R8G8B8_SSCALED = 26,
-    VK_FORMAT_R8G8B8_UINT = 27,
-    VK_FORMAT_R8G8B8_SINT = 28,
-    VK_FORMAT_R8G8B8_SRGB = 29,
-    VK_FORMAT_B8G8R8_UNORM = 30,
-    VK_FORMAT_B8G8R8_SNORM = 31,
-    VK_FORMAT_B8G8R8_USCALED = 32,
-    VK_FORMAT_B8G8R8_SSCALED = 33,
-    VK_FORMAT_B8G8R8_UINT = 34,
-    VK_FORMAT_B8G8R8_SINT = 35,
-    VK_FORMAT_B8G8R8_SRGB = 36,
-    VK_FORMAT_R8G8B8A8_UNORM = 37,
-    VK_FORMAT_R8G8B8A8_SNORM = 38,
-    VK_FORMAT_R8G8B8A8_USCALED = 39,
-    VK_FORMAT_R8G8B8A8_SSCALED = 40,
-    VK_FORMAT_R8G8B8A8_UINT = 41,
-    VK_FORMAT_R8G8B8A8_SINT = 42,
-    VK_FORMAT_R8G8B8A8_SRGB = 43,
-    VK_FORMAT_B8G8R8A8_UNORM = 44,
-    VK_FORMAT_B8G8R8A8_SNORM = 45,
-    VK_FORMAT_B8G8R8A8_USCALED = 46,
-    VK_FORMAT_B8G8R8A8_SSCALED = 47,
-    VK_FORMAT_B8G8R8A8_UINT = 48,
-    VK_FORMAT_B8G8R8A8_SINT = 49,
-    VK_FORMAT_B8G8R8A8_SRGB = 50,
-    VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
-    VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
-    VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
-    VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
-    VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
-    VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
-    VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
-    VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
-    VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
-    VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
-    VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
-    VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
-    VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
-    VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
-    VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
-    VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
-    VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
-    VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
-    VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
-    VK_FORMAT_R16_UNORM = 70,
-    VK_FORMAT_R16_SNORM = 71,
-    VK_FORMAT_R16_USCALED = 72,
-    VK_FORMAT_R16_SSCALED = 73,
-    VK_FORMAT_R16_UINT = 74,
-    VK_FORMAT_R16_SINT = 75,
-    VK_FORMAT_R16_SFLOAT = 76,
-    VK_FORMAT_R16G16_UNORM = 77,
-    VK_FORMAT_R16G16_SNORM = 78,
-    VK_FORMAT_R16G16_USCALED = 79,
-    VK_FORMAT_R16G16_SSCALED = 80,
-    VK_FORMAT_R16G16_UINT = 81,
-    VK_FORMAT_R16G16_SINT = 82,
-    VK_FORMAT_R16G16_SFLOAT = 83,
-    VK_FORMAT_R16G16B16_UNORM = 84,
-    VK_FORMAT_R16G16B16_SNORM = 85,
-    VK_FORMAT_R16G16B16_USCALED = 86,
-    VK_FORMAT_R16G16B16_SSCALED = 87,
-    VK_FORMAT_R16G16B16_UINT = 88,
-    VK_FORMAT_R16G16B16_SINT = 89,
-    VK_FORMAT_R16G16B16_SFLOAT = 90,
-    VK_FORMAT_R16G16B16A16_UNORM = 91,
-    VK_FORMAT_R16G16B16A16_SNORM = 92,
-    VK_FORMAT_R16G16B16A16_USCALED = 93,
-    VK_FORMAT_R16G16B16A16_SSCALED = 94,
-    VK_FORMAT_R16G16B16A16_UINT = 95,
-    VK_FORMAT_R16G16B16A16_SINT = 96,
-    VK_FORMAT_R16G16B16A16_SFLOAT = 97,
-    VK_FORMAT_R32_UINT = 98,
-    VK_FORMAT_R32_SINT = 99,
-    VK_FORMAT_R32_SFLOAT = 100,
-    VK_FORMAT_R32G32_UINT = 101,
-    VK_FORMAT_R32G32_SINT = 102,
-    VK_FORMAT_R32G32_SFLOAT = 103,
-    VK_FORMAT_R32G32B32_UINT = 104,
-    VK_FORMAT_R32G32B32_SINT = 105,
-    VK_FORMAT_R32G32B32_SFLOAT = 106,
-    VK_FORMAT_R32G32B32A32_UINT = 107,
-    VK_FORMAT_R32G32B32A32_SINT = 108,
-    VK_FORMAT_R32G32B32A32_SFLOAT = 109,
-    VK_FORMAT_R64_UINT = 110,
-    VK_FORMAT_R64_SINT = 111,
-    VK_FORMAT_R64_SFLOAT = 112,
-    VK_FORMAT_R64G64_UINT = 113,
-    VK_FORMAT_R64G64_SINT = 114,
-    VK_FORMAT_R64G64_SFLOAT = 115,
-    VK_FORMAT_R64G64B64_UINT = 116,
-    VK_FORMAT_R64G64B64_SINT = 117,
-    VK_FORMAT_R64G64B64_SFLOAT = 118,
-    VK_FORMAT_R64G64B64A64_UINT = 119,
-    VK_FORMAT_R64G64B64A64_SINT = 120,
-    VK_FORMAT_R64G64B64A64_SFLOAT = 121,
-    VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
-    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
-    VK_FORMAT_D16_UNORM = 124,
-    VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
-    VK_FORMAT_D32_SFLOAT = 126,
-    VK_FORMAT_S8_UINT = 127,
-    VK_FORMAT_D16_UNORM_S8_UINT = 128,
-    VK_FORMAT_D24_UNORM_S8_UINT = 129,
-    VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
-    VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
-    VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
-    VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
-    VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
-    VK_FORMAT_BC2_UNORM_BLOCK = 135,
-    VK_FORMAT_BC2_SRGB_BLOCK = 136,
-    VK_FORMAT_BC3_UNORM_BLOCK = 137,
-    VK_FORMAT_BC3_SRGB_BLOCK = 138,
-    VK_FORMAT_BC4_UNORM_BLOCK = 139,
-    VK_FORMAT_BC4_SNORM_BLOCK = 140,
-    VK_FORMAT_BC5_UNORM_BLOCK = 141,
-    VK_FORMAT_BC5_SNORM_BLOCK = 142,
-    VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
-    VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
-    VK_FORMAT_BC7_UNORM_BLOCK = 145,
-    VK_FORMAT_BC7_SRGB_BLOCK = 146,
-    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
-    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
-    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
-    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
-    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
-    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
-    VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
-    VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
-    VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
-    VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
-    VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
-    VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
-    VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
-    VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
-    VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
-    VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
-    VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
-    VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
-    VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
-    VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
-    VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
-    VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
-    VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
-    VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
-    VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
-    VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
-    VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
-    VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
-    VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
-    VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
-    VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
-    VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
-    VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
-    VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
-    VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
-    VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
-    VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
-    VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
-    VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000,
-    VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001,
-    VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002,
-    VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003,
-    VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004,
-    VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005,
-    VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006,
-    VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007,
-    VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008,
-    VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
-    VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
-    VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
-    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012,
-    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013,
-    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014,
-    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015,
-    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016,
-    VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017,
-    VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018,
-    VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
-    VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
-    VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
-    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022,
-    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023,
-    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024,
-    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025,
-    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026,
-    VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027,
-    VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028,
-    VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029,
-    VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030,
-    VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
-    VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
-    VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
-    VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
-    VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
-    VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
-    VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003,
-    VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004,
-    VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
-    VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
-    VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
-    VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000,
-    VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001,
-    VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002,
-    VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003,
-    VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004,
-    VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005,
-    VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006,
-    VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007,
-    VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008,
-    VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009,
-    VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010,
-    VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011,
-    VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012,
-    VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013,
-    VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = 1000330000,
-    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = 1000330001,
-    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = 1000330002,
-    VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = 1000330003,
-    VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000,
-    VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001,
-    VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM,
-    VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM,
-    VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
-    VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
-    VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
-    VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
-    VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
-    VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16,
-    VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
-    VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
-    VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
-    VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
-    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
-    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
-    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
-    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
-    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
-    VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16,
-    VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
-    VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
-    VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
-    VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
-    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
-    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
-    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
-    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
-    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
-    VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM,
-    VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM,
-    VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
-    VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
-    VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
-    VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
-    VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
-    VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
-} VkFormat;
-
-typedef enum VkImageTiling {
-    VK_IMAGE_TILING_OPTIMAL = 0,
-    VK_IMAGE_TILING_LINEAR = 1,
-    VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000,
-    VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
-} VkImageTiling;
-
-typedef enum VkImageType {
-    VK_IMAGE_TYPE_1D = 0,
-    VK_IMAGE_TYPE_2D = 1,
-    VK_IMAGE_TYPE_3D = 2,
-    VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkImageType;
-
-typedef enum VkPhysicalDeviceType {
-    VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
-    VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
-    VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
-    VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
-    VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
-    VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkPhysicalDeviceType;
-
-typedef enum VkQueryType {
-    VK_QUERY_TYPE_OCCLUSION = 0,
-    VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
-    VK_QUERY_TYPE_TIMESTAMP = 2,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR = 1000023000,
-#endif
-    VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004,
-    VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR = 1000116000,
-    VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000,
-    VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = 1000150001,
-    VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = 1000165000,
-    VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL = 1000210000,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR = 1000299000,
-#endif
-    VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkQueryType;
-
-typedef enum VkSharingMode {
-    VK_SHARING_MODE_EXCLUSIVE = 0,
-    VK_SHARING_MODE_CONCURRENT = 1,
-    VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkSharingMode;
-
-typedef enum VkComponentSwizzle {
-    VK_COMPONENT_SWIZZLE_IDENTITY = 0,
-    VK_COMPONENT_SWIZZLE_ZERO = 1,
-    VK_COMPONENT_SWIZZLE_ONE = 2,
-    VK_COMPONENT_SWIZZLE_R = 3,
-    VK_COMPONENT_SWIZZLE_G = 4,
-    VK_COMPONENT_SWIZZLE_B = 5,
-    VK_COMPONENT_SWIZZLE_A = 6,
-    VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
-} VkComponentSwizzle;
-
-typedef enum VkImageViewType {
-    VK_IMAGE_VIEW_TYPE_1D = 0,
-    VK_IMAGE_VIEW_TYPE_2D = 1,
-    VK_IMAGE_VIEW_TYPE_3D = 2,
-    VK_IMAGE_VIEW_TYPE_CUBE = 3,
-    VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
-    VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
-    VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
-    VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkImageViewType;
-
-typedef enum VkBlendFactor {
-    VK_BLEND_FACTOR_ZERO = 0,
-    VK_BLEND_FACTOR_ONE = 1,
-    VK_BLEND_FACTOR_SRC_COLOR = 2,
-    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
-    VK_BLEND_FACTOR_DST_COLOR = 4,
-    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
-    VK_BLEND_FACTOR_SRC_ALPHA = 6,
-    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
-    VK_BLEND_FACTOR_DST_ALPHA = 8,
-    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
-    VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
-    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
-    VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
-    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
-    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
-    VK_BLEND_FACTOR_SRC1_COLOR = 15,
-    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
-    VK_BLEND_FACTOR_SRC1_ALPHA = 17,
-    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
-    VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
-} VkBlendFactor;
-
-typedef enum VkBlendOp {
-    VK_BLEND_OP_ADD = 0,
-    VK_BLEND_OP_SUBTRACT = 1,
-    VK_BLEND_OP_REVERSE_SUBTRACT = 2,
-    VK_BLEND_OP_MIN = 3,
-    VK_BLEND_OP_MAX = 4,
-    VK_BLEND_OP_ZERO_EXT = 1000148000,
-    VK_BLEND_OP_SRC_EXT = 1000148001,
-    VK_BLEND_OP_DST_EXT = 1000148002,
-    VK_BLEND_OP_SRC_OVER_EXT = 1000148003,
-    VK_BLEND_OP_DST_OVER_EXT = 1000148004,
-    VK_BLEND_OP_SRC_IN_EXT = 1000148005,
-    VK_BLEND_OP_DST_IN_EXT = 1000148006,
-    VK_BLEND_OP_SRC_OUT_EXT = 1000148007,
-    VK_BLEND_OP_DST_OUT_EXT = 1000148008,
-    VK_BLEND_OP_SRC_ATOP_EXT = 1000148009,
-    VK_BLEND_OP_DST_ATOP_EXT = 1000148010,
-    VK_BLEND_OP_XOR_EXT = 1000148011,
-    VK_BLEND_OP_MULTIPLY_EXT = 1000148012,
-    VK_BLEND_OP_SCREEN_EXT = 1000148013,
-    VK_BLEND_OP_OVERLAY_EXT = 1000148014,
-    VK_BLEND_OP_DARKEN_EXT = 1000148015,
-    VK_BLEND_OP_LIGHTEN_EXT = 1000148016,
-    VK_BLEND_OP_COLORDODGE_EXT = 1000148017,
-    VK_BLEND_OP_COLORBURN_EXT = 1000148018,
-    VK_BLEND_OP_HARDLIGHT_EXT = 1000148019,
-    VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020,
-    VK_BLEND_OP_DIFFERENCE_EXT = 1000148021,
-    VK_BLEND_OP_EXCLUSION_EXT = 1000148022,
-    VK_BLEND_OP_INVERT_EXT = 1000148023,
-    VK_BLEND_OP_INVERT_RGB_EXT = 1000148024,
-    VK_BLEND_OP_LINEARDODGE_EXT = 1000148025,
-    VK_BLEND_OP_LINEARBURN_EXT = 1000148026,
-    VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027,
-    VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028,
-    VK_BLEND_OP_PINLIGHT_EXT = 1000148029,
-    VK_BLEND_OP_HARDMIX_EXT = 1000148030,
-    VK_BLEND_OP_HSL_HUE_EXT = 1000148031,
-    VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032,
-    VK_BLEND_OP_HSL_COLOR_EXT = 1000148033,
-    VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034,
-    VK_BLEND_OP_PLUS_EXT = 1000148035,
-    VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036,
-    VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037,
-    VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038,
-    VK_BLEND_OP_MINUS_EXT = 1000148039,
-    VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040,
-    VK_BLEND_OP_CONTRAST_EXT = 1000148041,
-    VK_BLEND_OP_INVERT_OVG_EXT = 1000148042,
-    VK_BLEND_OP_RED_EXT = 1000148043,
-    VK_BLEND_OP_GREEN_EXT = 1000148044,
-    VK_BLEND_OP_BLUE_EXT = 1000148045,
-    VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
-} VkBlendOp;
-
-typedef enum VkCompareOp {
-    VK_COMPARE_OP_NEVER = 0,
-    VK_COMPARE_OP_LESS = 1,
-    VK_COMPARE_OP_EQUAL = 2,
-    VK_COMPARE_OP_LESS_OR_EQUAL = 3,
-    VK_COMPARE_OP_GREATER = 4,
-    VK_COMPARE_OP_NOT_EQUAL = 5,
-    VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
-    VK_COMPARE_OP_ALWAYS = 7,
-    VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
-} VkCompareOp;
-
-typedef enum VkDynamicState {
-    VK_DYNAMIC_STATE_VIEWPORT = 0,
-    VK_DYNAMIC_STATE_SCISSOR = 1,
-    VK_DYNAMIC_STATE_LINE_WIDTH = 2,
-    VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
-    VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
-    VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
-    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
-    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
-    VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
-    VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000,
-    VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
-    VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000,
-    VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1000347000,
-    VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1000164004,
-    VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1000164006,
-    VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001,
-    VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000,
-    VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = 1000259000,
-    VK_DYNAMIC_STATE_CULL_MODE_EXT = 1000267000,
-    VK_DYNAMIC_STATE_FRONT_FACE_EXT = 1000267001,
-    VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = 1000267002,
-    VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = 1000267003,
-    VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = 1000267004,
-    VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = 1000267005,
-    VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = 1000267006,
-    VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = 1000267007,
-    VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = 1000267008,
-    VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = 1000267009,
-    VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = 1000267010,
-    VK_DYNAMIC_STATE_STENCIL_OP_EXT = 1000267011,
-    VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000,
-    VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000,
-    VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = 1000377001,
-    VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = 1000377002,
-    VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003,
-    VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = 1000377004,
-    VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000,
-    VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
-} VkDynamicState;
-
-typedef enum VkFrontFace {
-    VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
-    VK_FRONT_FACE_CLOCKWISE = 1,
-    VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
-} VkFrontFace;
-
-typedef enum VkVertexInputRate {
-    VK_VERTEX_INPUT_RATE_VERTEX = 0,
-    VK_VERTEX_INPUT_RATE_INSTANCE = 1,
-    VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
-} VkVertexInputRate;
-
-typedef enum VkPrimitiveTopology {
-    VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
-    VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
-    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
-    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
-    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
-    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
-    VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
-} VkPrimitiveTopology;
-
-typedef enum VkPolygonMode {
-    VK_POLYGON_MODE_FILL = 0,
-    VK_POLYGON_MODE_LINE = 1,
-    VK_POLYGON_MODE_POINT = 2,
-    VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000,
-    VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkPolygonMode;
-
-typedef enum VkStencilOp {
-    VK_STENCIL_OP_KEEP = 0,
-    VK_STENCIL_OP_ZERO = 1,
-    VK_STENCIL_OP_REPLACE = 2,
-    VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
-    VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
-    VK_STENCIL_OP_INVERT = 5,
-    VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
-    VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
-    VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
-} VkStencilOp;
-
-typedef enum VkLogicOp {
-    VK_LOGIC_OP_CLEAR = 0,
-    VK_LOGIC_OP_AND = 1,
-    VK_LOGIC_OP_AND_REVERSE = 2,
-    VK_LOGIC_OP_COPY = 3,
-    VK_LOGIC_OP_AND_INVERTED = 4,
-    VK_LOGIC_OP_NO_OP = 5,
-    VK_LOGIC_OP_XOR = 6,
-    VK_LOGIC_OP_OR = 7,
-    VK_LOGIC_OP_NOR = 8,
-    VK_LOGIC_OP_EQUIVALENT = 9,
-    VK_LOGIC_OP_INVERT = 10,
-    VK_LOGIC_OP_OR_REVERSE = 11,
-    VK_LOGIC_OP_COPY_INVERTED = 12,
-    VK_LOGIC_OP_OR_INVERTED = 13,
-    VK_LOGIC_OP_NAND = 14,
-    VK_LOGIC_OP_SET = 15,
-    VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
-} VkLogicOp;
-
-typedef enum VkBorderColor {
-    VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
-    VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
-    VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
-    VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
-    VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
-    VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
-    VK_BORDER_COLOR_FLOAT_CUSTOM_EXT = 1000287003,
-    VK_BORDER_COLOR_INT_CUSTOM_EXT = 1000287004,
-    VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
-} VkBorderColor;
-
-typedef enum VkFilter {
-    VK_FILTER_NEAREST = 0,
-    VK_FILTER_LINEAR = 1,
-    VK_FILTER_CUBIC_IMG = 1000015000,
-    VK_FILTER_CUBIC_EXT = VK_FILTER_CUBIC_IMG,
-    VK_FILTER_MAX_ENUM = 0x7FFFFFFF
-} VkFilter;
-
-typedef enum VkSamplerAddressMode {
-    VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
-    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
-    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
-    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
-    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
-    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE,
-    VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkSamplerAddressMode;
-
-typedef enum VkSamplerMipmapMode {
-    VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
-    VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
-    VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkSamplerMipmapMode;
-
-typedef enum VkDescriptorType {
-    VK_DESCRIPTOR_TYPE_SAMPLER = 0,
-    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
-    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
-    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
-    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
-    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
-    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
-    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
-    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
-    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
-    VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
-    VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = 1000138000,
-    VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000,
-    VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000,
-    VK_DESCRIPTOR_TYPE_MUTABLE_VALVE = 1000351000,
-    VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkDescriptorType;
-
-typedef enum VkAttachmentLoadOp {
-    VK_ATTACHMENT_LOAD_OP_LOAD = 0,
-    VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
-    VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
-    VK_ATTACHMENT_LOAD_OP_NONE_EXT = 1000400000,
-    VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
-} VkAttachmentLoadOp;
-
-typedef enum VkAttachmentStoreOp {
-    VK_ATTACHMENT_STORE_OP_STORE = 0,
-    VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
-    VK_ATTACHMENT_STORE_OP_NONE_KHR = 1000301000,
-    VK_ATTACHMENT_STORE_OP_NONE_QCOM = VK_ATTACHMENT_STORE_OP_NONE_KHR,
-    VK_ATTACHMENT_STORE_OP_NONE_EXT = VK_ATTACHMENT_STORE_OP_NONE_KHR,
-    VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
-} VkAttachmentStoreOp;
-
-typedef enum VkPipelineBindPoint {
-    VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
-    VK_PIPELINE_BIND_POINT_COMPUTE = 1,
-    VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR = 1000165000,
-    VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI = 1000369003,
-    VK_PIPELINE_BIND_POINT_RAY_TRACING_NV = VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
-    VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineBindPoint;
-
-typedef enum VkCommandBufferLevel {
-    VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
-    VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
-    VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
-} VkCommandBufferLevel;
-
-typedef enum VkIndexType {
-    VK_INDEX_TYPE_UINT16 = 0,
-    VK_INDEX_TYPE_UINT32 = 1,
-    VK_INDEX_TYPE_NONE_KHR = 1000165000,
-    VK_INDEX_TYPE_UINT8_EXT = 1000265000,
-    VK_INDEX_TYPE_NONE_NV = VK_INDEX_TYPE_NONE_KHR,
-    VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkIndexType;
-
-typedef enum VkSubpassContents {
-    VK_SUBPASS_CONTENTS_INLINE = 0,
-    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
-    VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
-} VkSubpassContents;
-
-typedef enum VkAccessFlagBits {
-    VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
-    VK_ACCESS_INDEX_READ_BIT = 0x00000002,
-    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
-    VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
-    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
-    VK_ACCESS_SHADER_READ_BIT = 0x00000020,
-    VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
-    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
-    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
-    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
-    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
-    VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
-    VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
-    VK_ACCESS_HOST_READ_BIT = 0x00002000,
-    VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
-    VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
-    VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
-    VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000,
-    VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000,
-    VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000,
-    VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000,
-    VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000,
-    VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000,
-    VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000,
-    VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000,
-    VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000,
-    VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000,
-    VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000,
-    VK_ACCESS_NONE_KHR = 0,
-    VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR,
-    VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,
-    VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
-    VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkAccessFlagBits;
-typedef VkFlags VkAccessFlags;
-
-typedef enum VkImageAspectFlagBits {
-    VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
-    VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
-    VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
-    VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
-    VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010,
-    VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020,
-    VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040,
-    VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 0x00000080,
-    VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 0x00000100,
-    VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 0x00000200,
-    VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = 0x00000400,
-    VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT,
-    VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT,
-    VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT,
-    VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkImageAspectFlagBits;
-typedef VkFlags VkImageAspectFlags;
-
-typedef enum VkFormatFeatureFlagBits {
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
-    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
-    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
-    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
-    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
-    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
-    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
-    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
-    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
-    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
-    VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
-    VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
-    VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000,
-    VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000,
-    VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000,
-    VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000,
-    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000,
-#endif
-    VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000,
-    VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000,
-    VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000,
-#endif
-    VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,
-    VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT,
-    VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,
-    VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT,
-    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,
-    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,
-    VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkFormatFeatureFlagBits;
-typedef VkFlags VkFormatFeatureFlags;
-
-typedef enum VkImageCreateFlagBits {
-    VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
-    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
-    VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
-    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
-    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
-    VK_IMAGE_CREATE_ALIAS_BIT = 0x00000400,
-    VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = 0x00000040,
-    VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = 0x00000020,
-    VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = 0x00000080,
-    VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = 0x00000100,
-    VK_IMAGE_CREATE_PROTECTED_BIT = 0x00000800,
-    VK_IMAGE_CREATE_DISJOINT_BIT = 0x00000200,
-    VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = 0x00002000,
-    VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
-    VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 0x00004000,
-    VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT,
-    VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,
-    VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT,
-    VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT,
-    VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT,
-    VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT,
-    VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkImageCreateFlagBits;
-typedef VkFlags VkImageCreateFlags;
-
-typedef enum VkSampleCountFlagBits {
-    VK_SAMPLE_COUNT_1_BIT = 0x00000001,
-    VK_SAMPLE_COUNT_2_BIT = 0x00000002,
-    VK_SAMPLE_COUNT_4_BIT = 0x00000004,
-    VK_SAMPLE_COUNT_8_BIT = 0x00000008,
-    VK_SAMPLE_COUNT_16_BIT = 0x00000010,
-    VK_SAMPLE_COUNT_32_BIT = 0x00000020,
-    VK_SAMPLE_COUNT_64_BIT = 0x00000040,
-    VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSampleCountFlagBits;
-typedef VkFlags VkSampleCountFlags;
-
-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,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00000400,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00000800,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 0x00001000,
-#endif
-    VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200,
-    VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00000100,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00002000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00004000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 0x00008000,
-#endif
-    VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI = 0x00040000,
-    VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
-    VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkImageUsageFlagBits;
-typedef VkFlags VkImageUsageFlags;
-typedef VkFlags VkInstanceCreateFlags;
-
-typedef enum VkMemoryHeapFlagBits {
-    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
-    VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002,
-    VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT,
-    VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkMemoryHeapFlagBits;
-typedef VkFlags VkMemoryHeapFlags;
-
-typedef enum VkMemoryPropertyFlagBits {
-    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
-    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
-    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
-    VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
-    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
-    VK_MEMORY_PROPERTY_PROTECTED_BIT = 0x00000020,
-    VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = 0x00000040,
-    VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = 0x00000080,
-    VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV = 0x00000100,
-    VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkMemoryPropertyFlagBits;
-typedef VkFlags VkMemoryPropertyFlags;
-
-typedef enum VkQueueFlagBits {
-    VK_QUEUE_GRAPHICS_BIT = 0x00000001,
-    VK_QUEUE_COMPUTE_BIT = 0x00000002,
-    VK_QUEUE_TRANSFER_BIT = 0x00000004,
-    VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
-    VK_QUEUE_PROTECTED_BIT = 0x00000010,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_QUEUE_VIDEO_DECODE_BIT_KHR = 0x00000020,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 0x00000040,
-#endif
-    VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkQueueFlagBits;
-typedef VkFlags VkQueueFlags;
-typedef VkFlags VkDeviceCreateFlags;
-
-typedef enum VkDeviceQueueCreateFlagBits {
-    VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 0x00000001,
-    VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkDeviceQueueCreateFlagBits;
-typedef VkFlags VkDeviceQueueCreateFlags;
-
-typedef enum VkPipelineStageFlagBits {
-    VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
-    VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
-    VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
-    VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
-    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
-    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
-    VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
-    VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
-    VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
-    VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
-    VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
-    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
-    VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
-    VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
-    VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
-    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
-    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
-    VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000,
-    VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000,
-    VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000,
-    VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = 0x00200000,
-    VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV = 0x00080000,
-    VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = 0x00100000,
-    VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000,
-    VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000,
-    VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = 0x00020000,
-    VK_PIPELINE_STAGE_NONE_KHR = 0,
-    VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
-    VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
-    VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
-    VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineStageFlagBits;
-typedef VkFlags VkPipelineStageFlags;
-typedef VkFlags VkMemoryMapFlags;
-
-typedef enum VkSparseMemoryBindFlagBits {
-    VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
-    VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSparseMemoryBindFlagBits;
-typedef VkFlags VkSparseMemoryBindFlags;
-
-typedef enum VkSparseImageFormatFlagBits {
-    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
-    VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
-    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
-    VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSparseImageFormatFlagBits;
-typedef VkFlags VkSparseImageFormatFlags;
-
-typedef enum VkFenceCreateFlagBits {
-    VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
-    VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkFenceCreateFlagBits;
-typedef VkFlags VkFenceCreateFlags;
-typedef VkFlags VkSemaphoreCreateFlags;
-
-typedef enum VkEventCreateFlagBits {
-    VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR = 0x00000001,
-    VK_EVENT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkEventCreateFlagBits;
-typedef VkFlags VkEventCreateFlags;
-
-typedef enum VkQueryPipelineStatisticFlagBits {
-    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
-    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
-    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
-    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
-    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
-    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
-    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
-    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
-    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
-    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
-    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
-    VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkQueryPipelineStatisticFlagBits;
-typedef VkFlags VkQueryPipelineStatisticFlags;
-typedef VkFlags VkQueryPoolCreateFlags;
-
-typedef enum VkQueryResultFlagBits {
-    VK_QUERY_RESULT_64_BIT = 0x00000001,
-    VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
-    VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
-    VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_QUERY_RESULT_WITH_STATUS_BIT_KHR = 0x00000010,
-#endif
-    VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkQueryResultFlagBits;
-typedef VkFlags VkQueryResultFlags;
-
-typedef enum VkBufferCreateFlagBits {
-    VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
-    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
-    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
-    VK_BUFFER_CREATE_PROTECTED_BIT = 0x00000008,
-    VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000010,
-    VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT,
-    VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT,
-    VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkBufferCreateFlagBits;
-typedef VkFlags VkBufferCreateFlags;
-
-typedef enum VkBufferUsageFlagBits {
-    VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
-    VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
-    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
-    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
-    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
-    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
-    VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
-    VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
-    VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
-    VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 0x00020000,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00004000,
-#endif
-    VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800,
-    VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000,
-    VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200,
-    VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000,
-    VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000,
-    VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400,
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000,
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-    VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000,
-#endif
-    VK_BUFFER_USAGE_RAY_TRACING_BIT_NV = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR,
-    VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
-    VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
-    VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkBufferUsageFlagBits;
-typedef VkFlags VkBufferUsageFlags;
-typedef VkFlags VkBufferViewCreateFlags;
-
-typedef enum VkImageViewCreateFlagBits {
-    VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = 0x00000001,
-    VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT = 0x00000002,
-    VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkImageViewCreateFlagBits;
-typedef VkFlags VkImageViewCreateFlags;
-typedef VkFlags VkShaderModuleCreateFlags;
-
-typedef enum VkPipelineCacheCreateFlagBits {
-    VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = 0x00000001,
-    VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineCacheCreateFlagBits;
-typedef VkFlags VkPipelineCacheCreateFlags;
-
-typedef enum VkColorComponentFlagBits {
-    VK_COLOR_COMPONENT_R_BIT = 0x00000001,
-    VK_COLOR_COMPONENT_G_BIT = 0x00000002,
-    VK_COLOR_COMPONENT_B_BIT = 0x00000004,
-    VK_COLOR_COMPONENT_A_BIT = 0x00000008,
-    VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkColorComponentFlagBits;
-typedef VkFlags VkColorComponentFlags;
-
-typedef enum VkPipelineCreateFlagBits {
-    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
-    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
-    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
-    VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008,
-    VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 0x00000010,
-    VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000,
-    VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000,
-    VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000,
-    VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000,
-    VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000,
-    VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000,
-    VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000,
-    VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000,
-    VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000,
-    VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 0x00000020,
-    VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 0x00000040,
-    VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080,
-    VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00040000,
-    VK_PIPELINE_CREATE_LIBRARY_BIT_KHR = 0x00000800,
-    VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = 0x00000100,
-    VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = 0x00000200,
-    VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000,
-    VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,
-    VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
-    VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE,
-    VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineCreateFlagBits;
-typedef VkFlags VkPipelineCreateFlags;
-
-typedef enum VkPipelineShaderStageCreateFlagBits {
-    VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000001,
-    VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000002,
-    VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkPipelineShaderStageCreateFlagBits;
-typedef VkFlags VkPipelineShaderStageCreateFlags;
-
-typedef enum VkShaderStageFlagBits {
-    VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
-    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
-    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
-    VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
-    VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
-    VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
-    VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
-    VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
-    VK_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100,
-    VK_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200,
-    VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400,
-    VK_SHADER_STAGE_MISS_BIT_KHR = 0x00000800,
-    VK_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000,
-    VK_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000,
-    VK_SHADER_STAGE_TASK_BIT_NV = 0x00000040,
-    VK_SHADER_STAGE_MESH_BIT_NV = 0x00000080,
-    VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI = 0x00004000,
-    VK_SHADER_STAGE_RAYGEN_BIT_NV = VK_SHADER_STAGE_RAYGEN_BIT_KHR,
-    VK_SHADER_STAGE_ANY_HIT_BIT_NV = VK_SHADER_STAGE_ANY_HIT_BIT_KHR,
-    VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,
-    VK_SHADER_STAGE_MISS_BIT_NV = VK_SHADER_STAGE_MISS_BIT_KHR,
-    VK_SHADER_STAGE_INTERSECTION_BIT_NV = VK_SHADER_STAGE_INTERSECTION_BIT_KHR,
-    VK_SHADER_STAGE_CALLABLE_BIT_NV = VK_SHADER_STAGE_CALLABLE_BIT_KHR,
-    VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkShaderStageFlagBits;
-
-typedef enum VkCullModeFlagBits {
-    VK_CULL_MODE_NONE = 0,
-    VK_CULL_MODE_FRONT_BIT = 0x00000001,
-    VK_CULL_MODE_BACK_BIT = 0x00000002,
-    VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
-    VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCullModeFlagBits;
-typedef VkFlags VkCullModeFlags;
-typedef VkFlags VkPipelineVertexInputStateCreateFlags;
-typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
-typedef VkFlags VkPipelineTessellationStateCreateFlags;
-typedef VkFlags VkPipelineViewportStateCreateFlags;
-typedef VkFlags VkPipelineRasterizationStateCreateFlags;
-typedef VkFlags VkPipelineMultisampleStateCreateFlags;
-typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
-typedef VkFlags VkPipelineColorBlendStateCreateFlags;
-typedef VkFlags VkPipelineDynamicStateCreateFlags;
-typedef VkFlags VkPipelineLayoutCreateFlags;
-typedef VkFlags VkShaderStageFlags;
-
-typedef enum VkSamplerCreateFlagBits {
-    VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = 0x00000001,
-    VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = 0x00000002,
-    VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSamplerCreateFlagBits;
-typedef VkFlags VkSamplerCreateFlags;
-
-typedef enum VkDescriptorPoolCreateFlagBits {
-    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
-    VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 0x00000002,
-    VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE = 0x00000004,
-    VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT,
-    VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkDescriptorPoolCreateFlagBits;
-typedef VkFlags VkDescriptorPoolCreateFlags;
-typedef VkFlags VkDescriptorPoolResetFlags;
-
-typedef enum VkDescriptorSetLayoutCreateFlagBits {
-    VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 0x00000002,
-    VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001,
-    VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE = 0x00000004,
-    VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
-    VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkDescriptorSetLayoutCreateFlagBits;
-typedef VkFlags VkDescriptorSetLayoutCreateFlags;
-
-typedef enum VkAttachmentDescriptionFlagBits {
-    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
-    VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkAttachmentDescriptionFlagBits;
-typedef VkFlags VkAttachmentDescriptionFlags;
-
-typedef enum VkDependencyFlagBits {
-    VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
-    VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004,
-    VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002,
-    VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT,
-    VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT,
-    VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkDependencyFlagBits;
-typedef VkFlags VkDependencyFlags;
-
-typedef enum VkFramebufferCreateFlagBits {
-    VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 0x00000001,
-    VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT,
-    VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkFramebufferCreateFlagBits;
-typedef VkFlags VkFramebufferCreateFlags;
-
-typedef enum VkRenderPassCreateFlagBits {
-    VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = 0x00000002,
-    VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkRenderPassCreateFlagBits;
-typedef VkFlags VkRenderPassCreateFlags;
-
-typedef enum VkSubpassDescriptionFlagBits {
-    VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001,
-    VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002,
-    VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = 0x00000004,
-    VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = 0x00000008,
-    VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSubpassDescriptionFlagBits;
-typedef VkFlags VkSubpassDescriptionFlags;
-
-typedef enum VkCommandPoolCreateFlagBits {
-    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
-    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
-    VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 0x00000004,
-    VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCommandPoolCreateFlagBits;
-typedef VkFlags VkCommandPoolCreateFlags;
-
-typedef enum VkCommandPoolResetFlagBits {
-    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
-    VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCommandPoolResetFlagBits;
-typedef VkFlags VkCommandPoolResetFlags;
-
-typedef enum VkCommandBufferUsageFlagBits {
-    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
-    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
-    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
-    VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCommandBufferUsageFlagBits;
-typedef VkFlags VkCommandBufferUsageFlags;
-
-typedef enum VkQueryControlFlagBits {
-    VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
-    VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkQueryControlFlagBits;
-typedef VkFlags VkQueryControlFlags;
-
-typedef enum VkCommandBufferResetFlagBits {
-    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
-    VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkCommandBufferResetFlagBits;
-typedef VkFlags VkCommandBufferResetFlags;
-
-typedef enum VkStencilFaceFlagBits {
-    VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
-    VK_STENCIL_FACE_BACK_BIT = 0x00000002,
-    VK_STENCIL_FACE_FRONT_AND_BACK = 0x00000003,
-    VK_STENCIL_FRONT_AND_BACK = VK_STENCIL_FACE_FRONT_AND_BACK,
-    VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkStencilFaceFlagBits;
-typedef VkFlags VkStencilFaceFlags;
-typedef struct VkExtent2D {
-    uint32_t    width;
-    uint32_t    height;
-} VkExtent2D;
-
-typedef struct VkExtent3D {
-    uint32_t    width;
-    uint32_t    height;
-    uint32_t    depth;
-} VkExtent3D;
-
-typedef struct VkOffset2D {
-    int32_t    x;
-    int32_t    y;
-} VkOffset2D;
-
-typedef struct VkOffset3D {
-    int32_t    x;
-    int32_t    y;
-    int32_t    z;
-} VkOffset3D;
-
-typedef struct VkRect2D {
-    VkOffset2D    offset;
-    VkExtent2D    extent;
-} VkRect2D;
-
-typedef struct VkBaseInStructure {
-    VkStructureType                    sType;
-    const struct VkBaseInStructure*    pNext;
-} VkBaseInStructure;
-
-typedef struct VkBaseOutStructure {
-    VkStructureType               sType;
-    struct VkBaseOutStructure*    pNext;
-} VkBaseOutStructure;
-
-typedef struct VkBufferMemoryBarrier {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkAccessFlags      srcAccessMask;
-    VkAccessFlags      dstAccessMask;
-    uint32_t           srcQueueFamilyIndex;
-    uint32_t           dstQueueFamilyIndex;
-    VkBuffer           buffer;
-    VkDeviceSize       offset;
-    VkDeviceSize       size;
-} VkBufferMemoryBarrier;
-
-typedef struct VkDispatchIndirectCommand {
-    uint32_t    x;
-    uint32_t    y;
-    uint32_t    z;
-} VkDispatchIndirectCommand;
-
-typedef struct VkDrawIndexedIndirectCommand {
-    uint32_t    indexCount;
-    uint32_t    instanceCount;
-    uint32_t    firstIndex;
-    int32_t     vertexOffset;
-    uint32_t    firstInstance;
-} VkDrawIndexedIndirectCommand;
-
-typedef struct VkDrawIndirectCommand {
-    uint32_t    vertexCount;
-    uint32_t    instanceCount;
-    uint32_t    firstVertex;
-    uint32_t    firstInstance;
-} VkDrawIndirectCommand;
-
-typedef struct VkImageSubresourceRange {
-    VkImageAspectFlags    aspectMask;
-    uint32_t              baseMipLevel;
-    uint32_t              levelCount;
-    uint32_t              baseArrayLayer;
-    uint32_t              layerCount;
-} VkImageSubresourceRange;
-
-typedef struct VkImageMemoryBarrier {
-    VkStructureType            sType;
-    const void*                pNext;
-    VkAccessFlags              srcAccessMask;
-    VkAccessFlags              dstAccessMask;
-    VkImageLayout              oldLayout;
-    VkImageLayout              newLayout;
-    uint32_t                   srcQueueFamilyIndex;
-    uint32_t                   dstQueueFamilyIndex;
-    VkImage                    image;
-    VkImageSubresourceRange    subresourceRange;
-} VkImageMemoryBarrier;
-
-typedef struct VkMemoryBarrier {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkAccessFlags      srcAccessMask;
-    VkAccessFlags      dstAccessMask;
-} VkMemoryBarrier;
-
-typedef struct VkPipelineCacheHeaderVersionOne {
-    uint32_t                        headerSize;
-    VkPipelineCacheHeaderVersion    headerVersion;
-    uint32_t                        vendorID;
-    uint32_t                        deviceID;
-    uint8_t                         pipelineCacheUUID[VK_UUID_SIZE];
-} VkPipelineCacheHeaderVersionOne;
-
-typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
-    void*                                       pUserData,
-    size_t                                      size,
-    size_t                                      alignment,
-    VkSystemAllocationScope                     allocationScope);
-
-typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
-    void*                                       pUserData,
-    void*                                       pMemory);
-
-typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
-    void*                                       pUserData,
-    size_t                                      size,
-    VkInternalAllocationType                    allocationType,
-    VkSystemAllocationScope                     allocationScope);
-
-typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
-    void*                                       pUserData,
-    size_t                                      size,
-    VkInternalAllocationType                    allocationType,
-    VkSystemAllocationScope                     allocationScope);
-
-typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
-    void*                                       pUserData,
-    void*                                       pOriginal,
-    size_t                                      size,
-    size_t                                      alignment,
-    VkSystemAllocationScope                     allocationScope);
-
-typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
-typedef struct VkAllocationCallbacks {
-    void*                                   pUserData;
-    PFN_vkAllocationFunction                pfnAllocation;
-    PFN_vkReallocationFunction              pfnReallocation;
-    PFN_vkFreeFunction                      pfnFree;
-    PFN_vkInternalAllocationNotification    pfnInternalAllocation;
-    PFN_vkInternalFreeNotification          pfnInternalFree;
-} VkAllocationCallbacks;
-
-typedef struct VkApplicationInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    const char*        pApplicationName;
-    uint32_t           applicationVersion;
-    const char*        pEngineName;
-    uint32_t           engineVersion;
-    uint32_t           apiVersion;
-} VkApplicationInfo;
-
-typedef struct VkFormatProperties {
-    VkFormatFeatureFlags    linearTilingFeatures;
-    VkFormatFeatureFlags    optimalTilingFeatures;
-    VkFormatFeatureFlags    bufferFeatures;
-} VkFormatProperties;
-
-typedef struct VkImageFormatProperties {
-    VkExtent3D            maxExtent;
-    uint32_t              maxMipLevels;
-    uint32_t              maxArrayLayers;
-    VkSampleCountFlags    sampleCounts;
-    VkDeviceSize          maxResourceSize;
-} VkImageFormatProperties;
-
-typedef struct VkInstanceCreateInfo {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkInstanceCreateFlags       flags;
-    const VkApplicationInfo*    pApplicationInfo;
-    uint32_t                    enabledLayerCount;
-    const char* const*          ppEnabledLayerNames;
-    uint32_t                    enabledExtensionCount;
-    const char* const*          ppEnabledExtensionNames;
-} VkInstanceCreateInfo;
-
-typedef struct VkMemoryHeap {
-    VkDeviceSize         size;
-    VkMemoryHeapFlags    flags;
-} VkMemoryHeap;
-
-typedef struct VkMemoryType {
-    VkMemoryPropertyFlags    propertyFlags;
-    uint32_t                 heapIndex;
-} VkMemoryType;
-
-typedef struct VkPhysicalDeviceFeatures {
-    VkBool32    robustBufferAccess;
-    VkBool32    fullDrawIndexUint32;
-    VkBool32    imageCubeArray;
-    VkBool32    independentBlend;
-    VkBool32    geometryShader;
-    VkBool32    tessellationShader;
-    VkBool32    sampleRateShading;
-    VkBool32    dualSrcBlend;
-    VkBool32    logicOp;
-    VkBool32    multiDrawIndirect;
-    VkBool32    drawIndirectFirstInstance;
-    VkBool32    depthClamp;
-    VkBool32    depthBiasClamp;
-    VkBool32    fillModeNonSolid;
-    VkBool32    depthBounds;
-    VkBool32    wideLines;
-    VkBool32    largePoints;
-    VkBool32    alphaToOne;
-    VkBool32    multiViewport;
-    VkBool32    samplerAnisotropy;
-    VkBool32    textureCompressionETC2;
-    VkBool32    textureCompressionASTC_LDR;
-    VkBool32    textureCompressionBC;
-    VkBool32    occlusionQueryPrecise;
-    VkBool32    pipelineStatisticsQuery;
-    VkBool32    vertexPipelineStoresAndAtomics;
-    VkBool32    fragmentStoresAndAtomics;
-    VkBool32    shaderTessellationAndGeometryPointSize;
-    VkBool32    shaderImageGatherExtended;
-    VkBool32    shaderStorageImageExtendedFormats;
-    VkBool32    shaderStorageImageMultisample;
-    VkBool32    shaderStorageImageReadWithoutFormat;
-    VkBool32    shaderStorageImageWriteWithoutFormat;
-    VkBool32    shaderUniformBufferArrayDynamicIndexing;
-    VkBool32    shaderSampledImageArrayDynamicIndexing;
-    VkBool32    shaderStorageBufferArrayDynamicIndexing;
-    VkBool32    shaderStorageImageArrayDynamicIndexing;
-    VkBool32    shaderClipDistance;
-    VkBool32    shaderCullDistance;
-    VkBool32    shaderFloat64;
-    VkBool32    shaderInt64;
-    VkBool32    shaderInt16;
-    VkBool32    shaderResourceResidency;
-    VkBool32    shaderResourceMinLod;
-    VkBool32    sparseBinding;
-    VkBool32    sparseResidencyBuffer;
-    VkBool32    sparseResidencyImage2D;
-    VkBool32    sparseResidencyImage3D;
-    VkBool32    sparseResidency2Samples;
-    VkBool32    sparseResidency4Samples;
-    VkBool32    sparseResidency8Samples;
-    VkBool32    sparseResidency16Samples;
-    VkBool32    sparseResidencyAliased;
-    VkBool32    variableMultisampleRate;
-    VkBool32    inheritedQueries;
-} VkPhysicalDeviceFeatures;
-
-typedef struct VkPhysicalDeviceLimits {
-    uint32_t              maxImageDimension1D;
-    uint32_t              maxImageDimension2D;
-    uint32_t              maxImageDimension3D;
-    uint32_t              maxImageDimensionCube;
-    uint32_t              maxImageArrayLayers;
-    uint32_t              maxTexelBufferElements;
-    uint32_t              maxUniformBufferRange;
-    uint32_t              maxStorageBufferRange;
-    uint32_t              maxPushConstantsSize;
-    uint32_t              maxMemoryAllocationCount;
-    uint32_t              maxSamplerAllocationCount;
-    VkDeviceSize          bufferImageGranularity;
-    VkDeviceSize          sparseAddressSpaceSize;
-    uint32_t              maxBoundDescriptorSets;
-    uint32_t              maxPerStageDescriptorSamplers;
-    uint32_t              maxPerStageDescriptorUniformBuffers;
-    uint32_t              maxPerStageDescriptorStorageBuffers;
-    uint32_t              maxPerStageDescriptorSampledImages;
-    uint32_t              maxPerStageDescriptorStorageImages;
-    uint32_t              maxPerStageDescriptorInputAttachments;
-    uint32_t              maxPerStageResources;
-    uint32_t              maxDescriptorSetSamplers;
-    uint32_t              maxDescriptorSetUniformBuffers;
-    uint32_t              maxDescriptorSetUniformBuffersDynamic;
-    uint32_t              maxDescriptorSetStorageBuffers;
-    uint32_t              maxDescriptorSetStorageBuffersDynamic;
-    uint32_t              maxDescriptorSetSampledImages;
-    uint32_t              maxDescriptorSetStorageImages;
-    uint32_t              maxDescriptorSetInputAttachments;
-    uint32_t              maxVertexInputAttributes;
-    uint32_t              maxVertexInputBindings;
-    uint32_t              maxVertexInputAttributeOffset;
-    uint32_t              maxVertexInputBindingStride;
-    uint32_t              maxVertexOutputComponents;
-    uint32_t              maxTessellationGenerationLevel;
-    uint32_t              maxTessellationPatchSize;
-    uint32_t              maxTessellationControlPerVertexInputComponents;
-    uint32_t              maxTessellationControlPerVertexOutputComponents;
-    uint32_t              maxTessellationControlPerPatchOutputComponents;
-    uint32_t              maxTessellationControlTotalOutputComponents;
-    uint32_t              maxTessellationEvaluationInputComponents;
-    uint32_t              maxTessellationEvaluationOutputComponents;
-    uint32_t              maxGeometryShaderInvocations;
-    uint32_t              maxGeometryInputComponents;
-    uint32_t              maxGeometryOutputComponents;
-    uint32_t              maxGeometryOutputVertices;
-    uint32_t              maxGeometryTotalOutputComponents;
-    uint32_t              maxFragmentInputComponents;
-    uint32_t              maxFragmentOutputAttachments;
-    uint32_t              maxFragmentDualSrcAttachments;
-    uint32_t              maxFragmentCombinedOutputResources;
-    uint32_t              maxComputeSharedMemorySize;
-    uint32_t              maxComputeWorkGroupCount[3];
-    uint32_t              maxComputeWorkGroupInvocations;
-    uint32_t              maxComputeWorkGroupSize[3];
-    uint32_t              subPixelPrecisionBits;
-    uint32_t              subTexelPrecisionBits;
-    uint32_t              mipmapPrecisionBits;
-    uint32_t              maxDrawIndexedIndexValue;
-    uint32_t              maxDrawIndirectCount;
-    float                 maxSamplerLodBias;
-    float                 maxSamplerAnisotropy;
-    uint32_t              maxViewports;
-    uint32_t              maxViewportDimensions[2];
-    float                 viewportBoundsRange[2];
-    uint32_t              viewportSubPixelBits;
-    size_t                minMemoryMapAlignment;
-    VkDeviceSize          minTexelBufferOffsetAlignment;
-    VkDeviceSize          minUniformBufferOffsetAlignment;
-    VkDeviceSize          minStorageBufferOffsetAlignment;
-    int32_t               minTexelOffset;
-    uint32_t              maxTexelOffset;
-    int32_t               minTexelGatherOffset;
-    uint32_t              maxTexelGatherOffset;
-    float                 minInterpolationOffset;
-    float                 maxInterpolationOffset;
-    uint32_t              subPixelInterpolationOffsetBits;
-    uint32_t              maxFramebufferWidth;
-    uint32_t              maxFramebufferHeight;
-    uint32_t              maxFramebufferLayers;
-    VkSampleCountFlags    framebufferColorSampleCounts;
-    VkSampleCountFlags    framebufferDepthSampleCounts;
-    VkSampleCountFlags    framebufferStencilSampleCounts;
-    VkSampleCountFlags    framebufferNoAttachmentsSampleCounts;
-    uint32_t              maxColorAttachments;
-    VkSampleCountFlags    sampledImageColorSampleCounts;
-    VkSampleCountFlags    sampledImageIntegerSampleCounts;
-    VkSampleCountFlags    sampledImageDepthSampleCounts;
-    VkSampleCountFlags    sampledImageStencilSampleCounts;
-    VkSampleCountFlags    storageImageSampleCounts;
-    uint32_t              maxSampleMaskWords;
-    VkBool32              timestampComputeAndGraphics;
-    float                 timestampPeriod;
-    uint32_t              maxClipDistances;
-    uint32_t              maxCullDistances;
-    uint32_t              maxCombinedClipAndCullDistances;
-    uint32_t              discreteQueuePriorities;
-    float                 pointSizeRange[2];
-    float                 lineWidthRange[2];
-    float                 pointSizeGranularity;
-    float                 lineWidthGranularity;
-    VkBool32              strictLines;
-    VkBool32              standardSampleLocations;
-    VkDeviceSize          optimalBufferCopyOffsetAlignment;
-    VkDeviceSize          optimalBufferCopyRowPitchAlignment;
-    VkDeviceSize          nonCoherentAtomSize;
-} VkPhysicalDeviceLimits;
-
-typedef struct VkPhysicalDeviceMemoryProperties {
-    uint32_t        memoryTypeCount;
-    VkMemoryType    memoryTypes[VK_MAX_MEMORY_TYPES];
-    uint32_t        memoryHeapCount;
-    VkMemoryHeap    memoryHeaps[VK_MAX_MEMORY_HEAPS];
-} VkPhysicalDeviceMemoryProperties;
-
-typedef struct VkPhysicalDeviceSparseProperties {
-    VkBool32    residencyStandard2DBlockShape;
-    VkBool32    residencyStandard2DMultisampleBlockShape;
-    VkBool32    residencyStandard3DBlockShape;
-    VkBool32    residencyAlignedMipSize;
-    VkBool32    residencyNonResidentStrict;
-} VkPhysicalDeviceSparseProperties;
-
-typedef struct VkPhysicalDeviceProperties {
-    uint32_t                            apiVersion;
-    uint32_t                            driverVersion;
-    uint32_t                            vendorID;
-    uint32_t                            deviceID;
-    VkPhysicalDeviceType                deviceType;
-    char                                deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
-    uint8_t                             pipelineCacheUUID[VK_UUID_SIZE];
-    VkPhysicalDeviceLimits              limits;
-    VkPhysicalDeviceSparseProperties    sparseProperties;
-} VkPhysicalDeviceProperties;
-
-typedef struct VkQueueFamilyProperties {
-    VkQueueFlags    queueFlags;
-    uint32_t        queueCount;
-    uint32_t        timestampValidBits;
-    VkExtent3D      minImageTransferGranularity;
-} VkQueueFamilyProperties;
-
-typedef struct VkDeviceQueueCreateInfo {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkDeviceQueueCreateFlags    flags;
-    uint32_t                    queueFamilyIndex;
-    uint32_t                    queueCount;
-    const float*                pQueuePriorities;
-} VkDeviceQueueCreateInfo;
-
-typedef struct VkDeviceCreateInfo {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkDeviceCreateFlags                flags;
-    uint32_t                           queueCreateInfoCount;
-    const VkDeviceQueueCreateInfo*     pQueueCreateInfos;
-    uint32_t                           enabledLayerCount;
-    const char* const*                 ppEnabledLayerNames;
-    uint32_t                           enabledExtensionCount;
-    const char* const*                 ppEnabledExtensionNames;
-    const VkPhysicalDeviceFeatures*    pEnabledFeatures;
-} VkDeviceCreateInfo;
-
-typedef struct VkExtensionProperties {
-    char        extensionName[VK_MAX_EXTENSION_NAME_SIZE];
-    uint32_t    specVersion;
-} VkExtensionProperties;
-
-typedef struct VkLayerProperties {
-    char        layerName[VK_MAX_EXTENSION_NAME_SIZE];
-    uint32_t    specVersion;
-    uint32_t    implementationVersion;
-    char        description[VK_MAX_DESCRIPTION_SIZE];
-} VkLayerProperties;
-
-typedef struct VkSubmitInfo {
-    VkStructureType                sType;
-    const void*                    pNext;
-    uint32_t                       waitSemaphoreCount;
-    const VkSemaphore*             pWaitSemaphores;
-    const VkPipelineStageFlags*    pWaitDstStageMask;
-    uint32_t                       commandBufferCount;
-    const VkCommandBuffer*         pCommandBuffers;
-    uint32_t                       signalSemaphoreCount;
-    const VkSemaphore*             pSignalSemaphores;
-} VkSubmitInfo;
-
-typedef struct VkMappedMemoryRange {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkDeviceMemory     memory;
-    VkDeviceSize       offset;
-    VkDeviceSize       size;
-} VkMappedMemoryRange;
-
-typedef struct VkMemoryAllocateInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkDeviceSize       allocationSize;
-    uint32_t           memoryTypeIndex;
-} VkMemoryAllocateInfo;
-
-typedef struct VkMemoryRequirements {
-    VkDeviceSize    size;
-    VkDeviceSize    alignment;
-    uint32_t        memoryTypeBits;
-} VkMemoryRequirements;
-
-typedef struct VkSparseMemoryBind {
-    VkDeviceSize               resourceOffset;
-    VkDeviceSize               size;
-    VkDeviceMemory             memory;
-    VkDeviceSize               memoryOffset;
-    VkSparseMemoryBindFlags    flags;
-} VkSparseMemoryBind;
-
-typedef struct VkSparseBufferMemoryBindInfo {
-    VkBuffer                     buffer;
-    uint32_t                     bindCount;
-    const VkSparseMemoryBind*    pBinds;
-} VkSparseBufferMemoryBindInfo;
-
-typedef struct VkSparseImageOpaqueMemoryBindInfo {
-    VkImage                      image;
-    uint32_t                     bindCount;
-    const VkSparseMemoryBind*    pBinds;
-} VkSparseImageOpaqueMemoryBindInfo;
-
-typedef struct VkImageSubresource {
-    VkImageAspectFlags    aspectMask;
-    uint32_t              mipLevel;
-    uint32_t              arrayLayer;
-} VkImageSubresource;
-
-typedef struct VkSparseImageMemoryBind {
-    VkImageSubresource         subresource;
-    VkOffset3D                 offset;
-    VkExtent3D                 extent;
-    VkDeviceMemory             memory;
-    VkDeviceSize               memoryOffset;
-    VkSparseMemoryBindFlags    flags;
-} VkSparseImageMemoryBind;
-
-typedef struct VkSparseImageMemoryBindInfo {
-    VkImage                           image;
-    uint32_t                          bindCount;
-    const VkSparseImageMemoryBind*    pBinds;
-} VkSparseImageMemoryBindInfo;
-
-typedef struct VkBindSparseInfo {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    uint32_t                                    waitSemaphoreCount;
-    const VkSemaphore*                          pWaitSemaphores;
-    uint32_t                                    bufferBindCount;
-    const VkSparseBufferMemoryBindInfo*         pBufferBinds;
-    uint32_t                                    imageOpaqueBindCount;
-    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds;
-    uint32_t                                    imageBindCount;
-    const VkSparseImageMemoryBindInfo*          pImageBinds;
-    uint32_t                                    signalSemaphoreCount;
-    const VkSemaphore*                          pSignalSemaphores;
-} VkBindSparseInfo;
-
-typedef struct VkSparseImageFormatProperties {
-    VkImageAspectFlags          aspectMask;
-    VkExtent3D                  imageGranularity;
-    VkSparseImageFormatFlags    flags;
-} VkSparseImageFormatProperties;
-
-typedef struct VkSparseImageMemoryRequirements {
-    VkSparseImageFormatProperties    formatProperties;
-    uint32_t                         imageMipTailFirstLod;
-    VkDeviceSize                     imageMipTailSize;
-    VkDeviceSize                     imageMipTailOffset;
-    VkDeviceSize                     imageMipTailStride;
-} VkSparseImageMemoryRequirements;
-
-typedef struct VkFenceCreateInfo {
-    VkStructureType       sType;
-    const void*           pNext;
-    VkFenceCreateFlags    flags;
-} VkFenceCreateInfo;
-
-typedef struct VkSemaphoreCreateInfo {
-    VkStructureType           sType;
-    const void*               pNext;
-    VkSemaphoreCreateFlags    flags;
-} VkSemaphoreCreateInfo;
-
-typedef struct VkEventCreateInfo {
-    VkStructureType       sType;
-    const void*           pNext;
-    VkEventCreateFlags    flags;
-} VkEventCreateInfo;
-
-typedef struct VkQueryPoolCreateInfo {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkQueryPoolCreateFlags           flags;
-    VkQueryType                      queryType;
-    uint32_t                         queryCount;
-    VkQueryPipelineStatisticFlags    pipelineStatistics;
-} VkQueryPoolCreateInfo;
-
-typedef struct VkBufferCreateInfo {
-    VkStructureType        sType;
-    const void*            pNext;
-    VkBufferCreateFlags    flags;
-    VkDeviceSize           size;
-    VkBufferUsageFlags     usage;
-    VkSharingMode          sharingMode;
-    uint32_t               queueFamilyIndexCount;
-    const uint32_t*        pQueueFamilyIndices;
-} VkBufferCreateInfo;
-
-typedef struct VkBufferViewCreateInfo {
-    VkStructureType            sType;
-    const void*                pNext;
-    VkBufferViewCreateFlags    flags;
-    VkBuffer                   buffer;
-    VkFormat                   format;
-    VkDeviceSize               offset;
-    VkDeviceSize               range;
-} VkBufferViewCreateInfo;
-
-typedef struct VkImageCreateInfo {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkImageCreateFlags       flags;
-    VkImageType              imageType;
-    VkFormat                 format;
-    VkExtent3D               extent;
-    uint32_t                 mipLevels;
-    uint32_t                 arrayLayers;
-    VkSampleCountFlagBits    samples;
-    VkImageTiling            tiling;
-    VkImageUsageFlags        usage;
-    VkSharingMode            sharingMode;
-    uint32_t                 queueFamilyIndexCount;
-    const uint32_t*          pQueueFamilyIndices;
-    VkImageLayout            initialLayout;
-} VkImageCreateInfo;
-
-typedef struct VkSubresourceLayout {
-    VkDeviceSize    offset;
-    VkDeviceSize    size;
-    VkDeviceSize    rowPitch;
-    VkDeviceSize    arrayPitch;
-    VkDeviceSize    depthPitch;
-} VkSubresourceLayout;
-
-typedef struct VkComponentMapping {
-    VkComponentSwizzle    r;
-    VkComponentSwizzle    g;
-    VkComponentSwizzle    b;
-    VkComponentSwizzle    a;
-} VkComponentMapping;
-
-typedef struct VkImageViewCreateInfo {
-    VkStructureType            sType;
-    const void*                pNext;
-    VkImageViewCreateFlags     flags;
-    VkImage                    image;
-    VkImageViewType            viewType;
-    VkFormat                   format;
-    VkComponentMapping         components;
-    VkImageSubresourceRange    subresourceRange;
-} VkImageViewCreateInfo;
-
-typedef struct VkShaderModuleCreateInfo {
-    VkStructureType              sType;
-    const void*                  pNext;
-    VkShaderModuleCreateFlags    flags;
-    size_t                       codeSize;
-    const uint32_t*              pCode;
-} VkShaderModuleCreateInfo;
-
-typedef struct VkPipelineCacheCreateInfo {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkPipelineCacheCreateFlags    flags;
-    size_t                        initialDataSize;
-    const void*                   pInitialData;
-} VkPipelineCacheCreateInfo;
-
-typedef struct VkSpecializationMapEntry {
-    uint32_t    constantID;
-    uint32_t    offset;
-    size_t      size;
-} VkSpecializationMapEntry;
-
-typedef struct VkSpecializationInfo {
-    uint32_t                           mapEntryCount;
-    const VkSpecializationMapEntry*    pMapEntries;
-    size_t                             dataSize;
-    const void*                        pData;
-} VkSpecializationInfo;
-
-typedef struct VkPipelineShaderStageCreateInfo {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    VkPipelineShaderStageCreateFlags    flags;
-    VkShaderStageFlagBits               stage;
-    VkShaderModule                      module;
-    const char*                         pName;
-    const VkSpecializationInfo*         pSpecializationInfo;
-} VkPipelineShaderStageCreateInfo;
-
-typedef struct VkComputePipelineCreateInfo {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkPipelineCreateFlags              flags;
-    VkPipelineShaderStageCreateInfo    stage;
-    VkPipelineLayout                   layout;
-    VkPipeline                         basePipelineHandle;
-    int32_t                            basePipelineIndex;
-} VkComputePipelineCreateInfo;
-
-typedef struct VkVertexInputBindingDescription {
-    uint32_t             binding;
-    uint32_t             stride;
-    VkVertexInputRate    inputRate;
-} VkVertexInputBindingDescription;
-
-typedef struct VkVertexInputAttributeDescription {
-    uint32_t    location;
-    uint32_t    binding;
-    VkFormat    format;
-    uint32_t    offset;
-} VkVertexInputAttributeDescription;
-
-typedef struct VkPipelineVertexInputStateCreateInfo {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    VkPipelineVertexInputStateCreateFlags       flags;
-    uint32_t                                    vertexBindingDescriptionCount;
-    const VkVertexInputBindingDescription*      pVertexBindingDescriptions;
-    uint32_t                                    vertexAttributeDescriptionCount;
-    const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions;
-} VkPipelineVertexInputStateCreateInfo;
-
-typedef struct VkPipelineInputAssemblyStateCreateInfo {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    VkPipelineInputAssemblyStateCreateFlags    flags;
-    VkPrimitiveTopology                        topology;
-    VkBool32                                   primitiveRestartEnable;
-} VkPipelineInputAssemblyStateCreateInfo;
-
-typedef struct VkPipelineTessellationStateCreateInfo {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    VkPipelineTessellationStateCreateFlags    flags;
-    uint32_t                                  patchControlPoints;
-} VkPipelineTessellationStateCreateInfo;
-
-typedef struct VkViewport {
-    float    x;
-    float    y;
-    float    width;
-    float    height;
-    float    minDepth;
-    float    maxDepth;
-} VkViewport;
-
-typedef struct VkPipelineViewportStateCreateInfo {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkPipelineViewportStateCreateFlags    flags;
-    uint32_t                              viewportCount;
-    const VkViewport*                     pViewports;
-    uint32_t                              scissorCount;
-    const VkRect2D*                       pScissors;
-} VkPipelineViewportStateCreateInfo;
-
-typedef struct VkPipelineRasterizationStateCreateInfo {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    VkPipelineRasterizationStateCreateFlags    flags;
-    VkBool32                                   depthClampEnable;
-    VkBool32                                   rasterizerDiscardEnable;
-    VkPolygonMode                              polygonMode;
-    VkCullModeFlags                            cullMode;
-    VkFrontFace                                frontFace;
-    VkBool32                                   depthBiasEnable;
-    float                                      depthBiasConstantFactor;
-    float                                      depthBiasClamp;
-    float                                      depthBiasSlopeFactor;
-    float                                      lineWidth;
-} VkPipelineRasterizationStateCreateInfo;
-
-typedef struct VkPipelineMultisampleStateCreateInfo {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkPipelineMultisampleStateCreateFlags    flags;
-    VkSampleCountFlagBits                    rasterizationSamples;
-    VkBool32                                 sampleShadingEnable;
-    float                                    minSampleShading;
-    const VkSampleMask*                      pSampleMask;
-    VkBool32                                 alphaToCoverageEnable;
-    VkBool32                                 alphaToOneEnable;
-} VkPipelineMultisampleStateCreateInfo;
-
-typedef struct VkStencilOpState {
-    VkStencilOp    failOp;
-    VkStencilOp    passOp;
-    VkStencilOp    depthFailOp;
-    VkCompareOp    compareOp;
-    uint32_t       compareMask;
-    uint32_t       writeMask;
-    uint32_t       reference;
-} VkStencilOpState;
-
-typedef struct VkPipelineDepthStencilStateCreateInfo {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    VkPipelineDepthStencilStateCreateFlags    flags;
-    VkBool32                                  depthTestEnable;
-    VkBool32                                  depthWriteEnable;
-    VkCompareOp                               depthCompareOp;
-    VkBool32                                  depthBoundsTestEnable;
-    VkBool32                                  stencilTestEnable;
-    VkStencilOpState                          front;
-    VkStencilOpState                          back;
-    float                                     minDepthBounds;
-    float                                     maxDepthBounds;
-} VkPipelineDepthStencilStateCreateInfo;
-
-typedef struct VkPipelineColorBlendAttachmentState {
-    VkBool32                 blendEnable;
-    VkBlendFactor            srcColorBlendFactor;
-    VkBlendFactor            dstColorBlendFactor;
-    VkBlendOp                colorBlendOp;
-    VkBlendFactor            srcAlphaBlendFactor;
-    VkBlendFactor            dstAlphaBlendFactor;
-    VkBlendOp                alphaBlendOp;
-    VkColorComponentFlags    colorWriteMask;
-} VkPipelineColorBlendAttachmentState;
-
-typedef struct VkPipelineColorBlendStateCreateInfo {
-    VkStructureType                               sType;
-    const void*                                   pNext;
-    VkPipelineColorBlendStateCreateFlags          flags;
-    VkBool32                                      logicOpEnable;
-    VkLogicOp                                     logicOp;
-    uint32_t                                      attachmentCount;
-    const VkPipelineColorBlendAttachmentState*    pAttachments;
-    float                                         blendConstants[4];
-} VkPipelineColorBlendStateCreateInfo;
-
-typedef struct VkPipelineDynamicStateCreateInfo {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkPipelineDynamicStateCreateFlags    flags;
-    uint32_t                             dynamicStateCount;
-    const VkDynamicState*                pDynamicStates;
-} VkPipelineDynamicStateCreateInfo;
-
-typedef struct VkGraphicsPipelineCreateInfo {
-    VkStructureType                                  sType;
-    const void*                                      pNext;
-    VkPipelineCreateFlags                            flags;
-    uint32_t                                         stageCount;
-    const VkPipelineShaderStageCreateInfo*           pStages;
-    const VkPipelineVertexInputStateCreateInfo*      pVertexInputState;
-    const VkPipelineInputAssemblyStateCreateInfo*    pInputAssemblyState;
-    const VkPipelineTessellationStateCreateInfo*     pTessellationState;
-    const VkPipelineViewportStateCreateInfo*         pViewportState;
-    const VkPipelineRasterizationStateCreateInfo*    pRasterizationState;
-    const VkPipelineMultisampleStateCreateInfo*      pMultisampleState;
-    const VkPipelineDepthStencilStateCreateInfo*     pDepthStencilState;
-    const VkPipelineColorBlendStateCreateInfo*       pColorBlendState;
-    const VkPipelineDynamicStateCreateInfo*          pDynamicState;
-    VkPipelineLayout                                 layout;
-    VkRenderPass                                     renderPass;
-    uint32_t                                         subpass;
-    VkPipeline                                       basePipelineHandle;
-    int32_t                                          basePipelineIndex;
-} VkGraphicsPipelineCreateInfo;
-
-typedef struct VkPushConstantRange {
-    VkShaderStageFlags    stageFlags;
-    uint32_t              offset;
-    uint32_t              size;
-} VkPushConstantRange;
-
-typedef struct VkPipelineLayoutCreateInfo {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkPipelineLayoutCreateFlags     flags;
-    uint32_t                        setLayoutCount;
-    const VkDescriptorSetLayout*    pSetLayouts;
-    uint32_t                        pushConstantRangeCount;
-    const VkPushConstantRange*      pPushConstantRanges;
-} VkPipelineLayoutCreateInfo;
-
-typedef struct VkSamplerCreateInfo {
-    VkStructureType         sType;
-    const void*             pNext;
-    VkSamplerCreateFlags    flags;
-    VkFilter                magFilter;
-    VkFilter                minFilter;
-    VkSamplerMipmapMode     mipmapMode;
-    VkSamplerAddressMode    addressModeU;
-    VkSamplerAddressMode    addressModeV;
-    VkSamplerAddressMode    addressModeW;
-    float                   mipLodBias;
-    VkBool32                anisotropyEnable;
-    float                   maxAnisotropy;
-    VkBool32                compareEnable;
-    VkCompareOp             compareOp;
-    float                   minLod;
-    float                   maxLod;
-    VkBorderColor           borderColor;
-    VkBool32                unnormalizedCoordinates;
-} VkSamplerCreateInfo;
-
-typedef struct VkCopyDescriptorSet {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkDescriptorSet    srcSet;
-    uint32_t           srcBinding;
-    uint32_t           srcArrayElement;
-    VkDescriptorSet    dstSet;
-    uint32_t           dstBinding;
-    uint32_t           dstArrayElement;
-    uint32_t           descriptorCount;
-} VkCopyDescriptorSet;
-
-typedef struct VkDescriptorBufferInfo {
-    VkBuffer        buffer;
-    VkDeviceSize    offset;
-    VkDeviceSize    range;
-} VkDescriptorBufferInfo;
-
-typedef struct VkDescriptorImageInfo {
-    VkSampler        sampler;
-    VkImageView      imageView;
-    VkImageLayout    imageLayout;
-} VkDescriptorImageInfo;
-
-typedef struct VkDescriptorPoolSize {
-    VkDescriptorType    type;
-    uint32_t            descriptorCount;
-} VkDescriptorPoolSize;
-
-typedef struct VkDescriptorPoolCreateInfo {
-    VkStructureType                sType;
-    const void*                    pNext;
-    VkDescriptorPoolCreateFlags    flags;
-    uint32_t                       maxSets;
-    uint32_t                       poolSizeCount;
-    const VkDescriptorPoolSize*    pPoolSizes;
-} VkDescriptorPoolCreateInfo;
-
-typedef struct VkDescriptorSetAllocateInfo {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkDescriptorPool                descriptorPool;
-    uint32_t                        descriptorSetCount;
-    const VkDescriptorSetLayout*    pSetLayouts;
-} VkDescriptorSetAllocateInfo;
-
-typedef struct VkDescriptorSetLayoutBinding {
-    uint32_t              binding;
-    VkDescriptorType      descriptorType;
-    uint32_t              descriptorCount;
-    VkShaderStageFlags    stageFlags;
-    const VkSampler*      pImmutableSamplers;
-} VkDescriptorSetLayoutBinding;
-
-typedef struct VkDescriptorSetLayoutCreateInfo {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    VkDescriptorSetLayoutCreateFlags       flags;
-    uint32_t                               bindingCount;
-    const VkDescriptorSetLayoutBinding*    pBindings;
-} VkDescriptorSetLayoutCreateInfo;
-
-typedef struct VkWriteDescriptorSet {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkDescriptorSet                  dstSet;
-    uint32_t                         dstBinding;
-    uint32_t                         dstArrayElement;
-    uint32_t                         descriptorCount;
-    VkDescriptorType                 descriptorType;
-    const VkDescriptorImageInfo*     pImageInfo;
-    const VkDescriptorBufferInfo*    pBufferInfo;
-    const VkBufferView*              pTexelBufferView;
-} VkWriteDescriptorSet;
-
-typedef struct VkAttachmentDescription {
-    VkAttachmentDescriptionFlags    flags;
-    VkFormat                        format;
-    VkSampleCountFlagBits           samples;
-    VkAttachmentLoadOp              loadOp;
-    VkAttachmentStoreOp             storeOp;
-    VkAttachmentLoadOp              stencilLoadOp;
-    VkAttachmentStoreOp             stencilStoreOp;
-    VkImageLayout                   initialLayout;
-    VkImageLayout                   finalLayout;
-} VkAttachmentDescription;
-
-typedef struct VkAttachmentReference {
-    uint32_t         attachment;
-    VkImageLayout    layout;
-} VkAttachmentReference;
-
-typedef struct VkFramebufferCreateInfo {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    VkFramebufferCreateFlags               flags;
-    VkRenderPass                           renderPass;
-    uint32_t                               attachmentCount;
-    
-                const VkImageView*    pAttachments;
-    uint32_t                               width;
-    uint32_t                               height;
-    uint32_t                               layers;
-} VkFramebufferCreateInfo;
-
-typedef struct VkSubpassDescription {
-    VkSubpassDescriptionFlags       flags;
-    VkPipelineBindPoint             pipelineBindPoint;
-    uint32_t                        inputAttachmentCount;
-    const VkAttachmentReference*    pInputAttachments;
-    uint32_t                        colorAttachmentCount;
-    const VkAttachmentReference*    pColorAttachments;
-    const VkAttachmentReference*    pResolveAttachments;
-    const VkAttachmentReference*    pDepthStencilAttachment;
-    uint32_t                        preserveAttachmentCount;
-    const uint32_t*                 pPreserveAttachments;
-} VkSubpassDescription;
-
-typedef struct VkSubpassDependency {
-    uint32_t                srcSubpass;
-    uint32_t                dstSubpass;
-    VkPipelineStageFlags    srcStageMask;
-    VkPipelineStageFlags    dstStageMask;
-    VkAccessFlags           srcAccessMask;
-    VkAccessFlags           dstAccessMask;
-    VkDependencyFlags       dependencyFlags;
-} VkSubpassDependency;
-
-typedef struct VkRenderPassCreateInfo {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkRenderPassCreateFlags           flags;
-    uint32_t                          attachmentCount;
-    const VkAttachmentDescription*    pAttachments;
-    uint32_t                          subpassCount;
-    const VkSubpassDescription*       pSubpasses;
-    uint32_t                          dependencyCount;
-    const VkSubpassDependency*        pDependencies;
-} VkRenderPassCreateInfo;
-
-typedef struct VkCommandPoolCreateInfo {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkCommandPoolCreateFlags    flags;
-    uint32_t                    queueFamilyIndex;
-} VkCommandPoolCreateInfo;
-
-typedef struct VkCommandBufferAllocateInfo {
-    VkStructureType         sType;
-    const void*             pNext;
-    VkCommandPool           commandPool;
-    VkCommandBufferLevel    level;
-    uint32_t                commandBufferCount;
-} VkCommandBufferAllocateInfo;
-
-typedef struct VkCommandBufferInheritanceInfo {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkRenderPass                     renderPass;
-    uint32_t                         subpass;
-    VkFramebuffer                    framebuffer;
-    VkBool32                         occlusionQueryEnable;
-    VkQueryControlFlags              queryFlags;
-    VkQueryPipelineStatisticFlags    pipelineStatistics;
-} VkCommandBufferInheritanceInfo;
-
-typedef struct VkCommandBufferBeginInfo {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkCommandBufferUsageFlags                flags;
-    const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
-} VkCommandBufferBeginInfo;
-
-typedef struct VkBufferCopy {
-    VkDeviceSize    srcOffset;
-    VkDeviceSize    dstOffset;
-    VkDeviceSize    size;
-} VkBufferCopy;
-
-typedef struct VkImageSubresourceLayers {
-    VkImageAspectFlags    aspectMask;
-    uint32_t              mipLevel;
-    uint32_t              baseArrayLayer;
-    uint32_t              layerCount;
-} VkImageSubresourceLayers;
-
-typedef struct VkBufferImageCopy {
-    VkDeviceSize                bufferOffset;
-    uint32_t                    bufferRowLength;
-    uint32_t                    bufferImageHeight;
-    VkImageSubresourceLayers    imageSubresource;
-    VkOffset3D                  imageOffset;
-    VkExtent3D                  imageExtent;
-} VkBufferImageCopy;
-
-typedef union VkClearColorValue {
-    float       float32[4];
-    int32_t     int32[4];
-    uint32_t    uint32[4];
-} VkClearColorValue;
-
-typedef struct VkClearDepthStencilValue {
-    float       depth;
-    uint32_t    stencil;
-} VkClearDepthStencilValue;
-
-typedef union VkClearValue {
-    VkClearColorValue           color;
-    VkClearDepthStencilValue    depthStencil;
-} VkClearValue;
-
-typedef struct VkClearAttachment {
-    VkImageAspectFlags    aspectMask;
-    uint32_t              colorAttachment;
-    VkClearValue          clearValue;
-} VkClearAttachment;
-
-typedef struct VkClearRect {
-    VkRect2D    rect;
-    uint32_t    baseArrayLayer;
-    uint32_t    layerCount;
-} VkClearRect;
-
-typedef struct VkImageBlit {
-    VkImageSubresourceLayers    srcSubresource;
-    VkOffset3D                  srcOffsets[2];
-    VkImageSubresourceLayers    dstSubresource;
-    VkOffset3D                  dstOffsets[2];
-} VkImageBlit;
-
-typedef struct VkImageCopy {
-    VkImageSubresourceLayers    srcSubresource;
-    VkOffset3D                  srcOffset;
-    VkImageSubresourceLayers    dstSubresource;
-    VkOffset3D                  dstOffset;
-    VkExtent3D                  extent;
-} VkImageCopy;
-
-typedef struct VkImageResolve {
-    VkImageSubresourceLayers    srcSubresource;
-    VkOffset3D                  srcOffset;
-    VkImageSubresourceLayers    dstSubresource;
-    VkOffset3D                  dstOffset;
-    VkExtent3D                  extent;
-} VkImageResolve;
-
-typedef struct VkRenderPassBeginInfo {
-    VkStructureType        sType;
-    const void*            pNext;
-    VkRenderPass           renderPass;
-    VkFramebuffer          framebuffer;
-    VkRect2D               renderArea;
-    uint32_t               clearValueCount;
-    const VkClearValue*    pClearValues;
-} VkRenderPassBeginInfo;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
-typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
-typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
-typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
-typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
-typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
-typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
-typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
-typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
-typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
-typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
-typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
-typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
-typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
-typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
-typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
-typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
-typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
-typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
-typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
-typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
-typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
-typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
-typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
-typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
-typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
-typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
-typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
-typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
-typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
-typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
-typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
-typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
-typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
-typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
-typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
-typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
-typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
-typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
-typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
-typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
-typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
-typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
-typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
-typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
-typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports);
-typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors);
-typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
-typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
-typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
-typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
-typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
-typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
-typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
-typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
-typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
-typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
-typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
-typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
-typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
-typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
-typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
-typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
-typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
-typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
-typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
-typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
-typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
-typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
-typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
-typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
-typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
-typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
-    const VkInstanceCreateInfo*                 pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkInstance*                                 pInstance);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
-    VkInstance                                  instance,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
-    VkInstance                                  instance,
-    uint32_t*                                   pPhysicalDeviceCount,
-    VkPhysicalDevice*                           pPhysicalDevices);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceFeatures*                   pFeatures);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
-    VkPhysicalDevice                            physicalDevice,
-    VkFormat                                    format,
-    VkFormatProperties*                         pFormatProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
-    VkPhysicalDevice                            physicalDevice,
-    VkFormat                                    format,
-    VkImageType                                 type,
-    VkImageTiling                               tiling,
-    VkImageUsageFlags                           usage,
-    VkImageCreateFlags                          flags,
-    VkImageFormatProperties*                    pImageFormatProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceProperties*                 pProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pQueueFamilyPropertyCount,
-    VkQueueFamilyProperties*                    pQueueFamilyProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceMemoryProperties*           pMemoryProperties);
-
-VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
-    VkInstance                                  instance,
-    const char*                                 pName);
-
-VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
-    VkDevice                                    device,
-    const char*                                 pName);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
-    VkPhysicalDevice                            physicalDevice,
-    const VkDeviceCreateInfo*                   pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDevice*                                   pDevice);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
-    VkDevice                                    device,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
-    const char*                                 pLayerName,
-    uint32_t*                                   pPropertyCount,
-    VkExtensionProperties*                      pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
-    VkPhysicalDevice                            physicalDevice,
-    const char*                                 pLayerName,
-    uint32_t*                                   pPropertyCount,
-    VkExtensionProperties*                      pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
-    uint32_t*                                   pPropertyCount,
-    VkLayerProperties*                          pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pPropertyCount,
-    VkLayerProperties*                          pProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
-    VkDevice                                    device,
-    uint32_t                                    queueFamilyIndex,
-    uint32_t                                    queueIndex,
-    VkQueue*                                    pQueue);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
-    VkQueue                                     queue,
-    uint32_t                                    submitCount,
-    const VkSubmitInfo*                         pSubmits,
-    VkFence                                     fence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
-    VkQueue                                     queue);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
-    VkDevice                                    device);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
-    VkDevice                                    device,
-    const VkMemoryAllocateInfo*                 pAllocateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDeviceMemory*                             pMemory);
-
-VKAPI_ATTR void VKAPI_CALL vkFreeMemory(
-    VkDevice                                    device,
-    VkDeviceMemory                              memory,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
-    VkDevice                                    device,
-    VkDeviceMemory                              memory,
-    VkDeviceSize                                offset,
-    VkDeviceSize                                size,
-    VkMemoryMapFlags                            flags,
-    void**                                      ppData);
-
-VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
-    VkDevice                                    device,
-    VkDeviceMemory                              memory);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
-    VkDevice                                    device,
-    uint32_t                                    memoryRangeCount,
-    const VkMappedMemoryRange*                  pMemoryRanges);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
-    VkDevice                                    device,
-    uint32_t                                    memoryRangeCount,
-    const VkMappedMemoryRange*                  pMemoryRanges);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
-    VkDevice                                    device,
-    VkDeviceMemory                              memory,
-    VkDeviceSize*                               pCommittedMemoryInBytes);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
-    VkDevice                                    device,
-    VkBuffer                                    buffer,
-    VkDeviceMemory                              memory,
-    VkDeviceSize                                memoryOffset);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
-    VkDevice                                    device,
-    VkImage                                     image,
-    VkDeviceMemory                              memory,
-    VkDeviceSize                                memoryOffset);
-
-VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
-    VkDevice                                    device,
-    VkBuffer                                    buffer,
-    VkMemoryRequirements*                       pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
-    VkDevice                                    device,
-    VkImage                                     image,
-    VkMemoryRequirements*                       pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
-    VkDevice                                    device,
-    VkImage                                     image,
-    uint32_t*                                   pSparseMemoryRequirementCount,
-    VkSparseImageMemoryRequirements*            pSparseMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
-    VkPhysicalDevice                            physicalDevice,
-    VkFormat                                    format,
-    VkImageType                                 type,
-    VkSampleCountFlagBits                       samples,
-    VkImageUsageFlags                           usage,
-    VkImageTiling                               tiling,
-    uint32_t*                                   pPropertyCount,
-    VkSparseImageFormatProperties*              pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
-    VkQueue                                     queue,
-    uint32_t                                    bindInfoCount,
-    const VkBindSparseInfo*                     pBindInfo,
-    VkFence                                     fence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
-    VkDevice                                    device,
-    const VkFenceCreateInfo*                    pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkFence*                                    pFence);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
-    VkDevice                                    device,
-    VkFence                                     fence,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
-    VkDevice                                    device,
-    uint32_t                                    fenceCount,
-    const VkFence*                              pFences);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
-    VkDevice                                    device,
-    VkFence                                     fence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
-    VkDevice                                    device,
-    uint32_t                                    fenceCount,
-    const VkFence*                              pFences,
-    VkBool32                                    waitAll,
-    uint64_t                                    timeout);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
-    VkDevice                                    device,
-    const VkSemaphoreCreateInfo*                pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSemaphore*                                pSemaphore);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
-    VkDevice                                    device,
-    VkSemaphore                                 semaphore,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
-    VkDevice                                    device,
-    const VkEventCreateInfo*                    pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkEvent*                                    pEvent);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
-    VkDevice                                    device,
-    VkEvent                                     event,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
-    VkDevice                                    device,
-    VkEvent                                     event);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
-    VkDevice                                    device,
-    VkEvent                                     event);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
-    VkDevice                                    device,
-    VkEvent                                     event);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
-    VkDevice                                    device,
-    const VkQueryPoolCreateInfo*                pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkQueryPool*                                pQueryPool);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(
-    VkDevice                                    device,
-    VkQueryPool                                 queryPool,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
-    VkDevice                                    device,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    firstQuery,
-    uint32_t                                    queryCount,
-    size_t                                      dataSize,
-    void*                                       pData,
-    VkDeviceSize                                stride,
-    VkQueryResultFlags                          flags);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
-    VkDevice                                    device,
-    const VkBufferCreateInfo*                   pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkBuffer*                                   pBuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
-    VkDevice                                    device,
-    VkBuffer                                    buffer,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
-    VkDevice                                    device,
-    const VkBufferViewCreateInfo*               pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkBufferView*                               pView);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
-    VkDevice                                    device,
-    VkBufferView                                bufferView,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
-    VkDevice                                    device,
-    const VkImageCreateInfo*                    pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkImage*                                    pImage);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
-    VkDevice                                    device,
-    VkImage                                     image,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
-    VkDevice                                    device,
-    VkImage                                     image,
-    const VkImageSubresource*                   pSubresource,
-    VkSubresourceLayout*                        pLayout);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
-    VkDevice                                    device,
-    const VkImageViewCreateInfo*                pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkImageView*                                pView);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
-    VkDevice                                    device,
-    VkImageView                                 imageView,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
-    VkDevice                                    device,
-    const VkShaderModuleCreateInfo*             pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkShaderModule*                             pShaderModule);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(
-    VkDevice                                    device,
-    VkShaderModule                              shaderModule,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
-    VkDevice                                    device,
-    const VkPipelineCacheCreateInfo*            pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkPipelineCache*                            pPipelineCache);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
-    VkDevice                                    device,
-    VkPipelineCache                             pipelineCache,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
-    VkDevice                                    device,
-    VkPipelineCache                             pipelineCache,
-    size_t*                                     pDataSize,
-    void*                                       pData);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
-    VkDevice                                    device,
-    VkPipelineCache                             dstCache,
-    uint32_t                                    srcCacheCount,
-    const VkPipelineCache*                      pSrcCaches);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
-    VkDevice                                    device,
-    VkPipelineCache                             pipelineCache,
-    uint32_t                                    createInfoCount,
-    const VkGraphicsPipelineCreateInfo*         pCreateInfos,
-    const VkAllocationCallbacks*                pAllocator,
-    VkPipeline*                                 pPipelines);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
-    VkDevice                                    device,
-    VkPipelineCache                             pipelineCache,
-    uint32_t                                    createInfoCount,
-    const VkComputePipelineCreateInfo*          pCreateInfos,
-    const VkAllocationCallbacks*                pAllocator,
-    VkPipeline*                                 pPipelines);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
-    VkDevice                                    device,
-    VkPipeline                                  pipeline,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
-    VkDevice                                    device,
-    const VkPipelineLayoutCreateInfo*           pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkPipelineLayout*                           pPipelineLayout);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
-    VkDevice                                    device,
-    VkPipelineLayout                            pipelineLayout,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
-    VkDevice                                    device,
-    const VkSamplerCreateInfo*                  pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSampler*                                  pSampler);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
-    VkDevice                                    device,
-    VkSampler                                   sampler,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
-    VkDevice                                    device,
-    const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDescriptorSetLayout*                      pSetLayout);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
-    VkDevice                                    device,
-    VkDescriptorSetLayout                       descriptorSetLayout,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
-    VkDevice                                    device,
-    const VkDescriptorPoolCreateInfo*           pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDescriptorPool*                           pDescriptorPool);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(
-    VkDevice                                    device,
-    VkDescriptorPool                            descriptorPool,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
-    VkDevice                                    device,
-    VkDescriptorPool                            descriptorPool,
-    VkDescriptorPoolResetFlags                  flags);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
-    VkDevice                                    device,
-    const VkDescriptorSetAllocateInfo*          pAllocateInfo,
-    VkDescriptorSet*                            pDescriptorSets);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
-    VkDevice                                    device,
-    VkDescriptorPool                            descriptorPool,
-    uint32_t                                    descriptorSetCount,
-    const VkDescriptorSet*                      pDescriptorSets);
-
-VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
-    VkDevice                                    device,
-    uint32_t                                    descriptorWriteCount,
-    const VkWriteDescriptorSet*                 pDescriptorWrites,
-    uint32_t                                    descriptorCopyCount,
-    const VkCopyDescriptorSet*                  pDescriptorCopies);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
-    VkDevice                                    device,
-    const VkFramebufferCreateInfo*              pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkFramebuffer*                              pFramebuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
-    VkDevice                                    device,
-    VkFramebuffer                               framebuffer,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
-    VkDevice                                    device,
-    const VkRenderPassCreateInfo*               pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkRenderPass*                               pRenderPass);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
-    VkDevice                                    device,
-    VkRenderPass                                renderPass,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
-    VkDevice                                    device,
-    VkRenderPass                                renderPass,
-    VkExtent2D*                                 pGranularity);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
-    VkDevice                                    device,
-    const VkCommandPoolCreateInfo*              pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkCommandPool*                              pCommandPool);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(
-    VkDevice                                    device,
-    VkCommandPool                               commandPool,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
-    VkDevice                                    device,
-    VkCommandPool                               commandPool,
-    VkCommandPoolResetFlags                     flags);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
-    VkDevice                                    device,
-    const VkCommandBufferAllocateInfo*          pAllocateInfo,
-    VkCommandBuffer*                            pCommandBuffers);
-
-VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
-    VkDevice                                    device,
-    VkCommandPool                               commandPool,
-    uint32_t                                    commandBufferCount,
-    const VkCommandBuffer*                      pCommandBuffers);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
-    VkCommandBuffer                             commandBuffer,
-    const VkCommandBufferBeginInfo*             pBeginInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
-    VkCommandBuffer                             commandBuffer);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
-    VkCommandBuffer                             commandBuffer,
-    VkCommandBufferResetFlags                   flags);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineBindPoint                         pipelineBindPoint,
-    VkPipeline                                  pipeline);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstViewport,
-    uint32_t                                    viewportCount,
-    const VkViewport*                           pViewports);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstScissor,
-    uint32_t                                    scissorCount,
-    const VkRect2D*                             pScissors);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
-    VkCommandBuffer                             commandBuffer,
-    float                                       lineWidth);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
-    VkCommandBuffer                             commandBuffer,
-    float                                       depthBiasConstantFactor,
-    float                                       depthBiasClamp,
-    float                                       depthBiasSlopeFactor);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
-    VkCommandBuffer                             commandBuffer,
-    const float                                 blendConstants[4]);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
-    VkCommandBuffer                             commandBuffer,
-    float                                       minDepthBounds,
-    float                                       maxDepthBounds);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
-    VkCommandBuffer                             commandBuffer,
-    VkStencilFaceFlags                          faceMask,
-    uint32_t                                    compareMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
-    VkCommandBuffer                             commandBuffer,
-    VkStencilFaceFlags                          faceMask,
-    uint32_t                                    writeMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
-    VkCommandBuffer                             commandBuffer,
-    VkStencilFaceFlags                          faceMask,
-    uint32_t                                    reference);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineBindPoint                         pipelineBindPoint,
-    VkPipelineLayout                            layout,
-    uint32_t                                    firstSet,
-    uint32_t                                    descriptorSetCount,
-    const VkDescriptorSet*                      pDescriptorSets,
-    uint32_t                                    dynamicOffsetCount,
-    const uint32_t*                             pDynamicOffsets);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    VkIndexType                                 indexType);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstBinding,
-    uint32_t                                    bindingCount,
-    const VkBuffer*                             pBuffers,
-    const VkDeviceSize*                         pOffsets);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    vertexCount,
-    uint32_t                                    instanceCount,
-    uint32_t                                    firstVertex,
-    uint32_t                                    firstInstance);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    indexCount,
-    uint32_t                                    instanceCount,
-    uint32_t                                    firstIndex,
-    int32_t                                     vertexOffset,
-    uint32_t                                    firstInstance);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    uint32_t                                    drawCount,
-    uint32_t                                    stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    uint32_t                                    drawCount,
-    uint32_t                                    stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    groupCountX,
-    uint32_t                                    groupCountY,
-    uint32_t                                    groupCountZ);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    srcBuffer,
-    VkBuffer                                    dstBuffer,
-    uint32_t                                    regionCount,
-    const VkBufferCopy*                         pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
-    VkCommandBuffer                             commandBuffer,
-    VkImage                                     srcImage,
-    VkImageLayout                               srcImageLayout,
-    VkImage                                     dstImage,
-    VkImageLayout                               dstImageLayout,
-    uint32_t                                    regionCount,
-    const VkImageCopy*                          pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
-    VkCommandBuffer                             commandBuffer,
-    VkImage                                     srcImage,
-    VkImageLayout                               srcImageLayout,
-    VkImage                                     dstImage,
-    VkImageLayout                               dstImageLayout,
-    uint32_t                                    regionCount,
-    const VkImageBlit*                          pRegions,
-    VkFilter                                    filter);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    srcBuffer,
-    VkImage                                     dstImage,
-    VkImageLayout                               dstImageLayout,
-    uint32_t                                    regionCount,
-    const VkBufferImageCopy*                    pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
-    VkCommandBuffer                             commandBuffer,
-    VkImage                                     srcImage,
-    VkImageLayout                               srcImageLayout,
-    VkBuffer                                    dstBuffer,
-    uint32_t                                    regionCount,
-    const VkBufferImageCopy*                    pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    dstBuffer,
-    VkDeviceSize                                dstOffset,
-    VkDeviceSize                                dataSize,
-    const void*                                 pData);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    dstBuffer,
-    VkDeviceSize                                dstOffset,
-    VkDeviceSize                                size,
-    uint32_t                                    data);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
-    VkCommandBuffer                             commandBuffer,
-    VkImage                                     image,
-    VkImageLayout                               imageLayout,
-    const VkClearColorValue*                    pColor,
-    uint32_t                                    rangeCount,
-    const VkImageSubresourceRange*              pRanges);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
-    VkCommandBuffer                             commandBuffer,
-    VkImage                                     image,
-    VkImageLayout                               imageLayout,
-    const VkClearDepthStencilValue*             pDepthStencil,
-    uint32_t                                    rangeCount,
-    const VkImageSubresourceRange*              pRanges);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    attachmentCount,
-    const VkClearAttachment*                    pAttachments,
-    uint32_t                                    rectCount,
-    const VkClearRect*                          pRects);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
-    VkCommandBuffer                             commandBuffer,
-    VkImage                                     srcImage,
-    VkImageLayout                               srcImageLayout,
-    VkImage                                     dstImage,
-    VkImageLayout                               dstImageLayout,
-    uint32_t                                    regionCount,
-    const VkImageResolve*                       pRegions);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
-    VkCommandBuffer                             commandBuffer,
-    VkEvent                                     event,
-    VkPipelineStageFlags                        stageMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
-    VkCommandBuffer                             commandBuffer,
-    VkEvent                                     event,
-    VkPipelineStageFlags                        stageMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    eventCount,
-    const VkEvent*                              pEvents,
-    VkPipelineStageFlags                        srcStageMask,
-    VkPipelineStageFlags                        dstStageMask,
-    uint32_t                                    memoryBarrierCount,
-    const VkMemoryBarrier*                      pMemoryBarriers,
-    uint32_t                                    bufferMemoryBarrierCount,
-    const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
-    uint32_t                                    imageMemoryBarrierCount,
-    const VkImageMemoryBarrier*                 pImageMemoryBarriers);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineStageFlags                        srcStageMask,
-    VkPipelineStageFlags                        dstStageMask,
-    VkDependencyFlags                           dependencyFlags,
-    uint32_t                                    memoryBarrierCount,
-    const VkMemoryBarrier*                      pMemoryBarriers,
-    uint32_t                                    bufferMemoryBarrierCount,
-    const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
-    uint32_t                                    imageMemoryBarrierCount,
-    const VkImageMemoryBarrier*                 pImageMemoryBarriers);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
-    VkCommandBuffer                             commandBuffer,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    query,
-    VkQueryControlFlags                         flags);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
-    VkCommandBuffer                             commandBuffer,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    query);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
-    VkCommandBuffer                             commandBuffer,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    firstQuery,
-    uint32_t                                    queryCount);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineStageFlagBits                     pipelineStage,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    query);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
-    VkCommandBuffer                             commandBuffer,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    firstQuery,
-    uint32_t                                    queryCount,
-    VkBuffer                                    dstBuffer,
-    VkDeviceSize                                dstOffset,
-    VkDeviceSize                                stride,
-    VkQueryResultFlags                          flags);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineLayout                            layout,
-    VkShaderStageFlags                          stageFlags,
-    uint32_t                                    offset,
-    uint32_t                                    size,
-    const void*                                 pValues);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
-    VkCommandBuffer                             commandBuffer,
-    const VkRenderPassBeginInfo*                pRenderPassBegin,
-    VkSubpassContents                           contents);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
-    VkCommandBuffer                             commandBuffer,
-    VkSubpassContents                           contents);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
-    VkCommandBuffer                             commandBuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    commandBufferCount,
-    const VkCommandBuffer*                      pCommandBuffers);
-#endif
-
-
-#define VK_VERSION_1_1 1
-// Vulkan 1.1 version number
-#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0
-
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate)
-#define VK_MAX_DEVICE_GROUP_SIZE          32U
-#define VK_LUID_SIZE                      8U
-#define VK_QUEUE_FAMILY_EXTERNAL          (~1U)
-
-typedef enum VkPointClippingBehavior {
-    VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0,
-    VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1,
-    VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES,
-    VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY,
-    VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF
-} VkPointClippingBehavior;
-
-typedef enum VkTessellationDomainOrigin {
-    VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0,
-    VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1,
-    VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT,
-    VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT,
-    VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM = 0x7FFFFFFF
-} VkTessellationDomainOrigin;
-
-typedef enum VkSamplerYcbcrModelConversion {
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020,
-    VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM = 0x7FFFFFFF
-} VkSamplerYcbcrModelConversion;
-
-typedef enum VkSamplerYcbcrRange {
-    VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0,
-    VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1,
-    VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL,
-    VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW,
-    VK_SAMPLER_YCBCR_RANGE_MAX_ENUM = 0x7FFFFFFF
-} VkSamplerYcbcrRange;
-
-typedef enum VkChromaLocation {
-    VK_CHROMA_LOCATION_COSITED_EVEN = 0,
-    VK_CHROMA_LOCATION_MIDPOINT = 1,
-    VK_CHROMA_LOCATION_COSITED_EVEN_KHR = VK_CHROMA_LOCATION_COSITED_EVEN,
-    VK_CHROMA_LOCATION_MIDPOINT_KHR = VK_CHROMA_LOCATION_MIDPOINT,
-    VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF
-} VkChromaLocation;
-
-typedef enum VkDescriptorUpdateTemplateType {
-    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0,
-    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1,
-    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,
-    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkDescriptorUpdateTemplateType;
-
-typedef enum VkSubgroupFeatureFlagBits {
-    VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001,
-    VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002,
-    VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004,
-    VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008,
-    VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010,
-    VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020,
-    VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040,
-    VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080,
-    VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100,
-    VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSubgroupFeatureFlagBits;
-typedef VkFlags VkSubgroupFeatureFlags;
-
-typedef enum VkPeerMemoryFeatureFlagBits {
-    VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 0x00000001,
-    VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 0x00000002,
-    VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 0x00000004,
-    VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 0x00000008,
-    VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT,
-    VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT,
-    VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT,
-    VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT,
-    VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkPeerMemoryFeatureFlagBits;
-typedef VkFlags VkPeerMemoryFeatureFlags;
-
-typedef enum VkMemoryAllocateFlagBits {
-    VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 0x00000001,
-    VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 0x00000002,
-    VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000004,
-    VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT,
-    VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT,
-    VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT,
-    VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkMemoryAllocateFlagBits;
-typedef VkFlags VkMemoryAllocateFlags;
-typedef VkFlags VkCommandPoolTrimFlags;
-typedef VkFlags VkDescriptorUpdateTemplateCreateFlags;
-
-typedef enum VkExternalMemoryHandleTypeFlagBits {
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV = 0x00001000,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkExternalMemoryHandleTypeFlagBits;
-typedef VkFlags VkExternalMemoryHandleTypeFlags;
-
-typedef enum VkExternalMemoryFeatureFlagBits {
-    VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001,
-    VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002,
-    VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004,
-    VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT,
-    VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT,
-    VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT,
-    VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkExternalMemoryFeatureFlagBits;
-typedef VkFlags VkExternalMemoryFeatureFlags;
-
-typedef enum VkExternalFenceHandleTypeFlagBits {
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008,
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,
-    VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkExternalFenceHandleTypeFlagBits;
-typedef VkFlags VkExternalFenceHandleTypeFlags;
-
-typedef enum VkExternalFenceFeatureFlagBits {
-    VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001,
-    VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002,
-    VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT,
-    VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT,
-    VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkExternalFenceFeatureFlagBits;
-typedef VkFlags VkExternalFenceFeatureFlags;
-
-typedef enum VkFenceImportFlagBits {
-    VK_FENCE_IMPORT_TEMPORARY_BIT = 0x00000001,
-    VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = VK_FENCE_IMPORT_TEMPORARY_BIT,
-    VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkFenceImportFlagBits;
-typedef VkFlags VkFenceImportFlags;
-
-typedef enum VkSemaphoreImportFlagBits {
-    VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 0x00000001,
-    VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT,
-    VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSemaphoreImportFlagBits;
-typedef VkFlags VkSemaphoreImportFlags;
-
-typedef enum VkExternalSemaphoreHandleTypeFlagBits {
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,
-    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkExternalSemaphoreHandleTypeFlagBits;
-typedef VkFlags VkExternalSemaphoreHandleTypeFlags;
-
-typedef enum VkExternalSemaphoreFeatureFlagBits {
-    VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001,
-    VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002,
-    VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT,
-    VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT,
-    VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkExternalSemaphoreFeatureFlagBits;
-typedef VkFlags VkExternalSemaphoreFeatureFlags;
-typedef struct VkPhysicalDeviceSubgroupProperties {
-    VkStructureType           sType;
-    void*                     pNext;
-    uint32_t                  subgroupSize;
-    VkShaderStageFlags        supportedStages;
-    VkSubgroupFeatureFlags    supportedOperations;
-    VkBool32                  quadOperationsInAllStages;
-} VkPhysicalDeviceSubgroupProperties;
-
-typedef struct VkBindBufferMemoryInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBuffer           buffer;
-    VkDeviceMemory     memory;
-    VkDeviceSize       memoryOffset;
-} VkBindBufferMemoryInfo;
-
-typedef struct VkBindImageMemoryInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkImage            image;
-    VkDeviceMemory     memory;
-    VkDeviceSize       memoryOffset;
-} VkBindImageMemoryInfo;
-
-typedef struct VkPhysicalDevice16BitStorageFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           storageBuffer16BitAccess;
-    VkBool32           uniformAndStorageBuffer16BitAccess;
-    VkBool32           storagePushConstant16;
-    VkBool32           storageInputOutput16;
-} VkPhysicalDevice16BitStorageFeatures;
-
-typedef struct VkMemoryDedicatedRequirements {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           prefersDedicatedAllocation;
-    VkBool32           requiresDedicatedAllocation;
-} VkMemoryDedicatedRequirements;
-
-typedef struct VkMemoryDedicatedAllocateInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkImage            image;
-    VkBuffer           buffer;
-} VkMemoryDedicatedAllocateInfo;
-
-typedef struct VkMemoryAllocateFlagsInfo {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkMemoryAllocateFlags    flags;
-    uint32_t                 deviceMask;
-} VkMemoryAllocateFlagsInfo;
-
-typedef struct VkDeviceGroupRenderPassBeginInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           deviceMask;
-    uint32_t           deviceRenderAreaCount;
-    const VkRect2D*    pDeviceRenderAreas;
-} VkDeviceGroupRenderPassBeginInfo;
-
-typedef struct VkDeviceGroupCommandBufferBeginInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           deviceMask;
-} VkDeviceGroupCommandBufferBeginInfo;
-
-typedef struct VkDeviceGroupSubmitInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           waitSemaphoreCount;
-    const uint32_t*    pWaitSemaphoreDeviceIndices;
-    uint32_t           commandBufferCount;
-    const uint32_t*    pCommandBufferDeviceMasks;
-    uint32_t           signalSemaphoreCount;
-    const uint32_t*    pSignalSemaphoreDeviceIndices;
-} VkDeviceGroupSubmitInfo;
-
-typedef struct VkDeviceGroupBindSparseInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           resourceDeviceIndex;
-    uint32_t           memoryDeviceIndex;
-} VkDeviceGroupBindSparseInfo;
-
-typedef struct VkBindBufferMemoryDeviceGroupInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           deviceIndexCount;
-    const uint32_t*    pDeviceIndices;
-} VkBindBufferMemoryDeviceGroupInfo;
-
-typedef struct VkBindImageMemoryDeviceGroupInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           deviceIndexCount;
-    const uint32_t*    pDeviceIndices;
-    uint32_t           splitInstanceBindRegionCount;
-    const VkRect2D*    pSplitInstanceBindRegions;
-} VkBindImageMemoryDeviceGroupInfo;
-
-typedef struct VkPhysicalDeviceGroupProperties {
-    VkStructureType     sType;
-    void*               pNext;
-    uint32_t            physicalDeviceCount;
-    VkPhysicalDevice    physicalDevices[VK_MAX_DEVICE_GROUP_SIZE];
-    VkBool32            subsetAllocation;
-} VkPhysicalDeviceGroupProperties;
-
-typedef struct VkDeviceGroupDeviceCreateInfo {
-    VkStructureType            sType;
-    const void*                pNext;
-    uint32_t                   physicalDeviceCount;
-    const VkPhysicalDevice*    pPhysicalDevices;
-} VkDeviceGroupDeviceCreateInfo;
-
-typedef struct VkBufferMemoryRequirementsInfo2 {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBuffer           buffer;
-} VkBufferMemoryRequirementsInfo2;
-
-typedef struct VkImageMemoryRequirementsInfo2 {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkImage            image;
-} VkImageMemoryRequirementsInfo2;
-
-typedef struct VkImageSparseMemoryRequirementsInfo2 {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkImage            image;
-} VkImageSparseMemoryRequirementsInfo2;
-
-typedef struct VkMemoryRequirements2 {
-    VkStructureType         sType;
-    void*                   pNext;
-    VkMemoryRequirements    memoryRequirements;
-} VkMemoryRequirements2;
-
-typedef struct VkSparseImageMemoryRequirements2 {
-    VkStructureType                    sType;
-    void*                              pNext;
-    VkSparseImageMemoryRequirements    memoryRequirements;
-} VkSparseImageMemoryRequirements2;
-
-typedef struct VkPhysicalDeviceFeatures2 {
-    VkStructureType             sType;
-    void*                       pNext;
-    VkPhysicalDeviceFeatures    features;
-} VkPhysicalDeviceFeatures2;
-
-typedef struct VkPhysicalDeviceProperties2 {
-    VkStructureType               sType;
-    void*                         pNext;
-    VkPhysicalDeviceProperties    properties;
-} VkPhysicalDeviceProperties2;
-
-typedef struct VkFormatProperties2 {
-    VkStructureType       sType;
-    void*                 pNext;
-    VkFormatProperties    formatProperties;
-} VkFormatProperties2;
-
-typedef struct VkImageFormatProperties2 {
-    VkStructureType            sType;
-    void*                      pNext;
-    VkImageFormatProperties    imageFormatProperties;
-} VkImageFormatProperties2;
-
-typedef struct VkPhysicalDeviceImageFormatInfo2 {
-    VkStructureType       sType;
-    const void*           pNext;
-    VkFormat              format;
-    VkImageType           type;
-    VkImageTiling         tiling;
-    VkImageUsageFlags     usage;
-    VkImageCreateFlags    flags;
-} VkPhysicalDeviceImageFormatInfo2;
-
-typedef struct VkQueueFamilyProperties2 {
-    VkStructureType            sType;
-    void*                      pNext;
-    VkQueueFamilyProperties    queueFamilyProperties;
-} VkQueueFamilyProperties2;
-
-typedef struct VkPhysicalDeviceMemoryProperties2 {
-    VkStructureType                     sType;
-    void*                               pNext;
-    VkPhysicalDeviceMemoryProperties    memoryProperties;
-} VkPhysicalDeviceMemoryProperties2;
-
-typedef struct VkSparseImageFormatProperties2 {
-    VkStructureType                  sType;
-    void*                            pNext;
-    VkSparseImageFormatProperties    properties;
-} VkSparseImageFormatProperties2;
-
-typedef struct VkPhysicalDeviceSparseImageFormatInfo2 {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkFormat                 format;
-    VkImageType              type;
-    VkSampleCountFlagBits    samples;
-    VkImageUsageFlags        usage;
-    VkImageTiling            tiling;
-} VkPhysicalDeviceSparseImageFormatInfo2;
-
-typedef struct VkPhysicalDevicePointClippingProperties {
-    VkStructureType            sType;
-    void*                      pNext;
-    VkPointClippingBehavior    pointClippingBehavior;
-} VkPhysicalDevicePointClippingProperties;
-
-typedef struct VkInputAttachmentAspectReference {
-    uint32_t              subpass;
-    uint32_t              inputAttachmentIndex;
-    VkImageAspectFlags    aspectMask;
-} VkInputAttachmentAspectReference;
-
-typedef struct VkRenderPassInputAttachmentAspectCreateInfo {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    uint32_t                                   aspectReferenceCount;
-    const VkInputAttachmentAspectReference*    pAspectReferences;
-} VkRenderPassInputAttachmentAspectCreateInfo;
-
-typedef struct VkImageViewUsageCreateInfo {
-    VkStructureType      sType;
-    const void*          pNext;
-    VkImageUsageFlags    usage;
-} VkImageViewUsageCreateInfo;
-
-typedef struct VkPipelineTessellationDomainOriginStateCreateInfo {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkTessellationDomainOrigin    domainOrigin;
-} VkPipelineTessellationDomainOriginStateCreateInfo;
-
-typedef struct VkRenderPassMultiviewCreateInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           subpassCount;
-    const uint32_t*    pViewMasks;
-    uint32_t           dependencyCount;
-    const int32_t*     pViewOffsets;
-    uint32_t           correlationMaskCount;
-    const uint32_t*    pCorrelationMasks;
-} VkRenderPassMultiviewCreateInfo;
-
-typedef struct VkPhysicalDeviceMultiviewFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           multiview;
-    VkBool32           multiviewGeometryShader;
-    VkBool32           multiviewTessellationShader;
-} VkPhysicalDeviceMultiviewFeatures;
-
-typedef struct VkPhysicalDeviceMultiviewProperties {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxMultiviewViewCount;
-    uint32_t           maxMultiviewInstanceIndex;
-} VkPhysicalDeviceMultiviewProperties;
-
-typedef struct VkPhysicalDeviceVariablePointersFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           variablePointersStorageBuffer;
-    VkBool32           variablePointers;
-} VkPhysicalDeviceVariablePointersFeatures;
-
-typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures;
-
-typedef struct VkPhysicalDeviceProtectedMemoryFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           protectedMemory;
-} VkPhysicalDeviceProtectedMemoryFeatures;
-
-typedef struct VkPhysicalDeviceProtectedMemoryProperties {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           protectedNoFault;
-} VkPhysicalDeviceProtectedMemoryProperties;
-
-typedef struct VkDeviceQueueInfo2 {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkDeviceQueueCreateFlags    flags;
-    uint32_t                    queueFamilyIndex;
-    uint32_t                    queueIndex;
-} VkDeviceQueueInfo2;
-
-typedef struct VkProtectedSubmitInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBool32           protectedSubmit;
-} VkProtectedSubmitInfo;
-
-typedef struct VkSamplerYcbcrConversionCreateInfo {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkFormat                         format;
-    VkSamplerYcbcrModelConversion    ycbcrModel;
-    VkSamplerYcbcrRange              ycbcrRange;
-    VkComponentMapping               components;
-    VkChromaLocation                 xChromaOffset;
-    VkChromaLocation                 yChromaOffset;
-    VkFilter                         chromaFilter;
-    VkBool32                         forceExplicitReconstruction;
-} VkSamplerYcbcrConversionCreateInfo;
-
-typedef struct VkSamplerYcbcrConversionInfo {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkSamplerYcbcrConversion    conversion;
-} VkSamplerYcbcrConversionInfo;
-
-typedef struct VkBindImagePlaneMemoryInfo {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkImageAspectFlagBits    planeAspect;
-} VkBindImagePlaneMemoryInfo;
-
-typedef struct VkImagePlaneMemoryRequirementsInfo {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkImageAspectFlagBits    planeAspect;
-} VkImagePlaneMemoryRequirementsInfo;
-
-typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           samplerYcbcrConversion;
-} VkPhysicalDeviceSamplerYcbcrConversionFeatures;
-
-typedef struct VkSamplerYcbcrConversionImageFormatProperties {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           combinedImageSamplerDescriptorCount;
-} VkSamplerYcbcrConversionImageFormatProperties;
-
-typedef struct VkDescriptorUpdateTemplateEntry {
-    uint32_t            dstBinding;
-    uint32_t            dstArrayElement;
-    uint32_t            descriptorCount;
-    VkDescriptorType    descriptorType;
-    size_t              offset;
-    size_t              stride;
-} VkDescriptorUpdateTemplateEntry;
-
-typedef struct VkDescriptorUpdateTemplateCreateInfo {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    VkDescriptorUpdateTemplateCreateFlags     flags;
-    uint32_t                                  descriptorUpdateEntryCount;
-    const VkDescriptorUpdateTemplateEntry*    pDescriptorUpdateEntries;
-    VkDescriptorUpdateTemplateType            templateType;
-    VkDescriptorSetLayout                     descriptorSetLayout;
-    VkPipelineBindPoint                       pipelineBindPoint;
-    VkPipelineLayout                          pipelineLayout;
-    uint32_t                                  set;
-} VkDescriptorUpdateTemplateCreateInfo;
-
-typedef struct VkExternalMemoryProperties {
-    VkExternalMemoryFeatureFlags       externalMemoryFeatures;
-    VkExternalMemoryHandleTypeFlags    exportFromImportedHandleTypes;
-    VkExternalMemoryHandleTypeFlags    compatibleHandleTypes;
-} VkExternalMemoryProperties;
-
-typedef struct VkPhysicalDeviceExternalImageFormatInfo {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-} VkPhysicalDeviceExternalImageFormatInfo;
-
-typedef struct VkExternalImageFormatProperties {
-    VkStructureType               sType;
-    void*                         pNext;
-    VkExternalMemoryProperties    externalMemoryProperties;
-} VkExternalImageFormatProperties;
-
-typedef struct VkPhysicalDeviceExternalBufferInfo {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkBufferCreateFlags                   flags;
-    VkBufferUsageFlags                    usage;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-} VkPhysicalDeviceExternalBufferInfo;
-
-typedef struct VkExternalBufferProperties {
-    VkStructureType               sType;
-    void*                         pNext;
-    VkExternalMemoryProperties    externalMemoryProperties;
-} VkExternalBufferProperties;
-
-typedef struct VkPhysicalDeviceIDProperties {
-    VkStructureType    sType;
-    void*              pNext;
-    uint8_t            deviceUUID[VK_UUID_SIZE];
-    uint8_t            driverUUID[VK_UUID_SIZE];
-    uint8_t            deviceLUID[VK_LUID_SIZE];
-    uint32_t           deviceNodeMask;
-    VkBool32           deviceLUIDValid;
-} VkPhysicalDeviceIDProperties;
-
-typedef struct VkExternalMemoryImageCreateInfo {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkExternalMemoryHandleTypeFlags    handleTypes;
-} VkExternalMemoryImageCreateInfo;
-
-typedef struct VkExternalMemoryBufferCreateInfo {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkExternalMemoryHandleTypeFlags    handleTypes;
-} VkExternalMemoryBufferCreateInfo;
-
-typedef struct VkExportMemoryAllocateInfo {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkExternalMemoryHandleTypeFlags    handleTypes;
-} VkExportMemoryAllocateInfo;
-
-typedef struct VkPhysicalDeviceExternalFenceInfo {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkExternalFenceHandleTypeFlagBits    handleType;
-} VkPhysicalDeviceExternalFenceInfo;
-
-typedef struct VkExternalFenceProperties {
-    VkStructureType                   sType;
-    void*                             pNext;
-    VkExternalFenceHandleTypeFlags    exportFromImportedHandleTypes;
-    VkExternalFenceHandleTypeFlags    compatibleHandleTypes;
-    VkExternalFenceFeatureFlags       externalFenceFeatures;
-} VkExternalFenceProperties;
-
-typedef struct VkExportFenceCreateInfo {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkExternalFenceHandleTypeFlags    handleTypes;
-} VkExportFenceCreateInfo;
-
-typedef struct VkExportSemaphoreCreateInfo {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkExternalSemaphoreHandleTypeFlags    handleTypes;
-} VkExportSemaphoreCreateInfo;
-
-typedef struct VkPhysicalDeviceExternalSemaphoreInfo {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkExternalSemaphoreHandleTypeFlagBits    handleType;
-} VkPhysicalDeviceExternalSemaphoreInfo;
-
-typedef struct VkExternalSemaphoreProperties {
-    VkStructureType                       sType;
-    void*                                 pNext;
-    VkExternalSemaphoreHandleTypeFlags    exportFromImportedHandleTypes;
-    VkExternalSemaphoreHandleTypeFlags    compatibleHandleTypes;
-    VkExternalSemaphoreFeatureFlags       externalSemaphoreFeatures;
-} VkExternalSemaphoreProperties;
-
-typedef struct VkPhysicalDeviceMaintenance3Properties {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxPerSetDescriptors;
-    VkDeviceSize       maxMemoryAllocationSize;
-} VkPhysicalDeviceMaintenance3Properties;
-
-typedef struct VkDescriptorSetLayoutSupport {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           supported;
-} VkDescriptorSetLayoutSupport;
-
-typedef struct VkPhysicalDeviceShaderDrawParametersFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderDrawParameters;
-} VkPhysicalDeviceShaderDrawParametersFeatures;
-
-typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures;
-
-typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceVersion)(uint32_t* pApiVersion);
-typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
-typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMask)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
-typedef void (VKAPI_PTR *PFN_vkCmdDispatchBase)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
-typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroups)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
-typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties);
-typedef void (VKAPI_PTR *PFN_vkTrimCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue2)(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversion)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
-typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversion)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplate)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
-typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplate)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplate)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFenceProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
-typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion(
-    uint32_t*                                   pApiVersion);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2(
-    VkDevice                                    device,
-    uint32_t                                    bindInfoCount,
-    const VkBindBufferMemoryInfo*               pBindInfos);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2(
-    VkDevice                                    device,
-    uint32_t                                    bindInfoCount,
-    const VkBindImageMemoryInfo*                pBindInfos);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(
-    VkDevice                                    device,
-    uint32_t                                    heapIndex,
-    uint32_t                                    localDeviceIndex,
-    uint32_t                                    remoteDeviceIndex,
-    VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    deviceMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    baseGroupX,
-    uint32_t                                    baseGroupY,
-    uint32_t                                    baseGroupZ,
-    uint32_t                                    groupCountX,
-    uint32_t                                    groupCountY,
-    uint32_t                                    groupCountZ);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups(
-    VkInstance                                  instance,
-    uint32_t*                                   pPhysicalDeviceGroupCount,
-    VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(
-    VkDevice                                    device,
-    const VkImageMemoryRequirementsInfo2*       pInfo,
-    VkMemoryRequirements2*                      pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(
-    VkDevice                                    device,
-    const VkBufferMemoryRequirementsInfo2*      pInfo,
-    VkMemoryRequirements2*                      pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2(
-    VkDevice                                    device,
-    const VkImageSparseMemoryRequirementsInfo2* pInfo,
-    uint32_t*                                   pSparseMemoryRequirementCount,
-    VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceFeatures2*                  pFeatures);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceProperties2*                pProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2(
-    VkPhysicalDevice                            physicalDevice,
-    VkFormat                                    format,
-    VkFormatProperties2*                        pFormatProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
-    VkImageFormatProperties2*                   pImageFormatProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pQueueFamilyPropertyCount,
-    VkQueueFamilyProperties2*                   pQueueFamilyProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceMemoryProperties2*          pMemoryProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
-    uint32_t*                                   pPropertyCount,
-    VkSparseImageFormatProperties2*             pProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool(
-    VkDevice                                    device,
-    VkCommandPool                               commandPool,
-    VkCommandPoolTrimFlags                      flags);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(
-    VkDevice                                    device,
-    const VkDeviceQueueInfo2*                   pQueueInfo,
-    VkQueue*                                    pQueue);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(
-    VkDevice                                    device,
-    const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSamplerYcbcrConversion*                   pYcbcrConversion);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(
-    VkDevice                                    device,
-    VkSamplerYcbcrConversion                    ycbcrConversion,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate(
-    VkDevice                                    device,
-    const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDescriptorUpdateTemplate*                 pDescriptorUpdateTemplate);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate(
-    VkDevice                                    device,
-    VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate(
-    VkDevice                                    device,
-    VkDescriptorSet                             descriptorSet,
-    VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
-    const void*                                 pData);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
-    VkExternalBufferProperties*                 pExternalBufferProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
-    VkExternalFenceProperties*                  pExternalFenceProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
-    VkExternalSemaphoreProperties*              pExternalSemaphoreProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(
-    VkDevice                                    device,
-    const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
-    VkDescriptorSetLayoutSupport*               pSupport);
-#endif
-
-
-#define VK_VERSION_1_2 1
-// Vulkan 1.2 version number
-#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0
-
-#define VK_MAX_DRIVER_NAME_SIZE           256U
-#define VK_MAX_DRIVER_INFO_SIZE           256U
-
-typedef enum VkDriverId {
-    VK_DRIVER_ID_AMD_PROPRIETARY = 1,
-    VK_DRIVER_ID_AMD_OPEN_SOURCE = 2,
-    VK_DRIVER_ID_MESA_RADV = 3,
-    VK_DRIVER_ID_NVIDIA_PROPRIETARY = 4,
-    VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = 5,
-    VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA = 6,
-    VK_DRIVER_ID_IMAGINATION_PROPRIETARY = 7,
-    VK_DRIVER_ID_QUALCOMM_PROPRIETARY = 8,
-    VK_DRIVER_ID_ARM_PROPRIETARY = 9,
-    VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10,
-    VK_DRIVER_ID_GGP_PROPRIETARY = 11,
-    VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12,
-    VK_DRIVER_ID_MESA_LLVMPIPE = 13,
-    VK_DRIVER_ID_MOLTENVK = 14,
-    VK_DRIVER_ID_COREAVI_PROPRIETARY = 15,
-    VK_DRIVER_ID_JUICE_PROPRIETARY = 16,
-    VK_DRIVER_ID_VERISILICON_PROPRIETARY = 17,
-    VK_DRIVER_ID_MESA_TURNIP = 18,
-    VK_DRIVER_ID_MESA_V3DV = 19,
-    VK_DRIVER_ID_MESA_PANVK = 20,
-    VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY,
-    VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE,
-    VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV,
-    VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR = VK_DRIVER_ID_NVIDIA_PROPRIETARY,
-    VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS,
-    VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA,
-    VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = VK_DRIVER_ID_IMAGINATION_PROPRIETARY,
-    VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = VK_DRIVER_ID_QUALCOMM_PROPRIETARY,
-    VK_DRIVER_ID_ARM_PROPRIETARY_KHR = VK_DRIVER_ID_ARM_PROPRIETARY,
-    VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = VK_DRIVER_ID_GOOGLE_SWIFTSHADER,
-    VK_DRIVER_ID_GGP_PROPRIETARY_KHR = VK_DRIVER_ID_GGP_PROPRIETARY,
-    VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR = VK_DRIVER_ID_BROADCOM_PROPRIETARY,
-    VK_DRIVER_ID_MAX_ENUM = 0x7FFFFFFF
-} VkDriverId;
-
-typedef enum VkShaderFloatControlsIndependence {
-    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0,
-    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1,
-    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2,
-    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY,
-    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL,
-    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE,
-    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM = 0x7FFFFFFF
-} VkShaderFloatControlsIndependence;
-
-typedef enum VkSamplerReductionMode {
-    VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = 0,
-    VK_SAMPLER_REDUCTION_MODE_MIN = 1,
-    VK_SAMPLER_REDUCTION_MODE_MAX = 2,
-    VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE,
-    VK_SAMPLER_REDUCTION_MODE_MIN_EXT = VK_SAMPLER_REDUCTION_MODE_MIN,
-    VK_SAMPLER_REDUCTION_MODE_MAX_EXT = VK_SAMPLER_REDUCTION_MODE_MAX,
-    VK_SAMPLER_REDUCTION_MODE_MAX_ENUM = 0x7FFFFFFF
-} VkSamplerReductionMode;
-
-typedef enum VkSemaphoreType {
-    VK_SEMAPHORE_TYPE_BINARY = 0,
-    VK_SEMAPHORE_TYPE_TIMELINE = 1,
-    VK_SEMAPHORE_TYPE_BINARY_KHR = VK_SEMAPHORE_TYPE_BINARY,
-    VK_SEMAPHORE_TYPE_TIMELINE_KHR = VK_SEMAPHORE_TYPE_TIMELINE,
-    VK_SEMAPHORE_TYPE_MAX_ENUM = 0x7FFFFFFF
-} VkSemaphoreType;
-
-typedef enum VkResolveModeFlagBits {
-    VK_RESOLVE_MODE_NONE = 0,
-    VK_RESOLVE_MODE_SAMPLE_ZERO_BIT = 0x00000001,
-    VK_RESOLVE_MODE_AVERAGE_BIT = 0x00000002,
-    VK_RESOLVE_MODE_MIN_BIT = 0x00000004,
-    VK_RESOLVE_MODE_MAX_BIT = 0x00000008,
-    VK_RESOLVE_MODE_NONE_KHR = VK_RESOLVE_MODE_NONE,
-    VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,
-    VK_RESOLVE_MODE_AVERAGE_BIT_KHR = VK_RESOLVE_MODE_AVERAGE_BIT,
-    VK_RESOLVE_MODE_MIN_BIT_KHR = VK_RESOLVE_MODE_MIN_BIT,
-    VK_RESOLVE_MODE_MAX_BIT_KHR = VK_RESOLVE_MODE_MAX_BIT,
-    VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkResolveModeFlagBits;
-typedef VkFlags VkResolveModeFlags;
-
-typedef enum VkDescriptorBindingFlagBits {
-    VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 0x00000001,
-    VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 0x00000002,
-    VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 0x00000004,
-    VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 0x00000008,
-    VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT,
-    VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT,
-    VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT,
-    VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT,
-    VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkDescriptorBindingFlagBits;
-typedef VkFlags VkDescriptorBindingFlags;
-
-typedef enum VkSemaphoreWaitFlagBits {
-    VK_SEMAPHORE_WAIT_ANY_BIT = 0x00000001,
-    VK_SEMAPHORE_WAIT_ANY_BIT_KHR = VK_SEMAPHORE_WAIT_ANY_BIT,
-    VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VkSemaphoreWaitFlagBits;
-typedef VkFlags VkSemaphoreWaitFlags;
-typedef struct VkPhysicalDeviceVulkan11Features {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           storageBuffer16BitAccess;
-    VkBool32           uniformAndStorageBuffer16BitAccess;
-    VkBool32           storagePushConstant16;
-    VkBool32           storageInputOutput16;
-    VkBool32           multiview;
-    VkBool32           multiviewGeometryShader;
-    VkBool32           multiviewTessellationShader;
-    VkBool32           variablePointersStorageBuffer;
-    VkBool32           variablePointers;
-    VkBool32           protectedMemory;
-    VkBool32           samplerYcbcrConversion;
-    VkBool32           shaderDrawParameters;
-} VkPhysicalDeviceVulkan11Features;
-
-typedef struct VkPhysicalDeviceVulkan11Properties {
-    VkStructureType            sType;
-    void*                      pNext;
-    uint8_t                    deviceUUID[VK_UUID_SIZE];
-    uint8_t                    driverUUID[VK_UUID_SIZE];
-    uint8_t                    deviceLUID[VK_LUID_SIZE];
-    uint32_t                   deviceNodeMask;
-    VkBool32                   deviceLUIDValid;
-    uint32_t                   subgroupSize;
-    VkShaderStageFlags         subgroupSupportedStages;
-    VkSubgroupFeatureFlags     subgroupSupportedOperations;
-    VkBool32                   subgroupQuadOperationsInAllStages;
-    VkPointClippingBehavior    pointClippingBehavior;
-    uint32_t                   maxMultiviewViewCount;
-    uint32_t                   maxMultiviewInstanceIndex;
-    VkBool32                   protectedNoFault;
-    uint32_t                   maxPerSetDescriptors;
-    VkDeviceSize               maxMemoryAllocationSize;
-} VkPhysicalDeviceVulkan11Properties;
-
-typedef struct VkPhysicalDeviceVulkan12Features {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           samplerMirrorClampToEdge;
-    VkBool32           drawIndirectCount;
-    VkBool32           storageBuffer8BitAccess;
-    VkBool32           uniformAndStorageBuffer8BitAccess;
-    VkBool32           storagePushConstant8;
-    VkBool32           shaderBufferInt64Atomics;
-    VkBool32           shaderSharedInt64Atomics;
-    VkBool32           shaderFloat16;
-    VkBool32           shaderInt8;
-    VkBool32           descriptorIndexing;
-    VkBool32           shaderInputAttachmentArrayDynamicIndexing;
-    VkBool32           shaderUniformTexelBufferArrayDynamicIndexing;
-    VkBool32           shaderStorageTexelBufferArrayDynamicIndexing;
-    VkBool32           shaderUniformBufferArrayNonUniformIndexing;
-    VkBool32           shaderSampledImageArrayNonUniformIndexing;
-    VkBool32           shaderStorageBufferArrayNonUniformIndexing;
-    VkBool32           shaderStorageImageArrayNonUniformIndexing;
-    VkBool32           shaderInputAttachmentArrayNonUniformIndexing;
-    VkBool32           shaderUniformTexelBufferArrayNonUniformIndexing;
-    VkBool32           shaderStorageTexelBufferArrayNonUniformIndexing;
-    VkBool32           descriptorBindingUniformBufferUpdateAfterBind;
-    VkBool32           descriptorBindingSampledImageUpdateAfterBind;
-    VkBool32           descriptorBindingStorageImageUpdateAfterBind;
-    VkBool32           descriptorBindingStorageBufferUpdateAfterBind;
-    VkBool32           descriptorBindingUniformTexelBufferUpdateAfterBind;
-    VkBool32           descriptorBindingStorageTexelBufferUpdateAfterBind;
-    VkBool32           descriptorBindingUpdateUnusedWhilePending;
-    VkBool32           descriptorBindingPartiallyBound;
-    VkBool32           descriptorBindingVariableDescriptorCount;
-    VkBool32           runtimeDescriptorArray;
-    VkBool32           samplerFilterMinmax;
-    VkBool32           scalarBlockLayout;
-    VkBool32           imagelessFramebuffer;
-    VkBool32           uniformBufferStandardLayout;
-    VkBool32           shaderSubgroupExtendedTypes;
-    VkBool32           separateDepthStencilLayouts;
-    VkBool32           hostQueryReset;
-    VkBool32           timelineSemaphore;
-    VkBool32           bufferDeviceAddress;
-    VkBool32           bufferDeviceAddressCaptureReplay;
-    VkBool32           bufferDeviceAddressMultiDevice;
-    VkBool32           vulkanMemoryModel;
-    VkBool32           vulkanMemoryModelDeviceScope;
-    VkBool32           vulkanMemoryModelAvailabilityVisibilityChains;
-    VkBool32           shaderOutputViewportIndex;
-    VkBool32           shaderOutputLayer;
-    VkBool32           subgroupBroadcastDynamicId;
-} VkPhysicalDeviceVulkan12Features;
-
-typedef struct VkConformanceVersion {
-    uint8_t    major;
-    uint8_t    minor;
-    uint8_t    subminor;
-    uint8_t    patch;
-} VkConformanceVersion;
-
-typedef struct VkPhysicalDeviceVulkan12Properties {
-    VkStructureType                      sType;
-    void*                                pNext;
-    VkDriverId                           driverID;
-    char                                 driverName[VK_MAX_DRIVER_NAME_SIZE];
-    char                                 driverInfo[VK_MAX_DRIVER_INFO_SIZE];
-    VkConformanceVersion                 conformanceVersion;
-    VkShaderFloatControlsIndependence    denormBehaviorIndependence;
-    VkShaderFloatControlsIndependence    roundingModeIndependence;
-    VkBool32                             shaderSignedZeroInfNanPreserveFloat16;
-    VkBool32                             shaderSignedZeroInfNanPreserveFloat32;
-    VkBool32                             shaderSignedZeroInfNanPreserveFloat64;
-    VkBool32                             shaderDenormPreserveFloat16;
-    VkBool32                             shaderDenormPreserveFloat32;
-    VkBool32                             shaderDenormPreserveFloat64;
-    VkBool32                             shaderDenormFlushToZeroFloat16;
-    VkBool32                             shaderDenormFlushToZeroFloat32;
-    VkBool32                             shaderDenormFlushToZeroFloat64;
-    VkBool32                             shaderRoundingModeRTEFloat16;
-    VkBool32                             shaderRoundingModeRTEFloat32;
-    VkBool32                             shaderRoundingModeRTEFloat64;
-    VkBool32                             shaderRoundingModeRTZFloat16;
-    VkBool32                             shaderRoundingModeRTZFloat32;
-    VkBool32                             shaderRoundingModeRTZFloat64;
-    uint32_t                             maxUpdateAfterBindDescriptorsInAllPools;
-    VkBool32                             shaderUniformBufferArrayNonUniformIndexingNative;
-    VkBool32                             shaderSampledImageArrayNonUniformIndexingNative;
-    VkBool32                             shaderStorageBufferArrayNonUniformIndexingNative;
-    VkBool32                             shaderStorageImageArrayNonUniformIndexingNative;
-    VkBool32                             shaderInputAttachmentArrayNonUniformIndexingNative;
-    VkBool32                             robustBufferAccessUpdateAfterBind;
-    VkBool32                             quadDivergentImplicitLod;
-    uint32_t                             maxPerStageDescriptorUpdateAfterBindSamplers;
-    uint32_t                             maxPerStageDescriptorUpdateAfterBindUniformBuffers;
-    uint32_t                             maxPerStageDescriptorUpdateAfterBindStorageBuffers;
-    uint32_t                             maxPerStageDescriptorUpdateAfterBindSampledImages;
-    uint32_t                             maxPerStageDescriptorUpdateAfterBindStorageImages;
-    uint32_t                             maxPerStageDescriptorUpdateAfterBindInputAttachments;
-    uint32_t                             maxPerStageUpdateAfterBindResources;
-    uint32_t                             maxDescriptorSetUpdateAfterBindSamplers;
-    uint32_t                             maxDescriptorSetUpdateAfterBindUniformBuffers;
-    uint32_t                             maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
-    uint32_t                             maxDescriptorSetUpdateAfterBindStorageBuffers;
-    uint32_t                             maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
-    uint32_t                             maxDescriptorSetUpdateAfterBindSampledImages;
-    uint32_t                             maxDescriptorSetUpdateAfterBindStorageImages;
-    uint32_t                             maxDescriptorSetUpdateAfterBindInputAttachments;
-    VkResolveModeFlags                   supportedDepthResolveModes;
-    VkResolveModeFlags                   supportedStencilResolveModes;
-    VkBool32                             independentResolveNone;
-    VkBool32                             independentResolve;
-    VkBool32                             filterMinmaxSingleComponentFormats;
-    VkBool32                             filterMinmaxImageComponentMapping;
-    uint64_t                             maxTimelineSemaphoreValueDifference;
-    VkSampleCountFlags                   framebufferIntegerColorSampleCounts;
-} VkPhysicalDeviceVulkan12Properties;
-
-typedef struct VkImageFormatListCreateInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           viewFormatCount;
-    const VkFormat*    pViewFormats;
-} VkImageFormatListCreateInfo;
-
-typedef struct VkAttachmentDescription2 {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkAttachmentDescriptionFlags    flags;
-    VkFormat                        format;
-    VkSampleCountFlagBits           samples;
-    VkAttachmentLoadOp              loadOp;
-    VkAttachmentStoreOp             storeOp;
-    VkAttachmentLoadOp              stencilLoadOp;
-    VkAttachmentStoreOp             stencilStoreOp;
-    VkImageLayout                   initialLayout;
-    VkImageLayout                   finalLayout;
-} VkAttachmentDescription2;
-
-typedef struct VkAttachmentReference2 {
-    VkStructureType       sType;
-    const void*           pNext;
-    uint32_t              attachment;
-    VkImageLayout         layout;
-    VkImageAspectFlags    aspectMask;
-} VkAttachmentReference2;
-
-typedef struct VkSubpassDescription2 {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkSubpassDescriptionFlags        flags;
-    VkPipelineBindPoint              pipelineBindPoint;
-    uint32_t                         viewMask;
-    uint32_t                         inputAttachmentCount;
-    const VkAttachmentReference2*    pInputAttachments;
-    uint32_t                         colorAttachmentCount;
-    const VkAttachmentReference2*    pColorAttachments;
-    const VkAttachmentReference2*    pResolveAttachments;
-    const VkAttachmentReference2*    pDepthStencilAttachment;
-    uint32_t                         preserveAttachmentCount;
-    const uint32_t*                  pPreserveAttachments;
-} VkSubpassDescription2;
-
-typedef struct VkSubpassDependency2 {
-    VkStructureType         sType;
-    const void*             pNext;
-    uint32_t                srcSubpass;
-    uint32_t                dstSubpass;
-    VkPipelineStageFlags    srcStageMask;
-    VkPipelineStageFlags    dstStageMask;
-    VkAccessFlags           srcAccessMask;
-    VkAccessFlags           dstAccessMask;
-    VkDependencyFlags       dependencyFlags;
-    int32_t                 viewOffset;
-} VkSubpassDependency2;
-
-typedef struct VkRenderPassCreateInfo2 {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkRenderPassCreateFlags            flags;
-    uint32_t                           attachmentCount;
-    const VkAttachmentDescription2*    pAttachments;
-    uint32_t                           subpassCount;
-    const VkSubpassDescription2*       pSubpasses;
-    uint32_t                           dependencyCount;
-    const VkSubpassDependency2*        pDependencies;
-    uint32_t                           correlatedViewMaskCount;
-    const uint32_t*                    pCorrelatedViewMasks;
-} VkRenderPassCreateInfo2;
-
-typedef struct VkSubpassBeginInfo {
-    VkStructureType      sType;
-    const void*          pNext;
-    VkSubpassContents    contents;
-} VkSubpassBeginInfo;
-
-typedef struct VkSubpassEndInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-} VkSubpassEndInfo;
-
-typedef struct VkPhysicalDevice8BitStorageFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           storageBuffer8BitAccess;
-    VkBool32           uniformAndStorageBuffer8BitAccess;
-    VkBool32           storagePushConstant8;
-} VkPhysicalDevice8BitStorageFeatures;
-
-typedef struct VkPhysicalDeviceDriverProperties {
-    VkStructureType         sType;
-    void*                   pNext;
-    VkDriverId              driverID;
-    char                    driverName[VK_MAX_DRIVER_NAME_SIZE];
-    char                    driverInfo[VK_MAX_DRIVER_INFO_SIZE];
-    VkConformanceVersion    conformanceVersion;
-} VkPhysicalDeviceDriverProperties;
-
-typedef struct VkPhysicalDeviceShaderAtomicInt64Features {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderBufferInt64Atomics;
-    VkBool32           shaderSharedInt64Atomics;
-} VkPhysicalDeviceShaderAtomicInt64Features;
-
-typedef struct VkPhysicalDeviceShaderFloat16Int8Features {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderFloat16;
-    VkBool32           shaderInt8;
-} VkPhysicalDeviceShaderFloat16Int8Features;
-
-typedef struct VkPhysicalDeviceFloatControlsProperties {
-    VkStructureType                      sType;
-    void*                                pNext;
-    VkShaderFloatControlsIndependence    denormBehaviorIndependence;
-    VkShaderFloatControlsIndependence    roundingModeIndependence;
-    VkBool32                             shaderSignedZeroInfNanPreserveFloat16;
-    VkBool32                             shaderSignedZeroInfNanPreserveFloat32;
-    VkBool32                             shaderSignedZeroInfNanPreserveFloat64;
-    VkBool32                             shaderDenormPreserveFloat16;
-    VkBool32                             shaderDenormPreserveFloat32;
-    VkBool32                             shaderDenormPreserveFloat64;
-    VkBool32                             shaderDenormFlushToZeroFloat16;
-    VkBool32                             shaderDenormFlushToZeroFloat32;
-    VkBool32                             shaderDenormFlushToZeroFloat64;
-    VkBool32                             shaderRoundingModeRTEFloat16;
-    VkBool32                             shaderRoundingModeRTEFloat32;
-    VkBool32                             shaderRoundingModeRTEFloat64;
-    VkBool32                             shaderRoundingModeRTZFloat16;
-    VkBool32                             shaderRoundingModeRTZFloat32;
-    VkBool32                             shaderRoundingModeRTZFloat64;
-} VkPhysicalDeviceFloatControlsProperties;
-
-typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    uint32_t                           bindingCount;
-    const VkDescriptorBindingFlags*    pBindingFlags;
-} VkDescriptorSetLayoutBindingFlagsCreateInfo;
-
-typedef struct VkPhysicalDeviceDescriptorIndexingFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderInputAttachmentArrayDynamicIndexing;
-    VkBool32           shaderUniformTexelBufferArrayDynamicIndexing;
-    VkBool32           shaderStorageTexelBufferArrayDynamicIndexing;
-    VkBool32           shaderUniformBufferArrayNonUniformIndexing;
-    VkBool32           shaderSampledImageArrayNonUniformIndexing;
-    VkBool32           shaderStorageBufferArrayNonUniformIndexing;
-    VkBool32           shaderStorageImageArrayNonUniformIndexing;
-    VkBool32           shaderInputAttachmentArrayNonUniformIndexing;
-    VkBool32           shaderUniformTexelBufferArrayNonUniformIndexing;
-    VkBool32           shaderStorageTexelBufferArrayNonUniformIndexing;
-    VkBool32           descriptorBindingUniformBufferUpdateAfterBind;
-    VkBool32           descriptorBindingSampledImageUpdateAfterBind;
-    VkBool32           descriptorBindingStorageImageUpdateAfterBind;
-    VkBool32           descriptorBindingStorageBufferUpdateAfterBind;
-    VkBool32           descriptorBindingUniformTexelBufferUpdateAfterBind;
-    VkBool32           descriptorBindingStorageTexelBufferUpdateAfterBind;
-    VkBool32           descriptorBindingUpdateUnusedWhilePending;
-    VkBool32           descriptorBindingPartiallyBound;
-    VkBool32           descriptorBindingVariableDescriptorCount;
-    VkBool32           runtimeDescriptorArray;
-} VkPhysicalDeviceDescriptorIndexingFeatures;
-
-typedef struct VkPhysicalDeviceDescriptorIndexingProperties {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxUpdateAfterBindDescriptorsInAllPools;
-    VkBool32           shaderUniformBufferArrayNonUniformIndexingNative;
-    VkBool32           shaderSampledImageArrayNonUniformIndexingNative;
-    VkBool32           shaderStorageBufferArrayNonUniformIndexingNative;
-    VkBool32           shaderStorageImageArrayNonUniformIndexingNative;
-    VkBool32           shaderInputAttachmentArrayNonUniformIndexingNative;
-    VkBool32           robustBufferAccessUpdateAfterBind;
-    VkBool32           quadDivergentImplicitLod;
-    uint32_t           maxPerStageDescriptorUpdateAfterBindSamplers;
-    uint32_t           maxPerStageDescriptorUpdateAfterBindUniformBuffers;
-    uint32_t           maxPerStageDescriptorUpdateAfterBindStorageBuffers;
-    uint32_t           maxPerStageDescriptorUpdateAfterBindSampledImages;
-    uint32_t           maxPerStageDescriptorUpdateAfterBindStorageImages;
-    uint32_t           maxPerStageDescriptorUpdateAfterBindInputAttachments;
-    uint32_t           maxPerStageUpdateAfterBindResources;
-    uint32_t           maxDescriptorSetUpdateAfterBindSamplers;
-    uint32_t           maxDescriptorSetUpdateAfterBindUniformBuffers;
-    uint32_t           maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
-    uint32_t           maxDescriptorSetUpdateAfterBindStorageBuffers;
-    uint32_t           maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
-    uint32_t           maxDescriptorSetUpdateAfterBindSampledImages;
-    uint32_t           maxDescriptorSetUpdateAfterBindStorageImages;
-    uint32_t           maxDescriptorSetUpdateAfterBindInputAttachments;
-} VkPhysicalDeviceDescriptorIndexingProperties;
-
-typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           descriptorSetCount;
-    const uint32_t*    pDescriptorCounts;
-} VkDescriptorSetVariableDescriptorCountAllocateInfo;
-
-typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxVariableDescriptorCount;
-} VkDescriptorSetVariableDescriptorCountLayoutSupport;
-
-typedef struct VkSubpassDescriptionDepthStencilResolve {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkResolveModeFlagBits            depthResolveMode;
-    VkResolveModeFlagBits            stencilResolveMode;
-    const VkAttachmentReference2*    pDepthStencilResolveAttachment;
-} VkSubpassDescriptionDepthStencilResolve;
-
-typedef struct VkPhysicalDeviceDepthStencilResolveProperties {
-    VkStructureType       sType;
-    void*                 pNext;
-    VkResolveModeFlags    supportedDepthResolveModes;
-    VkResolveModeFlags    supportedStencilResolveModes;
-    VkBool32              independentResolveNone;
-    VkBool32              independentResolve;
-} VkPhysicalDeviceDepthStencilResolveProperties;
-
-typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           scalarBlockLayout;
-} VkPhysicalDeviceScalarBlockLayoutFeatures;
-
-typedef struct VkImageStencilUsageCreateInfo {
-    VkStructureType      sType;
-    const void*          pNext;
-    VkImageUsageFlags    stencilUsage;
-} VkImageStencilUsageCreateInfo;
-
-typedef struct VkSamplerReductionModeCreateInfo {
-    VkStructureType           sType;
-    const void*               pNext;
-    VkSamplerReductionMode    reductionMode;
-} VkSamplerReductionModeCreateInfo;
-
-typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           filterMinmaxSingleComponentFormats;
-    VkBool32           filterMinmaxImageComponentMapping;
-} VkPhysicalDeviceSamplerFilterMinmaxProperties;
-
-typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           vulkanMemoryModel;
-    VkBool32           vulkanMemoryModelDeviceScope;
-    VkBool32           vulkanMemoryModelAvailabilityVisibilityChains;
-} VkPhysicalDeviceVulkanMemoryModelFeatures;
-
-typedef struct VkPhysicalDeviceImagelessFramebufferFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           imagelessFramebuffer;
-} VkPhysicalDeviceImagelessFramebufferFeatures;
-
-typedef struct VkFramebufferAttachmentImageInfo {
-    VkStructureType       sType;
-    const void*           pNext;
-    VkImageCreateFlags    flags;
-    VkImageUsageFlags     usage;
-    uint32_t              width;
-    uint32_t              height;
-    uint32_t              layerCount;
-    uint32_t              viewFormatCount;
-    const VkFormat*       pViewFormats;
-} VkFramebufferAttachmentImageInfo;
-
-typedef struct VkFramebufferAttachmentsCreateInfo {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    uint32_t                                   attachmentImageInfoCount;
-    const VkFramebufferAttachmentImageInfo*    pAttachmentImageInfos;
-} VkFramebufferAttachmentsCreateInfo;
-
-typedef struct VkRenderPassAttachmentBeginInfo {
-    VkStructureType       sType;
-    const void*           pNext;
-    uint32_t              attachmentCount;
-    const VkImageView*    pAttachments;
-} VkRenderPassAttachmentBeginInfo;
-
-typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           uniformBufferStandardLayout;
-} VkPhysicalDeviceUniformBufferStandardLayoutFeatures;
-
-typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderSubgroupExtendedTypes;
-} VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures;
-
-typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           separateDepthStencilLayouts;
-} VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures;
-
-typedef struct VkAttachmentReferenceStencilLayout {
-    VkStructureType    sType;
-    void*              pNext;
-    VkImageLayout      stencilLayout;
-} VkAttachmentReferenceStencilLayout;
-
-typedef struct VkAttachmentDescriptionStencilLayout {
-    VkStructureType    sType;
-    void*              pNext;
-    VkImageLayout      stencilInitialLayout;
-    VkImageLayout      stencilFinalLayout;
-} VkAttachmentDescriptionStencilLayout;
-
-typedef struct VkPhysicalDeviceHostQueryResetFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           hostQueryReset;
-} VkPhysicalDeviceHostQueryResetFeatures;
-
-typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           timelineSemaphore;
-} VkPhysicalDeviceTimelineSemaphoreFeatures;
-
-typedef struct VkPhysicalDeviceTimelineSemaphoreProperties {
-    VkStructureType    sType;
-    void*              pNext;
-    uint64_t           maxTimelineSemaphoreValueDifference;
-} VkPhysicalDeviceTimelineSemaphoreProperties;
-
-typedef struct VkSemaphoreTypeCreateInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkSemaphoreType    semaphoreType;
-    uint64_t           initialValue;
-} VkSemaphoreTypeCreateInfo;
-
-typedef struct VkTimelineSemaphoreSubmitInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           waitSemaphoreValueCount;
-    const uint64_t*    pWaitSemaphoreValues;
-    uint32_t           signalSemaphoreValueCount;
-    const uint64_t*    pSignalSemaphoreValues;
-} VkTimelineSemaphoreSubmitInfo;
-
-typedef struct VkSemaphoreWaitInfo {
-    VkStructureType         sType;
-    const void*             pNext;
-    VkSemaphoreWaitFlags    flags;
-    uint32_t                semaphoreCount;
-    const VkSemaphore*      pSemaphores;
-    const uint64_t*         pValues;
-} VkSemaphoreWaitInfo;
-
-typedef struct VkSemaphoreSignalInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkSemaphore        semaphore;
-    uint64_t           value;
-} VkSemaphoreSignalInfo;
-
-typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           bufferDeviceAddress;
-    VkBool32           bufferDeviceAddressCaptureReplay;
-    VkBool32           bufferDeviceAddressMultiDevice;
-} VkPhysicalDeviceBufferDeviceAddressFeatures;
-
-typedef struct VkBufferDeviceAddressInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBuffer           buffer;
-} VkBufferDeviceAddressInfo;
-
-typedef struct VkBufferOpaqueCaptureAddressCreateInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint64_t           opaqueCaptureAddress;
-} VkBufferOpaqueCaptureAddressCreateInfo;
-
-typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint64_t           opaqueCaptureAddress;
-} VkMemoryOpaqueCaptureAddressAllocateInfo;
-
-typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkDeviceMemory     memory;
-} VkDeviceMemoryOpaqueCaptureAddressInfo;
-
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo*      pRenderPassBegin, const VkSubpassBeginInfo*      pSubpassBeginInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo*      pSubpassBeginInfo, const VkSubpassEndInfo*        pSubpassEndInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo*        pSubpassEndInfo);
-typedef void (VKAPI_PTR *PFN_vkResetQueryPool)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValue)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue);
-typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphores)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout);
-typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphore)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo);
-typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
-typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
-typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddress)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    VkBuffer                                    countBuffer,
-    VkDeviceSize                                countBufferOffset,
-    uint32_t                                    maxDrawCount,
-    uint32_t                                    stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    VkBuffer                                    countBuffer,
-    VkDeviceSize                                countBufferOffset,
-    uint32_t                                    maxDrawCount,
-    uint32_t                                    stride);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2(
-    VkDevice                                    device,
-    const VkRenderPassCreateInfo2*              pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkRenderPass*                               pRenderPass);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2(
-    VkCommandBuffer                             commandBuffer,
-    const VkRenderPassBeginInfo*                pRenderPassBegin,
-    const VkSubpassBeginInfo*                   pSubpassBeginInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2(
-    VkCommandBuffer                             commandBuffer,
-    const VkSubpassBeginInfo*                   pSubpassBeginInfo,
-    const VkSubpassEndInfo*                     pSubpassEndInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2(
-    VkCommandBuffer                             commandBuffer,
-    const VkSubpassEndInfo*                     pSubpassEndInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkResetQueryPool(
-    VkDevice                                    device,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    firstQuery,
-    uint32_t                                    queryCount);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue(
-    VkDevice                                    device,
-    VkSemaphore                                 semaphore,
-    uint64_t*                                   pValue);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores(
-    VkDevice                                    device,
-    const VkSemaphoreWaitInfo*                  pWaitInfo,
-    uint64_t                                    timeout);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore(
-    VkDevice                                    device,
-    const VkSemaphoreSignalInfo*                pSignalInfo);
-
-VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress(
-    VkDevice                                    device,
-    const VkBufferDeviceAddressInfo*            pInfo);
-
-VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress(
-    VkDevice                                    device,
-    const VkBufferDeviceAddressInfo*            pInfo);
-
-VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress(
-    VkDevice                                    device,
-    const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
-#endif
-
-
-#define VK_KHR_surface 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
-#define VK_KHR_SURFACE_SPEC_VERSION       25
-#define VK_KHR_SURFACE_EXTENSION_NAME     "VK_KHR_surface"
-
-typedef enum VkPresentModeKHR {
-    VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
-    VK_PRESENT_MODE_MAILBOX_KHR = 1,
-    VK_PRESENT_MODE_FIFO_KHR = 2,
-    VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
-    VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
-    VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
-    VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkPresentModeKHR;
-
-typedef enum VkColorSpaceKHR {
-    VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
-    VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
-    VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
-    VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003,
-    VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
-    VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
-    VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
-    VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
-    VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
-    VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
-    VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
-    VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
-    VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
-    VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
-    VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014,
-    VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000,
-    VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
-    VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,
-    VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkColorSpaceKHR;
-
-typedef enum VkSurfaceTransformFlagBitsKHR {
-    VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
-    VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
-    VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
-    VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
-    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
-    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
-    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
-    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
-    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
-    VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSurfaceTransformFlagBitsKHR;
-
-typedef enum VkCompositeAlphaFlagBitsKHR {
-    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
-    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
-    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
-    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
-    VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkCompositeAlphaFlagBitsKHR;
-typedef VkFlags VkCompositeAlphaFlagsKHR;
-typedef VkFlags VkSurfaceTransformFlagsKHR;
-typedef struct VkSurfaceCapabilitiesKHR {
-    uint32_t                         minImageCount;
-    uint32_t                         maxImageCount;
-    VkExtent2D                       currentExtent;
-    VkExtent2D                       minImageExtent;
-    VkExtent2D                       maxImageExtent;
-    uint32_t                         maxImageArrayLayers;
-    VkSurfaceTransformFlagsKHR       supportedTransforms;
-    VkSurfaceTransformFlagBitsKHR    currentTransform;
-    VkCompositeAlphaFlagsKHR         supportedCompositeAlpha;
-    VkImageUsageFlags                supportedUsageFlags;
-} VkSurfaceCapabilitiesKHR;
-
-typedef struct VkSurfaceFormatKHR {
-    VkFormat           format;
-    VkColorSpaceKHR    colorSpace;
-} VkSurfaceFormatKHR;
-
-typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
-    VkInstance                                  instance,
-    VkSurfaceKHR                                surface,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex,
-    VkSurfaceKHR                                surface,
-    VkBool32*                                   pSupported);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkSurfaceKHR                                surface,
-    VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkSurfaceKHR                                surface,
-    uint32_t*                                   pSurfaceFormatCount,
-    VkSurfaceFormatKHR*                         pSurfaceFormats);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkSurfaceKHR                                surface,
-    uint32_t*                                   pPresentModeCount,
-    VkPresentModeKHR*                           pPresentModes);
-#endif
-
-
-#define VK_KHR_swapchain 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
-#define VK_KHR_SWAPCHAIN_SPEC_VERSION     70
-#define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
-
-typedef enum VkSwapchainCreateFlagBitsKHR {
-    VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001,
-    VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002,
-    VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 0x00000004,
-    VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSwapchainCreateFlagBitsKHR;
-typedef VkFlags VkSwapchainCreateFlagsKHR;
-
-typedef enum VkDeviceGroupPresentModeFlagBitsKHR {
-    VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 0x00000001,
-    VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 0x00000002,
-    VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 0x00000004,
-    VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008,
-    VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkDeviceGroupPresentModeFlagBitsKHR;
-typedef VkFlags VkDeviceGroupPresentModeFlagsKHR;
-typedef struct VkSwapchainCreateInfoKHR {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkSwapchainCreateFlagsKHR        flags;
-    VkSurfaceKHR                     surface;
-    uint32_t                         minImageCount;
-    VkFormat                         imageFormat;
-    VkColorSpaceKHR                  imageColorSpace;
-    VkExtent2D                       imageExtent;
-    uint32_t                         imageArrayLayers;
-    VkImageUsageFlags                imageUsage;
-    VkSharingMode                    imageSharingMode;
-    uint32_t                         queueFamilyIndexCount;
-    const uint32_t*                  pQueueFamilyIndices;
-    VkSurfaceTransformFlagBitsKHR    preTransform;
-    VkCompositeAlphaFlagBitsKHR      compositeAlpha;
-    VkPresentModeKHR                 presentMode;
-    VkBool32                         clipped;
-    VkSwapchainKHR                   oldSwapchain;
-} VkSwapchainCreateInfoKHR;
-
-typedef struct VkPresentInfoKHR {
-    VkStructureType          sType;
-    const void*              pNext;
-    uint32_t                 waitSemaphoreCount;
-    const VkSemaphore*       pWaitSemaphores;
-    uint32_t                 swapchainCount;
-    const VkSwapchainKHR*    pSwapchains;
-    const uint32_t*          pImageIndices;
-    VkResult*                pResults;
-} VkPresentInfoKHR;
-
-typedef struct VkImageSwapchainCreateInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkSwapchainKHR     swapchain;
-} VkImageSwapchainCreateInfoKHR;
-
-typedef struct VkBindImageMemorySwapchainInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkSwapchainKHR     swapchain;
-    uint32_t           imageIndex;
-} VkBindImageMemorySwapchainInfoKHR;
-
-typedef struct VkAcquireNextImageInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkSwapchainKHR     swapchain;
-    uint64_t           timeout;
-    VkSemaphore        semaphore;
-    VkFence            fence;
-    uint32_t           deviceMask;
-} VkAcquireNextImageInfoKHR;
-
-typedef struct VkDeviceGroupPresentCapabilitiesKHR {
-    VkStructureType                     sType;
-    void*                               pNext;
-    uint32_t                            presentMask[VK_MAX_DEVICE_GROUP_SIZE];
-    VkDeviceGroupPresentModeFlagsKHR    modes;
-} VkDeviceGroupPresentCapabilitiesKHR;
-
-typedef struct VkDeviceGroupPresentInfoKHR {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    uint32_t                               swapchainCount;
-    const uint32_t*                        pDeviceMasks;
-    VkDeviceGroupPresentModeFlagBitsKHR    mode;
-} VkDeviceGroupPresentInfoKHR;
-
-typedef struct VkDeviceGroupSwapchainCreateInfoKHR {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    VkDeviceGroupPresentModeFlagsKHR    modes;
-} VkDeviceGroupSwapchainCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
-typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex);
-typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHR)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHR)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects);
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHR)(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
-    VkDevice                                    device,
-    const VkSwapchainCreateInfoKHR*             pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSwapchainKHR*                             pSwapchain);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain,
-    uint32_t*                                   pSwapchainImageCount,
-    VkImage*                                    pSwapchainImages);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain,
-    uint64_t                                    timeout,
-    VkSemaphore                                 semaphore,
-    VkFence                                     fence,
-    uint32_t*                                   pImageIndex);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
-    VkQueue                                     queue,
-    const VkPresentInfoKHR*                     pPresentInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR(
-    VkDevice                                    device,
-    VkDeviceGroupPresentCapabilitiesKHR*        pDeviceGroupPresentCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR(
-    VkDevice                                    device,
-    VkSurfaceKHR                                surface,
-    VkDeviceGroupPresentModeFlagsKHR*           pModes);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkSurfaceKHR                                surface,
-    uint32_t*                                   pRectCount,
-    VkRect2D*                                   pRects);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR(
-    VkDevice                                    device,
-    const VkAcquireNextImageInfoKHR*            pAcquireInfo,
-    uint32_t*                                   pImageIndex);
-#endif
-
-
-#define VK_KHR_display 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
-#define VK_KHR_DISPLAY_SPEC_VERSION       23
-#define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display"
-typedef VkFlags VkDisplayModeCreateFlagsKHR;
-
-typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
-    VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
-    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
-    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
-    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
-    VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkDisplayPlaneAlphaFlagBitsKHR;
-typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
-typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
-typedef struct VkDisplayModeParametersKHR {
-    VkExtent2D    visibleRegion;
-    uint32_t      refreshRate;
-} VkDisplayModeParametersKHR;
-
-typedef struct VkDisplayModeCreateInfoKHR {
-    VkStructureType                sType;
-    const void*                    pNext;
-    VkDisplayModeCreateFlagsKHR    flags;
-    VkDisplayModeParametersKHR     parameters;
-} VkDisplayModeCreateInfoKHR;
-
-typedef struct VkDisplayModePropertiesKHR {
-    VkDisplayModeKHR              displayMode;
-    VkDisplayModeParametersKHR    parameters;
-} VkDisplayModePropertiesKHR;
-
-typedef struct VkDisplayPlaneCapabilitiesKHR {
-    VkDisplayPlaneAlphaFlagsKHR    supportedAlpha;
-    VkOffset2D                     minSrcPosition;
-    VkOffset2D                     maxSrcPosition;
-    VkExtent2D                     minSrcExtent;
-    VkExtent2D                     maxSrcExtent;
-    VkOffset2D                     minDstPosition;
-    VkOffset2D                     maxDstPosition;
-    VkExtent2D                     minDstExtent;
-    VkExtent2D                     maxDstExtent;
-} VkDisplayPlaneCapabilitiesKHR;
-
-typedef struct VkDisplayPlanePropertiesKHR {
-    VkDisplayKHR    currentDisplay;
-    uint32_t        currentStackIndex;
-} VkDisplayPlanePropertiesKHR;
-
-typedef struct VkDisplayPropertiesKHR {
-    VkDisplayKHR                  display;
-    const char*                   displayName;
-    VkExtent2D                    physicalDimensions;
-    VkExtent2D                    physicalResolution;
-    VkSurfaceTransformFlagsKHR    supportedTransforms;
-    VkBool32                      planeReorderPossible;
-    VkBool32                      persistentContent;
-} VkDisplayPropertiesKHR;
-
-typedef struct VkDisplaySurfaceCreateInfoKHR {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkDisplaySurfaceCreateFlagsKHR    flags;
-    VkDisplayModeKHR                  displayMode;
-    uint32_t                          planeIndex;
-    uint32_t                          planeStackIndex;
-    VkSurfaceTransformFlagBitsKHR     transform;
-    float                             globalAlpha;
-    VkDisplayPlaneAlphaFlagBitsKHR    alphaMode;
-    VkExtent2D                        imageExtent;
-} VkDisplaySurfaceCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pPropertyCount,
-    VkDisplayPropertiesKHR*                     pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pPropertyCount,
-    VkDisplayPlanePropertiesKHR*                pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    planeIndex,
-    uint32_t*                                   pDisplayCount,
-    VkDisplayKHR*                               pDisplays);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkDisplayKHR                                display,
-    uint32_t*                                   pPropertyCount,
-    VkDisplayModePropertiesKHR*                 pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkDisplayKHR                                display,
-    const VkDisplayModeCreateInfoKHR*           pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDisplayModeKHR*                           pMode);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkDisplayModeKHR                            mode,
-    uint32_t                                    planeIndex,
-    VkDisplayPlaneCapabilitiesKHR*              pCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
-    VkInstance                                  instance,
-    const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-
-#define VK_KHR_display_swapchain 1
-#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10
-#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
-
-
-#define VK_KHR_sampler_mirror_clamp_to_edge 1
-#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 3
-#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge"
-
-
-#define VK_KHR_dynamic_rendering 1
-#define VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION 1
-#define VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME "VK_KHR_dynamic_rendering"
-
-typedef enum VkRenderingFlagBitsKHR {
-    VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = 0x00000001,
-    VK_RENDERING_SUSPENDING_BIT_KHR = 0x00000002,
-    VK_RENDERING_RESUMING_BIT_KHR = 0x00000004,
-    VK_RENDERING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkRenderingFlagBitsKHR;
-typedef VkFlags VkRenderingFlagsKHR;
-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;
-
-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;
-
-typedef struct VkPipelineRenderingCreateInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           viewMask;
-    uint32_t           colorAttachmentCount;
-    const VkFormat*    pColorAttachmentFormats;
-    VkFormat           depthAttachmentFormat;
-    VkFormat           stencilAttachmentFormat;
-} VkPipelineRenderingCreateInfoKHR;
-
-typedef struct VkPhysicalDeviceDynamicRenderingFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           dynamicRendering;
-} VkPhysicalDeviceDynamicRenderingFeaturesKHR;
-
-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;
-
-typedef struct VkRenderingFragmentShadingRateAttachmentInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkImageView        imageView;
-    VkImageLayout      imageLayout;
-    VkExtent2D         shadingRateAttachmentTexelSize;
-} VkRenderingFragmentShadingRateAttachmentInfoKHR;
-
-typedef struct VkRenderingFragmentDensityMapAttachmentInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkImageView        imageView;
-    VkImageLayout      imageLayout;
-} VkRenderingFragmentDensityMapAttachmentInfoEXT;
-
-typedef struct VkAttachmentSampleCountInfoAMD {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    uint32_t                        colorAttachmentCount;
-    const VkSampleCountFlagBits*    pColorAttachmentSamples;
-    VkSampleCountFlagBits           depthStencilAttachmentSamples;
-} VkAttachmentSampleCountInfoAMD;
-
-typedef VkAttachmentSampleCountInfoAMD VkAttachmentSampleCountInfoNV;
-
-typedef struct VkMultiviewPerViewAttributesInfoNVX {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBool32           perViewAttributes;
-    VkBool32           perViewAttributesPositionXOnly;
-} VkMultiviewPerViewAttributesInfoNVX;
-
-typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderingKHR)(VkCommandBuffer                   commandBuffer, const VkRenderingInfoKHR*                           pRenderingInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdEndRenderingKHR)(VkCommandBuffer                   commandBuffer);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkRenderingInfoKHR*                   pRenderingInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR(
-    VkCommandBuffer                             commandBuffer);
-#endif
-
-
-#define VK_KHR_multiview 1
-#define VK_KHR_MULTIVIEW_SPEC_VERSION     1
-#define VK_KHR_MULTIVIEW_EXTENSION_NAME   "VK_KHR_multiview"
-typedef VkRenderPassMultiviewCreateInfo VkRenderPassMultiviewCreateInfoKHR;
-
-typedef VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR;
-
-typedef VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR;
-
-
-
-#define VK_KHR_get_physical_device_properties2 1
-#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 2
-#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2"
-typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR;
-
-typedef VkPhysicalDeviceProperties2 VkPhysicalDeviceProperties2KHR;
-
-typedef VkFormatProperties2 VkFormatProperties2KHR;
-
-typedef VkImageFormatProperties2 VkImageFormatProperties2KHR;
-
-typedef VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR;
-
-typedef VkQueueFamilyProperties2 VkQueueFamilyProperties2KHR;
-
-typedef VkPhysicalDeviceMemoryProperties2 VkPhysicalDeviceMemoryProperties2KHR;
-
-typedef VkSparseImageFormatProperties2 VkSparseImageFormatProperties2KHR;
-
-typedef VkPhysicalDeviceSparseImageFormatInfo2 VkPhysicalDeviceSparseImageFormatInfo2KHR;
-
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceFeatures2*                  pFeatures);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceProperties2*                pProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkFormat                                    format,
-    VkFormatProperties2*                        pFormatProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
-    VkImageFormatProperties2*                   pImageFormatProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pQueueFamilyPropertyCount,
-    VkQueueFamilyProperties2*                   pQueueFamilyProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkPhysicalDeviceMemoryProperties2*          pMemoryProperties);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
-    uint32_t*                                   pPropertyCount,
-    VkSparseImageFormatProperties2*             pProperties);
-#endif
-
-
-#define VK_KHR_device_group 1
-#define VK_KHR_DEVICE_GROUP_SPEC_VERSION  4
-#define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group"
-typedef VkPeerMemoryFeatureFlags VkPeerMemoryFeatureFlagsKHR;
-
-typedef VkPeerMemoryFeatureFlagBits VkPeerMemoryFeatureFlagBitsKHR;
-
-typedef VkMemoryAllocateFlags VkMemoryAllocateFlagsKHR;
-
-typedef VkMemoryAllocateFlagBits VkMemoryAllocateFlagBitsKHR;
-
-typedef VkMemoryAllocateFlagsInfo VkMemoryAllocateFlagsInfoKHR;
-
-typedef VkDeviceGroupRenderPassBeginInfo VkDeviceGroupRenderPassBeginInfoKHR;
-
-typedef VkDeviceGroupCommandBufferBeginInfo VkDeviceGroupCommandBufferBeginInfoKHR;
-
-typedef VkDeviceGroupSubmitInfo VkDeviceGroupSubmitInfoKHR;
-
-typedef VkDeviceGroupBindSparseInfo VkDeviceGroupBindSparseInfoKHR;
-
-typedef VkBindBufferMemoryDeviceGroupInfo VkBindBufferMemoryDeviceGroupInfoKHR;
-
-typedef VkBindImageMemoryDeviceGroupInfo VkBindImageMemoryDeviceGroupInfoKHR;
-
-typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHR)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
-typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHR)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR(
-    VkDevice                                    device,
-    uint32_t                                    heapIndex,
-    uint32_t                                    localDeviceIndex,
-    uint32_t                                    remoteDeviceIndex,
-    VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    deviceMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    baseGroupX,
-    uint32_t                                    baseGroupY,
-    uint32_t                                    baseGroupZ,
-    uint32_t                                    groupCountX,
-    uint32_t                                    groupCountY,
-    uint32_t                                    groupCountZ);
-#endif
-
-
-#define VK_KHR_shader_draw_parameters 1
-#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1
-#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
-
-
-#define VK_KHR_maintenance1 1
-#define VK_KHR_MAINTENANCE_1_SPEC_VERSION 2
-#define VK_KHR_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_maintenance1"
-#define VK_KHR_MAINTENANCE1_SPEC_VERSION  VK_KHR_MAINTENANCE_1_SPEC_VERSION
-#define VK_KHR_MAINTENANCE1_EXTENSION_NAME VK_KHR_MAINTENANCE_1_EXTENSION_NAME
-typedef VkCommandPoolTrimFlags VkCommandPoolTrimFlagsKHR;
-
-typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR(
-    VkDevice                                    device,
-    VkCommandPool                               commandPool,
-    VkCommandPoolTrimFlags                      flags);
-#endif
-
-
-#define VK_KHR_device_group_creation 1
-#define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1
-#define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation"
-#define VK_MAX_DEVICE_GROUP_SIZE_KHR      VK_MAX_DEVICE_GROUP_SIZE
-typedef VkPhysicalDeviceGroupProperties VkPhysicalDeviceGroupPropertiesKHR;
-
-typedef VkDeviceGroupDeviceCreateInfo VkDeviceGroupDeviceCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHR)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR(
-    VkInstance                                  instance,
-    uint32_t*                                   pPhysicalDeviceGroupCount,
-    VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties);
-#endif
-
-
-#define VK_KHR_external_memory_capabilities 1
-#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities"
-#define VK_LUID_SIZE_KHR                  VK_LUID_SIZE
-typedef VkExternalMemoryHandleTypeFlags VkExternalMemoryHandleTypeFlagsKHR;
-
-typedef VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR;
-
-typedef VkExternalMemoryFeatureFlags VkExternalMemoryFeatureFlagsKHR;
-
-typedef VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR;
-
-typedef VkExternalMemoryProperties VkExternalMemoryPropertiesKHR;
-
-typedef VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR;
-
-typedef VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR;
-
-typedef VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR;
-
-typedef VkExternalBufferProperties VkExternalBufferPropertiesKHR;
-
-typedef VkPhysicalDeviceIDProperties VkPhysicalDeviceIDPropertiesKHR;
-
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
-    VkExternalBufferProperties*                 pExternalBufferProperties);
-#endif
-
-
-#define VK_KHR_external_memory 1
-#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory"
-#define VK_QUEUE_FAMILY_EXTERNAL_KHR      VK_QUEUE_FAMILY_EXTERNAL
-typedef VkExternalMemoryImageCreateInfo VkExternalMemoryImageCreateInfoKHR;
-
-typedef VkExternalMemoryBufferCreateInfo VkExternalMemoryBufferCreateInfoKHR;
-
-typedef VkExportMemoryAllocateInfo VkExportMemoryAllocateInfoKHR;
-
-
-
-#define VK_KHR_external_memory_fd 1
-#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd"
-typedef struct VkImportMemoryFdInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-    int                                   fd;
-} VkImportMemoryFdInfoKHR;
-
-typedef struct VkMemoryFdPropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           memoryTypeBits;
-} VkMemoryFdPropertiesKHR;
-
-typedef struct VkMemoryGetFdInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkDeviceMemory                        memory;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-} VkMemoryGetFdInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd);
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR(
-    VkDevice                                    device,
-    const VkMemoryGetFdInfoKHR*                 pGetFdInfo,
-    int*                                        pFd);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR(
-    VkDevice                                    device,
-    VkExternalMemoryHandleTypeFlagBits          handleType,
-    int                                         fd,
-    VkMemoryFdPropertiesKHR*                    pMemoryFdProperties);
-#endif
-
-
-#define VK_KHR_external_semaphore_capabilities 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities"
-typedef VkExternalSemaphoreHandleTypeFlags VkExternalSemaphoreHandleTypeFlagsKHR;
-
-typedef VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR;
-
-typedef VkExternalSemaphoreFeatureFlags VkExternalSemaphoreFeatureFlagsKHR;
-
-typedef VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR;
-
-typedef VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR;
-
-typedef VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR;
-
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
-    VkExternalSemaphoreProperties*              pExternalSemaphoreProperties);
-#endif
-
-
-#define VK_KHR_external_semaphore 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore"
-typedef VkSemaphoreImportFlags VkSemaphoreImportFlagsKHR;
-
-typedef VkSemaphoreImportFlagBits VkSemaphoreImportFlagBitsKHR;
-
-typedef VkExportSemaphoreCreateInfo VkExportSemaphoreCreateInfoKHR;
-
-
-
-#define VK_KHR_external_semaphore_fd 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd"
-typedef struct VkImportSemaphoreFdInfoKHR {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkSemaphore                              semaphore;
-    VkSemaphoreImportFlags                   flags;
-    VkExternalSemaphoreHandleTypeFlagBits    handleType;
-    int                                      fd;
-} VkImportSemaphoreFdInfoKHR;
-
-typedef struct VkSemaphoreGetFdInfoKHR {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkSemaphore                              semaphore;
-    VkExternalSemaphoreHandleTypeFlagBits    handleType;
-} VkSemaphoreGetFdInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR(
-    VkDevice                                    device,
-    const VkImportSemaphoreFdInfoKHR*           pImportSemaphoreFdInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR(
-    VkDevice                                    device,
-    const VkSemaphoreGetFdInfoKHR*              pGetFdInfo,
-    int*                                        pFd);
-#endif
-
-
-#define VK_KHR_push_descriptor 1
-#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2
-#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor"
-typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxPushDescriptors;
-} VkPhysicalDevicePushDescriptorPropertiesKHR;
-
-typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites);
-typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineBindPoint                         pipelineBindPoint,
-    VkPipelineLayout                            layout,
-    uint32_t                                    set,
-    uint32_t                                    descriptorWriteCount,
-    const VkWriteDescriptorSet*                 pDescriptorWrites);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR(
-    VkCommandBuffer                             commandBuffer,
-    VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
-    VkPipelineLayout                            layout,
-    uint32_t                                    set,
-    const void*                                 pData);
-#endif
-
-
-#define VK_KHR_shader_float16_int8 1
-#define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1
-#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8"
-typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR;
-
-typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceFloat16Int8FeaturesKHR;
-
-
-
-#define VK_KHR_16bit_storage 1
-#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1
-#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
-typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR;
-
-
-
-#define VK_KHR_incremental_present 1
-#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2
-#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
-typedef struct VkRectLayerKHR {
-    VkOffset2D    offset;
-    VkExtent2D    extent;
-    uint32_t      layer;
-} VkRectLayerKHR;
-
-typedef struct VkPresentRegionKHR {
-    uint32_t                 rectangleCount;
-    const VkRectLayerKHR*    pRectangles;
-} VkPresentRegionKHR;
-
-typedef struct VkPresentRegionsKHR {
-    VkStructureType              sType;
-    const void*                  pNext;
-    uint32_t                     swapchainCount;
-    const VkPresentRegionKHR*    pRegions;
-} VkPresentRegionsKHR;
-
-
-
-#define VK_KHR_descriptor_update_template 1
-typedef VkDescriptorUpdateTemplate VkDescriptorUpdateTemplateKHR;
-
-#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
-#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template"
-typedef VkDescriptorUpdateTemplateType VkDescriptorUpdateTemplateTypeKHR;
-
-typedef VkDescriptorUpdateTemplateCreateFlags VkDescriptorUpdateTemplateCreateFlagsKHR;
-
-typedef VkDescriptorUpdateTemplateEntry VkDescriptorUpdateTemplateEntryKHR;
-
-typedef VkDescriptorUpdateTemplateCreateInfo VkDescriptorUpdateTemplateCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
-typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR(
-    VkDevice                                    device,
-    const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDescriptorUpdateTemplate*                 pDescriptorUpdateTemplate);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR(
-    VkDevice                                    device,
-    VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR(
-    VkDevice                                    device,
-    VkDescriptorSet                             descriptorSet,
-    VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
-    const void*                                 pData);
-#endif
-
-
-#define VK_KHR_imageless_framebuffer 1
-#define VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION 1
-#define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer"
-typedef VkPhysicalDeviceImagelessFramebufferFeatures VkPhysicalDeviceImagelessFramebufferFeaturesKHR;
-
-typedef VkFramebufferAttachmentsCreateInfo VkFramebufferAttachmentsCreateInfoKHR;
-
-typedef VkFramebufferAttachmentImageInfo VkFramebufferAttachmentImageInfoKHR;
-
-typedef VkRenderPassAttachmentBeginInfo VkRenderPassAttachmentBeginInfoKHR;
-
-
-
-#define VK_KHR_create_renderpass2 1
-#define VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION 1
-#define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2"
-typedef VkRenderPassCreateInfo2 VkRenderPassCreateInfo2KHR;
-
-typedef VkAttachmentDescription2 VkAttachmentDescription2KHR;
-
-typedef VkAttachmentReference2 VkAttachmentReference2KHR;
-
-typedef VkSubpassDescription2 VkSubpassDescription2KHR;
-
-typedef VkSubpassDependency2 VkSubpassDependency2KHR;
-
-typedef VkSubpassBeginInfo VkSubpassBeginInfoKHR;
-
-typedef VkSubpassEndInfo VkSubpassEndInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2KHR)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo*      pRenderPassBegin, const VkSubpassBeginInfo*      pSubpassBeginInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo*      pSubpassBeginInfo, const VkSubpassEndInfo*        pSubpassEndInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo*        pSubpassEndInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR(
-    VkDevice                                    device,
-    const VkRenderPassCreateInfo2*              pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkRenderPass*                               pRenderPass);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkRenderPassBeginInfo*                pRenderPassBegin,
-    const VkSubpassBeginInfo*                   pSubpassBeginInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkSubpassBeginInfo*                   pSubpassBeginInfo,
-    const VkSubpassEndInfo*                     pSubpassEndInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkSubpassEndInfo*                     pSubpassEndInfo);
-#endif
-
-
-#define VK_KHR_shared_presentable_image 1
-#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
-#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"
-typedef struct VkSharedPresentSurfaceCapabilitiesKHR {
-    VkStructureType      sType;
-    void*                pNext;
-    VkImageUsageFlags    sharedPresentSupportedUsageFlags;
-} VkSharedPresentSurfaceCapabilitiesKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain);
-#endif
-
-
-#define VK_KHR_external_fence_capabilities 1
-#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities"
-typedef VkExternalFenceHandleTypeFlags VkExternalFenceHandleTypeFlagsKHR;
-
-typedef VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR;
-
-typedef VkExternalFenceFeatureFlags VkExternalFenceFeatureFlagsKHR;
-
-typedef VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR;
-
-typedef VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR;
-
-typedef VkExternalFenceProperties VkExternalFencePropertiesKHR;
-
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
-    VkExternalFenceProperties*                  pExternalFenceProperties);
-#endif
-
-
-#define VK_KHR_external_fence 1
-#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence"
-typedef VkFenceImportFlags VkFenceImportFlagsKHR;
-
-typedef VkFenceImportFlagBits VkFenceImportFlagBitsKHR;
-
-typedef VkExportFenceCreateInfo VkExportFenceCreateInfoKHR;
-
-
-
-#define VK_KHR_external_fence_fd 1
-#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd"
-typedef struct VkImportFenceFdInfoKHR {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkFence                              fence;
-    VkFenceImportFlags                   flags;
-    VkExternalFenceHandleTypeFlagBits    handleType;
-    int                                  fd;
-} VkImportFenceFdInfoKHR;
-
-typedef struct VkFenceGetFdInfoKHR {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkFence                              fence;
-    VkExternalFenceHandleTypeFlagBits    handleType;
-} VkFenceGetFdInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR(
-    VkDevice                                    device,
-    const VkImportFenceFdInfoKHR*               pImportFenceFdInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR(
-    VkDevice                                    device,
-    const VkFenceGetFdInfoKHR*                  pGetFdInfo,
-    int*                                        pFd);
-#endif
-
-
-#define VK_KHR_performance_query 1
-#define VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION 1
-#define VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME "VK_KHR_performance_query"
-
-typedef enum VkPerformanceCounterUnitKHR {
-    VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = 0,
-    VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = 1,
-    VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = 2,
-    VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR = 3,
-    VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = 4,
-    VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = 5,
-    VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR = 6,
-    VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = 7,
-    VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR = 8,
-    VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = 9,
-    VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = 10,
-    VK_PERFORMANCE_COUNTER_UNIT_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkPerformanceCounterUnitKHR;
-
-typedef enum VkPerformanceCounterScopeKHR {
-    VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = 0,
-    VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = 1,
-    VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = 2,
-    VK_QUERY_SCOPE_COMMAND_BUFFER_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR,
-    VK_QUERY_SCOPE_RENDER_PASS_KHR = VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR,
-    VK_QUERY_SCOPE_COMMAND_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR,
-    VK_PERFORMANCE_COUNTER_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkPerformanceCounterScopeKHR;
-
-typedef enum VkPerformanceCounterStorageKHR {
-    VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR = 0,
-    VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR = 1,
-    VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = 2,
-    VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = 3,
-    VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = 4,
-    VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = 5,
-    VK_PERFORMANCE_COUNTER_STORAGE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkPerformanceCounterStorageKHR;
-
-typedef enum VkPerformanceCounterDescriptionFlagBitsKHR {
-    VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR = 0x00000001,
-    VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR = 0x00000002,
-    VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR,
-    VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR,
-    VK_PERFORMANCE_COUNTER_DESCRIPTION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkPerformanceCounterDescriptionFlagBitsKHR;
-typedef VkFlags VkPerformanceCounterDescriptionFlagsKHR;
-
-typedef enum VkAcquireProfilingLockFlagBitsKHR {
-    VK_ACQUIRE_PROFILING_LOCK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkAcquireProfilingLockFlagBitsKHR;
-typedef VkFlags VkAcquireProfilingLockFlagsKHR;
-typedef struct VkPhysicalDevicePerformanceQueryFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           performanceCounterQueryPools;
-    VkBool32           performanceCounterMultipleQueryPools;
-} VkPhysicalDevicePerformanceQueryFeaturesKHR;
-
-typedef struct VkPhysicalDevicePerformanceQueryPropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           allowCommandBufferQueryCopies;
-} VkPhysicalDevicePerformanceQueryPropertiesKHR;
-
-typedef struct VkPerformanceCounterKHR {
-    VkStructureType                   sType;
-    void*                             pNext;
-    VkPerformanceCounterUnitKHR       unit;
-    VkPerformanceCounterScopeKHR      scope;
-    VkPerformanceCounterStorageKHR    storage;
-    uint8_t                           uuid[VK_UUID_SIZE];
-} VkPerformanceCounterKHR;
-
-typedef struct VkPerformanceCounterDescriptionKHR {
-    VkStructureType                            sType;
-    void*                                      pNext;
-    VkPerformanceCounterDescriptionFlagsKHR    flags;
-    char                                       name[VK_MAX_DESCRIPTION_SIZE];
-    char                                       category[VK_MAX_DESCRIPTION_SIZE];
-    char                                       description[VK_MAX_DESCRIPTION_SIZE];
-} VkPerformanceCounterDescriptionKHR;
-
-typedef struct VkQueryPoolPerformanceCreateInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           queueFamilyIndex;
-    uint32_t           counterIndexCount;
-    const uint32_t*    pCounterIndices;
-} VkQueryPoolPerformanceCreateInfoKHR;
-
-typedef union VkPerformanceCounterResultKHR {
-    int32_t     int32;
-    int64_t     int64;
-    uint32_t    uint32;
-    uint64_t    uint64;
-    float       float32;
-    double      float64;
-} VkPerformanceCounterResultKHR;
-
-typedef struct VkAcquireProfilingLockInfoKHR {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkAcquireProfilingLockFlagsKHR    flags;
-    uint64_t                          timeout;
-} VkAcquireProfilingLockInfoKHR;
-
-typedef struct VkPerformanceQuerySubmitInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           counterPassIndex;
-} VkPerformanceQuerySubmitInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterKHR* pCounters, VkPerformanceCounterDescriptionKHR* pCounterDescriptions);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)(VkPhysicalDevice physicalDevice, const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, uint32_t* pNumPasses);
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireProfilingLockKHR)(VkDevice device, const VkAcquireProfilingLockInfoKHR* pInfo);
-typedef void (VKAPI_PTR *PFN_vkReleaseProfilingLockKHR)(VkDevice device);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex,
-    uint32_t*                                   pCounterCount,
-    VkPerformanceCounterKHR*                    pCounters,
-    VkPerformanceCounterDescriptionKHR*         pCounterDescriptions);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkQueryPoolPerformanceCreateInfoKHR*  pPerformanceQueryCreateInfo,
-    uint32_t*                                   pNumPasses);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireProfilingLockKHR(
-    VkDevice                                    device,
-    const VkAcquireProfilingLockInfoKHR*        pInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR(
-    VkDevice                                    device);
-#endif
-
-
-#define VK_KHR_maintenance2 1
-#define VK_KHR_MAINTENANCE_2_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_maintenance2"
-#define VK_KHR_MAINTENANCE2_SPEC_VERSION  VK_KHR_MAINTENANCE_2_SPEC_VERSION
-#define VK_KHR_MAINTENANCE2_EXTENSION_NAME VK_KHR_MAINTENANCE_2_EXTENSION_NAME
-typedef VkPointClippingBehavior VkPointClippingBehaviorKHR;
-
-typedef VkTessellationDomainOrigin VkTessellationDomainOriginKHR;
-
-typedef VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR;
-
-typedef VkRenderPassInputAttachmentAspectCreateInfo VkRenderPassInputAttachmentAspectCreateInfoKHR;
-
-typedef VkInputAttachmentAspectReference VkInputAttachmentAspectReferenceKHR;
-
-typedef VkImageViewUsageCreateInfo VkImageViewUsageCreateInfoKHR;
-
-typedef VkPipelineTessellationDomainOriginStateCreateInfo VkPipelineTessellationDomainOriginStateCreateInfoKHR;
-
-
-
-#define VK_KHR_get_surface_capabilities2 1
-#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1
-#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
-typedef struct VkPhysicalDeviceSurfaceInfo2KHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkSurfaceKHR       surface;
-} VkPhysicalDeviceSurfaceInfo2KHR;
-
-typedef struct VkSurfaceCapabilities2KHR {
-    VkStructureType             sType;
-    void*                       pNext;
-    VkSurfaceCapabilitiesKHR    surfaceCapabilities;
-} VkSurfaceCapabilities2KHR;
-
-typedef struct VkSurfaceFormat2KHR {
-    VkStructureType       sType;
-    void*                 pNext;
-    VkSurfaceFormatKHR    surfaceFormat;
-} VkSurfaceFormat2KHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
-    VkSurfaceCapabilities2KHR*                  pSurfaceCapabilities);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
-    uint32_t*                                   pSurfaceFormatCount,
-    VkSurfaceFormat2KHR*                        pSurfaceFormats);
-#endif
-
-
-#define VK_KHR_variable_pointers 1
-#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1
-#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers"
-typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeaturesKHR;
-
-typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR;
-
-
-
-#define VK_KHR_get_display_properties2 1
-#define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1
-#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2"
-typedef struct VkDisplayProperties2KHR {
-    VkStructureType           sType;
-    void*                     pNext;
-    VkDisplayPropertiesKHR    displayProperties;
-} VkDisplayProperties2KHR;
-
-typedef struct VkDisplayPlaneProperties2KHR {
-    VkStructureType                sType;
-    void*                          pNext;
-    VkDisplayPlanePropertiesKHR    displayPlaneProperties;
-} VkDisplayPlaneProperties2KHR;
-
-typedef struct VkDisplayModeProperties2KHR {
-    VkStructureType               sType;
-    void*                         pNext;
-    VkDisplayModePropertiesKHR    displayModeProperties;
-} VkDisplayModeProperties2KHR;
-
-typedef struct VkDisplayPlaneInfo2KHR {
-    VkStructureType     sType;
-    const void*         pNext;
-    VkDisplayModeKHR    mode;
-    uint32_t            planeIndex;
-} VkDisplayPlaneInfo2KHR;
-
-typedef struct VkDisplayPlaneCapabilities2KHR {
-    VkStructureType                  sType;
-    void*                            pNext;
-    VkDisplayPlaneCapabilitiesKHR    capabilities;
-} VkDisplayPlaneCapabilities2KHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayProperties2KHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModeProperties2KHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pPropertyCount,
-    VkDisplayProperties2KHR*                    pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pPropertyCount,
-    VkDisplayPlaneProperties2KHR*               pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    VkDisplayKHR                                display,
-    uint32_t*                                   pPropertyCount,
-    VkDisplayModeProperties2KHR*                pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR(
-    VkPhysicalDevice                            physicalDevice,
-    const VkDisplayPlaneInfo2KHR*               pDisplayPlaneInfo,
-    VkDisplayPlaneCapabilities2KHR*             pCapabilities);
-#endif
-
-
-#define VK_KHR_dedicated_allocation 1
-#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3
-#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation"
-typedef VkMemoryDedicatedRequirements VkMemoryDedicatedRequirementsKHR;
-
-typedef VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR;
-
-
-
-#define VK_KHR_storage_buffer_storage_class 1
-#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1
-#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class"
-
-
-#define VK_KHR_relaxed_block_layout 1
-#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1
-#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout"
-
-
-#define VK_KHR_get_memory_requirements2 1
-#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1
-#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2"
-typedef VkBufferMemoryRequirementsInfo2 VkBufferMemoryRequirementsInfo2KHR;
-
-typedef VkImageMemoryRequirementsInfo2 VkImageMemoryRequirementsInfo2KHR;
-
-typedef VkImageSparseMemoryRequirementsInfo2 VkImageSparseMemoryRequirementsInfo2KHR;
-
-typedef VkMemoryRequirements2 VkMemoryRequirements2KHR;
-
-typedef VkSparseImageMemoryRequirements2 VkSparseImageMemoryRequirements2KHR;
-
-typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR(
-    VkDevice                                    device,
-    const VkImageMemoryRequirementsInfo2*       pInfo,
-    VkMemoryRequirements2*                      pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR(
-    VkDevice                                    device,
-    const VkBufferMemoryRequirementsInfo2*      pInfo,
-    VkMemoryRequirements2*                      pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR(
-    VkDevice                                    device,
-    const VkImageSparseMemoryRequirementsInfo2* pInfo,
-    uint32_t*                                   pSparseMemoryRequirementCount,
-    VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements);
-#endif
-
-
-#define VK_KHR_image_format_list 1
-#define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1
-#define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list"
-typedef VkImageFormatListCreateInfo VkImageFormatListCreateInfoKHR;
-
-
-
-#define VK_KHR_sampler_ycbcr_conversion 1
-typedef VkSamplerYcbcrConversion VkSamplerYcbcrConversionKHR;
-
-#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 14
-#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion"
-typedef VkSamplerYcbcrModelConversion VkSamplerYcbcrModelConversionKHR;
-
-typedef VkSamplerYcbcrRange VkSamplerYcbcrRangeKHR;
-
-typedef VkChromaLocation VkChromaLocationKHR;
-
-typedef VkSamplerYcbcrConversionCreateInfo VkSamplerYcbcrConversionCreateInfoKHR;
-
-typedef VkSamplerYcbcrConversionInfo VkSamplerYcbcrConversionInfoKHR;
-
-typedef VkBindImagePlaneMemoryInfo VkBindImagePlaneMemoryInfoKHR;
-
-typedef VkImagePlaneMemoryRequirementsInfo VkImagePlaneMemoryRequirementsInfoKHR;
-
-typedef VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR;
-
-typedef VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
-typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR(
-    VkDevice                                    device,
-    const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSamplerYcbcrConversion*                   pYcbcrConversion);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR(
-    VkDevice                                    device,
-    VkSamplerYcbcrConversion                    ycbcrConversion,
-    const VkAllocationCallbacks*                pAllocator);
-#endif
-
-
-#define VK_KHR_bind_memory2 1
-#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1
-#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2"
-typedef VkBindBufferMemoryInfo VkBindBufferMemoryInfoKHR;
-
-typedef VkBindImageMemoryInfo VkBindImageMemoryInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
-typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR(
-    VkDevice                                    device,
-    uint32_t                                    bindInfoCount,
-    const VkBindBufferMemoryInfo*               pBindInfos);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR(
-    VkDevice                                    device,
-    uint32_t                                    bindInfoCount,
-    const VkBindImageMemoryInfo*                pBindInfos);
-#endif
-
-
-#define VK_KHR_maintenance3 1
-#define VK_KHR_MAINTENANCE_3_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE_3_EXTENSION_NAME "VK_KHR_maintenance3"
-#define VK_KHR_MAINTENANCE3_SPEC_VERSION  VK_KHR_MAINTENANCE_3_SPEC_VERSION
-#define VK_KHR_MAINTENANCE3_EXTENSION_NAME VK_KHR_MAINTENANCE_3_EXTENSION_NAME
-typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR;
-
-typedef VkDescriptorSetLayoutSupport VkDescriptorSetLayoutSupportKHR;
-
-typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupportKHR)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR(
-    VkDevice                                    device,
-    const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
-    VkDescriptorSetLayoutSupport*               pSupport);
-#endif
-
-
-#define VK_KHR_draw_indirect_count 1
-#define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
-#define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count"
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    VkBuffer                                    countBuffer,
-    VkDeviceSize                                countBufferOffset,
-    uint32_t                                    maxDrawCount,
-    uint32_t                                    stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    VkBuffer                                    countBuffer,
-    VkDeviceSize                                countBufferOffset,
-    uint32_t                                    maxDrawCount,
-    uint32_t                                    stride);
-#endif
-
-
-#define VK_KHR_shader_subgroup_extended_types 1
-#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION 1
-#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types"
-typedef VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR;
-
-
-
-#define VK_KHR_8bit_storage 1
-#define VK_KHR_8BIT_STORAGE_SPEC_VERSION  1
-#define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage"
-typedef VkPhysicalDevice8BitStorageFeatures VkPhysicalDevice8BitStorageFeaturesKHR;
-
-
-
-#define VK_KHR_shader_atomic_int64 1
-#define VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION 1
-#define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64"
-typedef VkPhysicalDeviceShaderAtomicInt64Features VkPhysicalDeviceShaderAtomicInt64FeaturesKHR;
-
-
-
-#define VK_KHR_shader_clock 1
-#define VK_KHR_SHADER_CLOCK_SPEC_VERSION  1
-#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock"
-typedef struct VkPhysicalDeviceShaderClockFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderSubgroupClock;
-    VkBool32           shaderDeviceClock;
-} VkPhysicalDeviceShaderClockFeaturesKHR;
-
-
-
-#define VK_KHR_driver_properties 1
-#define VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION 1
-#define VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME "VK_KHR_driver_properties"
-#define VK_MAX_DRIVER_NAME_SIZE_KHR       VK_MAX_DRIVER_NAME_SIZE
-#define VK_MAX_DRIVER_INFO_SIZE_KHR       VK_MAX_DRIVER_INFO_SIZE
-typedef VkDriverId VkDriverIdKHR;
-
-typedef VkConformanceVersion VkConformanceVersionKHR;
-
-typedef VkPhysicalDeviceDriverProperties VkPhysicalDeviceDriverPropertiesKHR;
-
-
-
-#define VK_KHR_shader_float_controls 1
-#define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 4
-#define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls"
-typedef VkShaderFloatControlsIndependence VkShaderFloatControlsIndependenceKHR;
-
-typedef VkPhysicalDeviceFloatControlsProperties VkPhysicalDeviceFloatControlsPropertiesKHR;
-
-
-
-#define VK_KHR_depth_stencil_resolve 1
-#define VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION 1
-#define VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME "VK_KHR_depth_stencil_resolve"
-typedef VkResolveModeFlagBits VkResolveModeFlagBitsKHR;
-
-typedef VkResolveModeFlags VkResolveModeFlagsKHR;
-
-typedef VkSubpassDescriptionDepthStencilResolve VkSubpassDescriptionDepthStencilResolveKHR;
-
-typedef VkPhysicalDeviceDepthStencilResolveProperties VkPhysicalDeviceDepthStencilResolvePropertiesKHR;
-
-
-
-#define VK_KHR_swapchain_mutable_format 1
-#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1
-#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format"
-
-
-#define VK_KHR_timeline_semaphore 1
-#define VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION 2
-#define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore"
-typedef VkSemaphoreType VkSemaphoreTypeKHR;
-
-typedef VkSemaphoreWaitFlagBits VkSemaphoreWaitFlagBitsKHR;
-
-typedef VkSemaphoreWaitFlags VkSemaphoreWaitFlagsKHR;
-
-typedef VkPhysicalDeviceTimelineSemaphoreFeatures VkPhysicalDeviceTimelineSemaphoreFeaturesKHR;
-
-typedef VkPhysicalDeviceTimelineSemaphoreProperties VkPhysicalDeviceTimelineSemaphorePropertiesKHR;
-
-typedef VkSemaphoreTypeCreateInfo VkSemaphoreTypeCreateInfoKHR;
-
-typedef VkTimelineSemaphoreSubmitInfo VkTimelineSemaphoreSubmitInfoKHR;
-
-typedef VkSemaphoreWaitInfo VkSemaphoreWaitInfoKHR;
-
-typedef VkSemaphoreSignalInfo VkSemaphoreSignalInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValueKHR)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue);
-typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphoresKHR)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout);
-typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphoreKHR)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR(
-    VkDevice                                    device,
-    VkSemaphore                                 semaphore,
-    uint64_t*                                   pValue);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR(
-    VkDevice                                    device,
-    const VkSemaphoreWaitInfo*                  pWaitInfo,
-    uint64_t                                    timeout);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR(
-    VkDevice                                    device,
-    const VkSemaphoreSignalInfo*                pSignalInfo);
-#endif
-
-
-#define VK_KHR_vulkan_memory_model 1
-#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3
-#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model"
-typedef VkPhysicalDeviceVulkanMemoryModelFeatures VkPhysicalDeviceVulkanMemoryModelFeaturesKHR;
-
-
-
-#define VK_KHR_shader_terminate_invocation 1
-#define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1
-#define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation"
-typedef struct VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderTerminateInvocation;
-} VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR;
-
-
-
-#define VK_KHR_fragment_shading_rate 1
-#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 2
-#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate"
-
-typedef enum VkFragmentShadingRateCombinerOpKHR {
-    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR = 0,
-    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR = 1,
-    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR = 2,
-    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR = 3,
-    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR = 4,
-    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkFragmentShadingRateCombinerOpKHR;
-typedef struct VkFragmentShadingRateAttachmentInfoKHR {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    const VkAttachmentReference2*    pFragmentShadingRateAttachment;
-    VkExtent2D                       shadingRateAttachmentTexelSize;
-} VkFragmentShadingRateAttachmentInfoKHR;
-
-typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkExtent2D                            fragmentSize;
-    VkFragmentShadingRateCombinerOpKHR    combinerOps[2];
-} VkPipelineFragmentShadingRateStateCreateInfoKHR;
-
-typedef struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           pipelineFragmentShadingRate;
-    VkBool32           primitiveFragmentShadingRate;
-    VkBool32           attachmentFragmentShadingRate;
-} VkPhysicalDeviceFragmentShadingRateFeaturesKHR;
-
-typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR {
-    VkStructureType          sType;
-    void*                    pNext;
-    VkExtent2D               minFragmentShadingRateAttachmentTexelSize;
-    VkExtent2D               maxFragmentShadingRateAttachmentTexelSize;
-    uint32_t                 maxFragmentShadingRateAttachmentTexelSizeAspectRatio;
-    VkBool32                 primitiveFragmentShadingRateWithMultipleViewports;
-    VkBool32                 layeredShadingRateAttachments;
-    VkBool32                 fragmentShadingRateNonTrivialCombinerOps;
-    VkExtent2D               maxFragmentSize;
-    uint32_t                 maxFragmentSizeAspectRatio;
-    uint32_t                 maxFragmentShadingRateCoverageSamples;
-    VkSampleCountFlagBits    maxFragmentShadingRateRasterizationSamples;
-    VkBool32                 fragmentShadingRateWithShaderDepthStencilWrites;
-    VkBool32                 fragmentShadingRateWithSampleMask;
-    VkBool32                 fragmentShadingRateWithShaderSampleMask;
-    VkBool32                 fragmentShadingRateWithConservativeRasterization;
-    VkBool32                 fragmentShadingRateWithFragmentShaderInterlock;
-    VkBool32                 fragmentShadingRateWithCustomSampleLocations;
-    VkBool32                 fragmentShadingRateStrictMultiplyCombiner;
-} VkPhysicalDeviceFragmentShadingRatePropertiesKHR;
-
-typedef struct VkPhysicalDeviceFragmentShadingRateKHR {
-    VkStructureType       sType;
-    void*                 pNext;
-    VkSampleCountFlags    sampleCounts;
-    VkExtent2D            fragmentSize;
-} VkPhysicalDeviceFragmentShadingRateKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates);
-typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateKHR)(VkCommandBuffer           commandBuffer, const VkExtent2D*                           pFragmentSize, const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pFragmentShadingRateCount,
-    VkPhysicalDeviceFragmentShadingRateKHR*     pFragmentShadingRates);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkExtent2D*                           pFragmentSize,
-    const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
-#endif
-
-
-#define VK_KHR_spirv_1_4 1
-#define VK_KHR_SPIRV_1_4_SPEC_VERSION     1
-#define VK_KHR_SPIRV_1_4_EXTENSION_NAME   "VK_KHR_spirv_1_4"
-
-
-#define VK_KHR_surface_protected_capabilities 1
-#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION 1
-#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME "VK_KHR_surface_protected_capabilities"
-typedef struct VkSurfaceProtectedCapabilitiesKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBool32           supportsProtected;
-} VkSurfaceProtectedCapabilitiesKHR;
-
-
-
-#define VK_KHR_separate_depth_stencil_layouts 1
-#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION 1
-#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME "VK_KHR_separate_depth_stencil_layouts"
-typedef VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR;
-
-typedef VkAttachmentReferenceStencilLayout VkAttachmentReferenceStencilLayoutKHR;
-
-typedef VkAttachmentDescriptionStencilLayout VkAttachmentDescriptionStencilLayoutKHR;
-
-
-
-#define VK_KHR_present_wait 1
-#define VK_KHR_PRESENT_WAIT_SPEC_VERSION  1
-#define VK_KHR_PRESENT_WAIT_EXTENSION_NAME "VK_KHR_present_wait"
-typedef struct VkPhysicalDevicePresentWaitFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           presentWait;
-} VkPhysicalDevicePresentWaitFeaturesKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkWaitForPresentKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t presentId, uint64_t timeout);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresentKHR(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain,
-    uint64_t                                    presentId,
-    uint64_t                                    timeout);
-#endif
-
-
-#define VK_KHR_uniform_buffer_standard_layout 1
-#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION 1
-#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout"
-typedef VkPhysicalDeviceUniformBufferStandardLayoutFeatures VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR;
-
-
-
-#define VK_KHR_buffer_device_address 1
-#define VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 1
-#define VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_KHR_buffer_device_address"
-typedef VkPhysicalDeviceBufferDeviceAddressFeatures VkPhysicalDeviceBufferDeviceAddressFeaturesKHR;
-
-typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoKHR;
-
-typedef VkBufferOpaqueCaptureAddressCreateInfo VkBufferOpaqueCaptureAddressCreateInfoKHR;
-
-typedef VkMemoryOpaqueCaptureAddressAllocateInfo VkMemoryOpaqueCaptureAddressAllocateInfoKHR;
-
-typedef VkDeviceMemoryOpaqueCaptureAddressInfo VkDeviceMemoryOpaqueCaptureAddressInfoKHR;
-
-typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
-typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
-typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressKHR(
-    VkDevice                                    device,
-    const VkBufferDeviceAddressInfo*            pInfo);
-
-VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR(
-    VkDevice                                    device,
-    const VkBufferDeviceAddressInfo*            pInfo);
-
-VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR(
-    VkDevice                                    device,
-    const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
-#endif
-
-
-#define VK_KHR_deferred_host_operations 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR)
-#define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 4
-#define VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME "VK_KHR_deferred_host_operations"
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDeferredOperationKHR)(VkDevice device, const VkAllocationCallbacks* pAllocator, VkDeferredOperationKHR* pDeferredOperation);
-typedef void (VKAPI_PTR *PFN_vkDestroyDeferredOperationKHR)(VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks* pAllocator);
-typedef uint32_t (VKAPI_PTR *PFN_vkGetDeferredOperationMaxConcurrencyKHR)(VkDevice device, VkDeferredOperationKHR operation);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDeferredOperationResultKHR)(VkDevice device, VkDeferredOperationKHR operation);
-typedef VkResult (VKAPI_PTR *PFN_vkDeferredOperationJoinKHR)(VkDevice device, VkDeferredOperationKHR operation);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR(
-    VkDevice                                    device,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDeferredOperationKHR*                     pDeferredOperation);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      operation,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      operation);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      operation);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      operation);
-#endif
-
-
-#define VK_KHR_pipeline_executable_properties 1
-#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1
-#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties"
-
-typedef enum VkPipelineExecutableStatisticFormatKHR {
-    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0,
-    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1,
-    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2,
-    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3,
-    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkPipelineExecutableStatisticFormatKHR;
-typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           pipelineExecutableInfo;
-} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
-
-typedef struct VkPipelineInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkPipeline         pipeline;
-} VkPipelineInfoKHR;
-
-typedef struct VkPipelineExecutablePropertiesKHR {
-    VkStructureType       sType;
-    void*                 pNext;
-    VkShaderStageFlags    stages;
-    char                  name[VK_MAX_DESCRIPTION_SIZE];
-    char                  description[VK_MAX_DESCRIPTION_SIZE];
-    uint32_t              subgroupSize;
-} VkPipelineExecutablePropertiesKHR;
-
-typedef struct VkPipelineExecutableInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkPipeline         pipeline;
-    uint32_t           executableIndex;
-} VkPipelineExecutableInfoKHR;
-
-typedef union VkPipelineExecutableStatisticValueKHR {
-    VkBool32    b32;
-    int64_t     i64;
-    uint64_t    u64;
-    double      f64;
-} VkPipelineExecutableStatisticValueKHR;
-
-typedef struct VkPipelineExecutableStatisticKHR {
-    VkStructureType                           sType;
-    void*                                     pNext;
-    char                                      name[VK_MAX_DESCRIPTION_SIZE];
-    char                                      description[VK_MAX_DESCRIPTION_SIZE];
-    VkPipelineExecutableStatisticFormatKHR    format;
-    VkPipelineExecutableStatisticValueKHR     value;
-} VkPipelineExecutableStatisticKHR;
-
-typedef struct VkPipelineExecutableInternalRepresentationKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    char               name[VK_MAX_DESCRIPTION_SIZE];
-    char               description[VK_MAX_DESCRIPTION_SIZE];
-    VkBool32           isText;
-    size_t             dataSize;
-    void*              pData;
-} VkPipelineExecutableInternalRepresentationKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice                        device, const VkPipelineInfoKHR*        pPipelineInfo, uint32_t* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice                        device, const VkPipelineExecutableInfoKHR*  pExecutableInfo, uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice                        device, const VkPipelineExecutableInfoKHR*  pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR(
-    VkDevice                                    device,
-    const VkPipelineInfoKHR*                    pPipelineInfo,
-    uint32_t*                                   pExecutableCount,
-    VkPipelineExecutablePropertiesKHR*          pProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR(
-    VkDevice                                    device,
-    const VkPipelineExecutableInfoKHR*          pExecutableInfo,
-    uint32_t*                                   pStatisticCount,
-    VkPipelineExecutableStatisticKHR*           pStatistics);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR(
-    VkDevice                                    device,
-    const VkPipelineExecutableInfoKHR*          pExecutableInfo,
-    uint32_t*                                   pInternalRepresentationCount,
-    VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
-#endif
-
-
-#define VK_KHR_shader_integer_dot_product 1
-#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1
-#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product"
-typedef struct VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderIntegerDotProduct;
-} VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR;
-
-typedef struct VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           integerDotProduct8BitUnsignedAccelerated;
-    VkBool32           integerDotProduct8BitSignedAccelerated;
-    VkBool32           integerDotProduct8BitMixedSignednessAccelerated;
-    VkBool32           integerDotProduct4x8BitPackedUnsignedAccelerated;
-    VkBool32           integerDotProduct4x8BitPackedSignedAccelerated;
-    VkBool32           integerDotProduct4x8BitPackedMixedSignednessAccelerated;
-    VkBool32           integerDotProduct16BitUnsignedAccelerated;
-    VkBool32           integerDotProduct16BitSignedAccelerated;
-    VkBool32           integerDotProduct16BitMixedSignednessAccelerated;
-    VkBool32           integerDotProduct32BitUnsignedAccelerated;
-    VkBool32           integerDotProduct32BitSignedAccelerated;
-    VkBool32           integerDotProduct32BitMixedSignednessAccelerated;
-    VkBool32           integerDotProduct64BitUnsignedAccelerated;
-    VkBool32           integerDotProduct64BitSignedAccelerated;
-    VkBool32           integerDotProduct64BitMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating8BitSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating16BitSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating32BitSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating64BitSignedAccelerated;
-    VkBool32           integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
-} VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR;
-
-
-
-#define VK_KHR_pipeline_library 1
-#define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1
-#define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library"
-typedef struct VkPipelineLibraryCreateInfoKHR {
-    VkStructureType      sType;
-    const void*          pNext;
-    uint32_t             libraryCount;
-    const VkPipeline*    pLibraries;
-} VkPipelineLibraryCreateInfoKHR;
-
-
-
-#define VK_KHR_shader_non_semantic_info 1
-#define VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION 1
-#define VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME "VK_KHR_shader_non_semantic_info"
-
-
-#define VK_KHR_present_id 1
-#define VK_KHR_PRESENT_ID_SPEC_VERSION    1
-#define VK_KHR_PRESENT_ID_EXTENSION_NAME  "VK_KHR_present_id"
-typedef struct VkPresentIdKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           swapchainCount;
-    const uint64_t*    pPresentIds;
-} VkPresentIdKHR;
-
-typedef struct VkPhysicalDevicePresentIdFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           presentId;
-} VkPhysicalDevicePresentIdFeaturesKHR;
-
-
-
-#define VK_KHR_synchronization2 1
-typedef uint64_t VkFlags64;
-#define VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION 1
-#define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2"
-typedef VkFlags64 VkPipelineStageFlags2KHR;
-
-// Flag bits for VkPipelineStageFlagBits2KHR
-typedef VkFlags64 VkPipelineStageFlagBits2KHR;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL;
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL;
-#endif
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 0x8000000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 0x10000000000ULL;
-
-typedef VkFlags64 VkAccessFlags2KHR;
-
-// Flag bits for VkAccessFlagBits2KHR
-typedef VkFlags64 VkAccessFlagBits2KHR;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_NONE_KHR = 0ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL;
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL;
-#endif
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 0x8000000000ULL;
-
-
-typedef enum VkSubmitFlagBitsKHR {
-    VK_SUBMIT_PROTECTED_BIT_KHR = 0x00000001,
-    VK_SUBMIT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSubmitFlagBitsKHR;
-typedef VkFlags VkSubmitFlagsKHR;
-typedef struct VkMemoryBarrier2KHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkPipelineStageFlags2KHR    srcStageMask;
-    VkAccessFlags2KHR           srcAccessMask;
-    VkPipelineStageFlags2KHR    dstStageMask;
-    VkAccessFlags2KHR           dstAccessMask;
-} VkMemoryBarrier2KHR;
-
-typedef struct VkBufferMemoryBarrier2KHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkPipelineStageFlags2KHR    srcStageMask;
-    VkAccessFlags2KHR           srcAccessMask;
-    VkPipelineStageFlags2KHR    dstStageMask;
-    VkAccessFlags2KHR           dstAccessMask;
-    uint32_t                    srcQueueFamilyIndex;
-    uint32_t                    dstQueueFamilyIndex;
-    VkBuffer                    buffer;
-    VkDeviceSize                offset;
-    VkDeviceSize                size;
-} VkBufferMemoryBarrier2KHR;
-
-typedef struct VkImageMemoryBarrier2KHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkPipelineStageFlags2KHR    srcStageMask;
-    VkAccessFlags2KHR           srcAccessMask;
-    VkPipelineStageFlags2KHR    dstStageMask;
-    VkAccessFlags2KHR           dstAccessMask;
-    VkImageLayout               oldLayout;
-    VkImageLayout               newLayout;
-    uint32_t                    srcQueueFamilyIndex;
-    uint32_t                    dstQueueFamilyIndex;
-    VkImage                     image;
-    VkImageSubresourceRange     subresourceRange;
-} VkImageMemoryBarrier2KHR;
-
-typedef struct VkDependencyInfoKHR {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    VkDependencyFlags                   dependencyFlags;
-    uint32_t                            memoryBarrierCount;
-    const VkMemoryBarrier2KHR*          pMemoryBarriers;
-    uint32_t                            bufferMemoryBarrierCount;
-    const VkBufferMemoryBarrier2KHR*    pBufferMemoryBarriers;
-    uint32_t                            imageMemoryBarrierCount;
-    const VkImageMemoryBarrier2KHR*     pImageMemoryBarriers;
-} VkDependencyInfoKHR;
-
-typedef struct VkSemaphoreSubmitInfoKHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkSemaphore                 semaphore;
-    uint64_t                    value;
-    VkPipelineStageFlags2KHR    stageMask;
-    uint32_t                    deviceIndex;
-} VkSemaphoreSubmitInfoKHR;
-
-typedef struct VkCommandBufferSubmitInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkCommandBuffer    commandBuffer;
-    uint32_t           deviceMask;
-} VkCommandBufferSubmitInfoKHR;
-
-typedef struct VkSubmitInfo2KHR {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    VkSubmitFlagsKHR                       flags;
-    uint32_t                               waitSemaphoreInfoCount;
-    const VkSemaphoreSubmitInfoKHR*        pWaitSemaphoreInfos;
-    uint32_t                               commandBufferInfoCount;
-    const VkCommandBufferSubmitInfoKHR*    pCommandBufferInfos;
-    uint32_t                               signalSemaphoreInfoCount;
-    const VkSemaphoreSubmitInfoKHR*        pSignalSemaphoreInfos;
-} VkSubmitInfo2KHR;
-
-typedef struct VkPhysicalDeviceSynchronization2FeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           synchronization2;
-} VkPhysicalDeviceSynchronization2FeaturesKHR;
-
-typedef struct VkQueueFamilyCheckpointProperties2NV {
-    VkStructureType             sType;
-    void*                       pNext;
-    VkPipelineStageFlags2KHR    checkpointExecutionStageMask;
-} VkQueueFamilyCheckpointProperties2NV;
-
-typedef struct VkCheckpointData2NV {
-    VkStructureType             sType;
-    void*                       pNext;
-    VkPipelineStageFlags2KHR    stage;
-    void*                       pCheckpointMarker;
-} VkCheckpointData2NV;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2KHR)(VkCommandBuffer                   commandBuffer, VkEvent                                             event, const VkDependencyInfoKHR*                          pDependencyInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2KHR)(VkCommandBuffer                   commandBuffer, VkEvent                                             event, VkPipelineStageFlags2KHR                            stageMask);
-typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer                   commandBuffer, uint32_t                                            eventCount, const VkEvent*                     pEvents, const VkDependencyInfoKHR*         pDependencyInfos);
-typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2KHR)(VkCommandBuffer                   commandBuffer, const VkDependencyInfoKHR*                                pDependencyInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2KHR)(VkCommandBuffer                   commandBuffer, VkPipelineStageFlags2KHR                            stage, VkQueryPool                                         queryPool, uint32_t                                            query);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2KHR)(VkQueue                           queue, uint32_t                            submitCount, const VkSubmitInfo2KHR*           pSubmits, VkFence           fence);
-typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarker2AMD)(VkCommandBuffer                   commandBuffer, VkPipelineStageFlags2KHR                            stage, VkBuffer                                            dstBuffer, VkDeviceSize                                        dstOffset, uint32_t                                            marker);
-typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointData2NV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR(
-    VkCommandBuffer                             commandBuffer,
-    VkEvent                                     event,
-    const VkDependencyInfoKHR*                  pDependencyInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2KHR(
-    VkCommandBuffer                             commandBuffer,
-    VkEvent                                     event,
-    VkPipelineStageFlags2KHR                    stageMask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    eventCount,
-    const VkEvent*                              pEvents,
-    const VkDependencyInfoKHR*                  pDependencyInfos);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkDependencyInfoKHR*                  pDependencyInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineStageFlags2KHR                    stage,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    query);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR(
-    VkQueue                                     queue,
-    uint32_t                                    submitCount,
-    const VkSubmitInfo2KHR*                     pSubmits,
-    VkFence                                     fence);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineStageFlags2KHR                    stage,
-    VkBuffer                                    dstBuffer,
-    VkDeviceSize                                dstOffset,
-    uint32_t                                    marker);
-
-VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV(
-    VkQueue                                     queue,
-    uint32_t*                                   pCheckpointDataCount,
-    VkCheckpointData2NV*                        pCheckpointData);
-#endif
-
-
-#define VK_KHR_shader_subgroup_uniform_control_flow 1
-#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION 1
-#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME "VK_KHR_shader_subgroup_uniform_control_flow"
-typedef struct VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderSubgroupUniformControlFlow;
-} VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
-
-
-
-#define VK_KHR_zero_initialize_workgroup_memory 1
-#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1
-#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME "VK_KHR_zero_initialize_workgroup_memory"
-typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderZeroInitializeWorkgroupMemory;
-} VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
-
-
-
-#define VK_KHR_workgroup_memory_explicit_layout 1
-#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION 1
-#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME "VK_KHR_workgroup_memory_explicit_layout"
-typedef struct VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           workgroupMemoryExplicitLayout;
-    VkBool32           workgroupMemoryExplicitLayoutScalarBlockLayout;
-    VkBool32           workgroupMemoryExplicitLayout8BitAccess;
-    VkBool32           workgroupMemoryExplicitLayout16BitAccess;
-} VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
-
-
-
-#define VK_KHR_copy_commands2 1
-#define VK_KHR_COPY_COMMANDS_2_SPEC_VERSION 1
-#define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2"
-typedef struct VkBufferCopy2KHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkDeviceSize       srcOffset;
-    VkDeviceSize       dstOffset;
-    VkDeviceSize       size;
-} VkBufferCopy2KHR;
-
-typedef struct VkCopyBufferInfo2KHR {
-    VkStructureType            sType;
-    const void*                pNext;
-    VkBuffer                   srcBuffer;
-    VkBuffer                   dstBuffer;
-    uint32_t                   regionCount;
-    const VkBufferCopy2KHR*    pRegions;
-} VkCopyBufferInfo2KHR;
-
-typedef struct VkImageCopy2KHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkImageSubresourceLayers    srcSubresource;
-    VkOffset3D                  srcOffset;
-    VkImageSubresourceLayers    dstSubresource;
-    VkOffset3D                  dstOffset;
-    VkExtent3D                  extent;
-} VkImageCopy2KHR;
-
-typedef struct VkCopyImageInfo2KHR {
-    VkStructureType           sType;
-    const void*               pNext;
-    VkImage                   srcImage;
-    VkImageLayout             srcImageLayout;
-    VkImage                   dstImage;
-    VkImageLayout             dstImageLayout;
-    uint32_t                  regionCount;
-    const VkImageCopy2KHR*    pRegions;
-} VkCopyImageInfo2KHR;
-
-typedef struct VkBufferImageCopy2KHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkDeviceSize                bufferOffset;
-    uint32_t                    bufferRowLength;
-    uint32_t                    bufferImageHeight;
-    VkImageSubresourceLayers    imageSubresource;
-    VkOffset3D                  imageOffset;
-    VkExtent3D                  imageExtent;
-} VkBufferImageCopy2KHR;
-
-typedef struct VkCopyBufferToImageInfo2KHR {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkBuffer                        srcBuffer;
-    VkImage                         dstImage;
-    VkImageLayout                   dstImageLayout;
-    uint32_t                        regionCount;
-    const VkBufferImageCopy2KHR*    pRegions;
-} VkCopyBufferToImageInfo2KHR;
-
-typedef struct VkCopyImageToBufferInfo2KHR {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkImage                         srcImage;
-    VkImageLayout                   srcImageLayout;
-    VkBuffer                        dstBuffer;
-    uint32_t                        regionCount;
-    const VkBufferImageCopy2KHR*    pRegions;
-} VkCopyImageToBufferInfo2KHR;
-
-typedef struct VkImageBlit2KHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkImageSubresourceLayers    srcSubresource;
-    VkOffset3D                  srcOffsets[2];
-    VkImageSubresourceLayers    dstSubresource;
-    VkOffset3D                  dstOffsets[2];
-} VkImageBlit2KHR;
-
-typedef struct VkBlitImageInfo2KHR {
-    VkStructureType           sType;
-    const void*               pNext;
-    VkImage                   srcImage;
-    VkImageLayout             srcImageLayout;
-    VkImage                   dstImage;
-    VkImageLayout             dstImageLayout;
-    uint32_t                  regionCount;
-    const VkImageBlit2KHR*    pRegions;
-    VkFilter                  filter;
-} VkBlitImageInfo2KHR;
-
-typedef struct VkImageResolve2KHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkImageSubresourceLayers    srcSubresource;
-    VkOffset3D                  srcOffset;
-    VkImageSubresourceLayers    dstSubresource;
-    VkOffset3D                  dstOffset;
-    VkExtent3D                  extent;
-} VkImageResolve2KHR;
-
-typedef struct VkResolveImageInfo2KHR {
-    VkStructureType              sType;
-    const void*                  pNext;
-    VkImage                      srcImage;
-    VkImageLayout                srcImageLayout;
-    VkImage                      dstImage;
-    VkImageLayout                dstImageLayout;
-    uint32_t                     regionCount;
-    const VkImageResolve2KHR*    pRegions;
-} VkResolveImageInfo2KHR;
-
-typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkCopyBufferInfo2KHR*                 pCopyBufferInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkCopyImageInfo2KHR*                  pCopyImageInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkCopyBufferToImageInfo2KHR*          pCopyBufferToImageInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkCopyImageToBufferInfo2KHR*          pCopyImageToBufferInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkBlitImageInfo2KHR*                  pBlitImageInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkResolveImageInfo2KHR*               pResolveImageInfo);
-#endif
-
-
-#define VK_KHR_format_feature_flags2 1
-#define VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION 1
-#define VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME "VK_KHR_format_feature_flags2"
-typedef VkFlags64 VkFormatFeatureFlags2KHR;
-
-// Flag bits for VkFormatFeatureFlagBits2KHR
-typedef VkFlags64 VkFormatFeatureFlagBits2KHR;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 0x00000001ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 0x00000002ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 0x00000004ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000010ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 0x00000020ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 0x00000040ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 0x00000080ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 0x00000100ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 0x00000200ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 0x00000400ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 0x00000800ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 0x00001000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 0x00004000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 0x00008000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 0x00010000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 0x00400000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 0x80000000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 0x100000000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 0x200000000ULL;
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000ULL;
-#endif
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000ULL;
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000ULL;
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkFormatFeatureFlagBits2KHR VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000ULL;
-#endif
-
-typedef struct VkFormatProperties3KHR {
-    VkStructureType             sType;
-    void*                       pNext;
-    VkFormatFeatureFlags2KHR    linearTilingFeatures;
-    VkFormatFeatureFlags2KHR    optimalTilingFeatures;
-    VkFormatFeatureFlags2KHR    bufferFeatures;
-} VkFormatProperties3KHR;
-
-
-
-#define VK_KHR_maintenance4 1
-#define VK_KHR_MAINTENANCE_4_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE_4_EXTENSION_NAME "VK_KHR_maintenance4"
-typedef struct VkPhysicalDeviceMaintenance4FeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           maintenance4;
-} VkPhysicalDeviceMaintenance4FeaturesKHR;
-
-typedef struct VkPhysicalDeviceMaintenance4PropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkDeviceSize       maxBufferSize;
-} VkPhysicalDeviceMaintenance4PropertiesKHR;
-
-typedef struct VkDeviceBufferMemoryRequirementsKHR {
-    VkStructureType              sType;
-    const void*                  pNext;
-    const VkBufferCreateInfo*    pCreateInfo;
-} VkDeviceBufferMemoryRequirementsKHR;
-
-typedef struct VkDeviceImageMemoryRequirementsKHR {
-    VkStructureType             sType;
-    const void*                 pNext;
-    const VkImageCreateInfo*    pCreateInfo;
-    VkImageAspectFlagBits       planeAspect;
-} VkDeviceImageMemoryRequirementsKHR;
-
-typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirementsKHR)(VkDevice device, const VkDeviceBufferMemoryRequirementsKHR* pInfo, VkMemoryRequirements2* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirementsKHR* pInfo, VkMemoryRequirements2* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirementsKHR* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirementsKHR(
-    VkDevice                                    device,
-    const VkDeviceBufferMemoryRequirementsKHR*  pInfo,
-    VkMemoryRequirements2*                      pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirementsKHR(
-    VkDevice                                    device,
-    const VkDeviceImageMemoryRequirementsKHR*   pInfo,
-    VkMemoryRequirements2*                      pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR(
-    VkDevice                                    device,
-    const VkDeviceImageMemoryRequirementsKHR*   pInfo,
-    uint32_t*                                   pSparseMemoryRequirementCount,
-    VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements);
-#endif
-
-
-#define VK_ANDROID_native_buffer 1
-#define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 6
-#define VK_ANDROID_NATIVE_BUFFER_NUMBER   11
-#define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME "VK_ANDROID_native_buffer"
-#define VK_ANDROID_NATIVE_BUFFER_NAME     VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME
-typedef struct VkNativeBufferANDROID {
-    VkStructureType    sType;
-    const void*        pNext;
-    const uint32_t*    handle;
-    int                stride;
-    int                format;
-    int                usage;
-    uint64_t           consumer;
-    uint64_t           producer;
-} VkNativeBufferANDROID;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROID)(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int* pNativeFenceFd);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsageANDROID(
-    VkDevice                                    device,
-    VkFormat                                    format,
-    VkImageUsageFlags                           imageUsage,
-    int*                                        grallocUsage);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireImageANDROID(
-    VkDevice                                    device,
-    VkImage                                     image,
-    int                                         nativeFenceFd,
-    VkSemaphore                                 semaphore,
-    VkFence                                     fence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueSignalReleaseImageANDROID(
-    VkQueue                                     queue,
-    uint32_t                                    waitSemaphoreCount,
-    const VkSemaphore*                          pWaitSemaphores,
-    VkImage                                     image,
-    int*                                        pNativeFenceFd);
-#endif
-
-
-#define VK_EXT_debug_report 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
-#define VK_EXT_DEBUG_REPORT_SPEC_VERSION  10
-#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
-
-typedef enum VkDebugReportObjectTypeEXT {
-    VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0,
-    VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1,
-    VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3,
-    VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4,
-    VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5,
-    VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6,
-    VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8,
-    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9,
-    VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10,
-    VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11,
-    VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12,
-    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13,
-    VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14,
-    VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15,
-    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16,
-    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17,
-    VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18,
-    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20,
-    VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23,
-    VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24,
-    VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25,
-    VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26,
-    VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30,
-    VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33,
-    VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = 1000156000,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000,
-    VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT = 1000029000,
-    VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT = 1000029001,
-    VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = 1000150000,
-    VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = 1000165000,
-    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT = 1000366000,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
-    VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
-    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT,
-    VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT,
-    VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDebugReportObjectTypeEXT;
-
-typedef enum VkDebugReportFlagBitsEXT {
-    VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001,
-    VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002,
-    VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004,
-    VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008,
-    VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010,
-    VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDebugReportFlagBitsEXT;
-typedef VkFlags VkDebugReportFlagsEXT;
-typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)(
-    VkDebugReportFlagsEXT                       flags,
-    VkDebugReportObjectTypeEXT                  objectType,
-    uint64_t                                    object,
-    size_t                                      location,
-    int32_t                                     messageCode,
-    const char*                                 pLayerPrefix,
-    const char*                                 pMessage,
-    void*                                       pUserData);
-
-typedef struct VkDebugReportCallbackCreateInfoEXT {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkDebugReportFlagsEXT           flags;
-    PFN_vkDebugReportCallbackEXT    pfnCallback;
-    void*                           pUserData;
-} VkDebugReportCallbackCreateInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
-typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
-    VkInstance                                  instance,
-    const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDebugReportCallbackEXT*                   pCallback);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
-    VkInstance                                  instance,
-    VkDebugReportCallbackEXT                    callback,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
-    VkInstance                                  instance,
-    VkDebugReportFlagsEXT                       flags,
-    VkDebugReportObjectTypeEXT                  objectType,
-    uint64_t                                    object,
-    size_t                                      location,
-    int32_t                                     messageCode,
-    const char*                                 pLayerPrefix,
-    const char*                                 pMessage);
-#endif
-
-
-#define VK_NV_glsl_shader 1
-#define VK_NV_GLSL_SHADER_SPEC_VERSION    1
-#define VK_NV_GLSL_SHADER_EXTENSION_NAME  "VK_NV_glsl_shader"
-
-
-#define VK_EXT_depth_range_unrestricted 1
-#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1
-#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted"
-
-
-#define VK_IMG_filter_cubic 1
-#define VK_IMG_FILTER_CUBIC_SPEC_VERSION  1
-#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic"
-
-
-#define VK_AMD_rasterization_order 1
-#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1
-#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order"
-
-typedef enum VkRasterizationOrderAMD {
-    VK_RASTERIZATION_ORDER_STRICT_AMD = 0,
-    VK_RASTERIZATION_ORDER_RELAXED_AMD = 1,
-    VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF
-} VkRasterizationOrderAMD;
-typedef struct VkPipelineRasterizationStateRasterizationOrderAMD {
-    VkStructureType            sType;
-    const void*                pNext;
-    VkRasterizationOrderAMD    rasterizationOrder;
-} VkPipelineRasterizationStateRasterizationOrderAMD;
-
-
-
-#define VK_AMD_shader_trinary_minmax 1
-#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1
-#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax"
-
-
-#define VK_AMD_shader_explicit_vertex_parameter 1
-#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1
-#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter"
-
-
-#define VK_EXT_debug_marker 1
-#define VK_EXT_DEBUG_MARKER_SPEC_VERSION  4
-#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker"
-typedef struct VkDebugMarkerObjectNameInfoEXT {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkDebugReportObjectTypeEXT    objectType;
-    uint64_t                      object;
-    const char*                   pObjectName;
-} VkDebugMarkerObjectNameInfoEXT;
-
-typedef struct VkDebugMarkerObjectTagInfoEXT {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkDebugReportObjectTypeEXT    objectType;
-    uint64_t                      object;
-    uint64_t                      tagName;
-    size_t                        tagSize;
-    const void*                   pTag;
-} VkDebugMarkerObjectTagInfoEXT;
-
-typedef struct VkDebugMarkerMarkerInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    const char*        pMarkerName;
-    float              color[4];
-} VkDebugMarkerMarkerInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer);
-typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT(
-    VkDevice                                    device,
-    const VkDebugMarkerObjectTagInfoEXT*        pTagInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT(
-    VkDevice                                    device,
-    const VkDebugMarkerObjectNameInfoEXT*       pNameInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT(
-    VkCommandBuffer                             commandBuffer,
-    const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT(
-    VkCommandBuffer                             commandBuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT(
-    VkCommandBuffer                             commandBuffer,
-    const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo);
-#endif
-
-
-#define VK_AMD_gcn_shader 1
-#define VK_AMD_GCN_SHADER_SPEC_VERSION    1
-#define VK_AMD_GCN_SHADER_EXTENSION_NAME  "VK_AMD_gcn_shader"
-
-
-#define VK_NV_dedicated_allocation 1
-#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1
-#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation"
-typedef struct VkDedicatedAllocationImageCreateInfoNV {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBool32           dedicatedAllocation;
-} VkDedicatedAllocationImageCreateInfoNV;
-
-typedef struct VkDedicatedAllocationBufferCreateInfoNV {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBool32           dedicatedAllocation;
-} VkDedicatedAllocationBufferCreateInfoNV;
-
-typedef struct VkDedicatedAllocationMemoryAllocateInfoNV {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkImage            image;
-    VkBuffer           buffer;
-} VkDedicatedAllocationMemoryAllocateInfoNV;
-
-
-
-#define VK_EXT_transform_feedback 1
-#define VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION 1
-#define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback"
-typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT;
-typedef struct VkPhysicalDeviceTransformFeedbackFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           transformFeedback;
-    VkBool32           geometryStreams;
-} VkPhysicalDeviceTransformFeedbackFeaturesEXT;
-
-typedef struct VkPhysicalDeviceTransformFeedbackPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxTransformFeedbackStreams;
-    uint32_t           maxTransformFeedbackBuffers;
-    VkDeviceSize       maxTransformFeedbackBufferSize;
-    uint32_t           maxTransformFeedbackStreamDataSize;
-    uint32_t           maxTransformFeedbackBufferDataSize;
-    uint32_t           maxTransformFeedbackBufferDataStride;
-    VkBool32           transformFeedbackQueries;
-    VkBool32           transformFeedbackStreamsLinesTriangles;
-    VkBool32           transformFeedbackRasterizationStreamSelect;
-    VkBool32           transformFeedbackDraw;
-} VkPhysicalDeviceTransformFeedbackPropertiesEXT;
-
-typedef struct VkPipelineRasterizationStateStreamCreateInfoEXT {
-    VkStructureType                                     sType;
-    const void*                                         pNext;
-    VkPipelineRasterizationStateStreamCreateFlagsEXT    flags;
-    uint32_t                                            rasterizationStream;
-} VkPipelineRasterizationStateStreamCreateInfoEXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdBindTransformFeedbackBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets);
-typedef void (VKAPI_PTR *PFN_vkCmdEndTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index);
-typedef void (VKAPI_PTR *PFN_vkCmdEndQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectByteCountEXT)(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstBinding,
-    uint32_t                                    bindingCount,
-    const VkBuffer*                             pBuffers,
-    const VkDeviceSize*                         pOffsets,
-    const VkDeviceSize*                         pSizes);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstCounterBuffer,
-    uint32_t                                    counterBufferCount,
-    const VkBuffer*                             pCounterBuffers,
-    const VkDeviceSize*                         pCounterBufferOffsets);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstCounterBuffer,
-    uint32_t                                    counterBufferCount,
-    const VkBuffer*                             pCounterBuffers,
-    const VkDeviceSize*                         pCounterBufferOffsets);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    query,
-    VkQueryControlFlags                         flags,
-    uint32_t                                    index);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    query,
-    uint32_t                                    index);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    instanceCount,
-    uint32_t                                    firstInstance,
-    VkBuffer                                    counterBuffer,
-    VkDeviceSize                                counterBufferOffset,
-    uint32_t                                    counterOffset,
-    uint32_t                                    vertexStride);
-#endif
-
-
-#define VK_NVX_binary_import 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuModuleNVX)
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuFunctionNVX)
-#define VK_NVX_BINARY_IMPORT_SPEC_VERSION 1
-#define VK_NVX_BINARY_IMPORT_EXTENSION_NAME "VK_NVX_binary_import"
-typedef struct VkCuModuleCreateInfoNVX {
-    VkStructureType    sType;
-    const void*        pNext;
-    size_t             dataSize;
-    const void*        pData;
-} VkCuModuleCreateInfoNVX;
-
-typedef struct VkCuFunctionCreateInfoNVX {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkCuModuleNVX      module;
-    const char*        pName;
-} VkCuFunctionCreateInfoNVX;
-
-typedef struct VkCuLaunchInfoNVX {
-    VkStructureType        sType;
-    const void*            pNext;
-    VkCuFunctionNVX        function;
-    uint32_t               gridDimX;
-    uint32_t               gridDimY;
-    uint32_t               gridDimZ;
-    uint32_t               blockDimX;
-    uint32_t               blockDimY;
-    uint32_t               blockDimZ;
-    uint32_t               sharedMemBytes;
-    size_t                 paramCount;
-    const void* const *    pParams;
-    size_t                 extraCount;
-    const void* const *    pExtras;
-} VkCuLaunchInfoNVX;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateCuModuleNVX)(VkDevice device, const VkCuModuleCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCuModuleNVX* pModule);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateCuFunctionNVX)(VkDevice device, const VkCuFunctionCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCuFunctionNVX* pFunction);
-typedef void (VKAPI_PTR *PFN_vkDestroyCuModuleNVX)(VkDevice device, VkCuModuleNVX module, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkDestroyCuFunctionNVX)(VkDevice device, VkCuFunctionNVX function, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkCmdCuLaunchKernelNVX)(VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX* pLaunchInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateCuModuleNVX(
-    VkDevice                                    device,
-    const VkCuModuleCreateInfoNVX*              pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkCuModuleNVX*                              pModule);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateCuFunctionNVX(
-    VkDevice                                    device,
-    const VkCuFunctionCreateInfoNVX*            pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkCuFunctionNVX*                            pFunction);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyCuModuleNVX(
-    VkDevice                                    device,
-    VkCuModuleNVX                               module,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyCuFunctionNVX(
-    VkDevice                                    device,
-    VkCuFunctionNVX                             function,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCuLaunchKernelNVX(
-    VkCommandBuffer                             commandBuffer,
-    const VkCuLaunchInfoNVX*                    pLaunchInfo);
-#endif
-
-
-#define VK_NVX_image_view_handle 1
-#define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 2
-#define VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME "VK_NVX_image_view_handle"
-typedef struct VkImageViewHandleInfoNVX {
-    VkStructureType     sType;
-    const void*         pNext;
-    VkImageView         imageView;
-    VkDescriptorType    descriptorType;
-    VkSampler           sampler;
-} VkImageViewHandleInfoNVX;
-
-typedef struct VkImageViewAddressPropertiesNVX {
-    VkStructureType    sType;
-    void*              pNext;
-    VkDeviceAddress    deviceAddress;
-    VkDeviceSize       size;
-} VkImageViewAddressPropertiesNVX;
-
-typedef uint32_t (VKAPI_PTR *PFN_vkGetImageViewHandleNVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetImageViewAddressNVX)(VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX* pProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX(
-    VkDevice                                    device,
-    const VkImageViewHandleInfoNVX*             pInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX(
-    VkDevice                                    device,
-    VkImageView                                 imageView,
-    VkImageViewAddressPropertiesNVX*            pProperties);
-#endif
-
-
-#define VK_AMD_draw_indirect_count 1
-#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 2
-#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count"
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    VkBuffer                                    countBuffer,
-    VkDeviceSize                                countBufferOffset,
-    uint32_t                                    maxDrawCount,
-    uint32_t                                    stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    VkBuffer                                    countBuffer,
-    VkDeviceSize                                countBufferOffset,
-    uint32_t                                    maxDrawCount,
-    uint32_t                                    stride);
-#endif
-
-
-#define VK_AMD_negative_viewport_height 1
-#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1
-#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height"
-
-
-#define VK_AMD_gpu_shader_half_float 1
-#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 2
-#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float"
-
-
-#define VK_AMD_shader_ballot 1
-#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1
-#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot"
-
-
-#define VK_AMD_texture_gather_bias_lod 1
-#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1
-#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod"
-typedef struct VkTextureLODGatherFormatPropertiesAMD {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           supportsTextureGatherLODBiasAMD;
-} VkTextureLODGatherFormatPropertiesAMD;
-
-
-
-#define VK_AMD_shader_info 1
-#define VK_AMD_SHADER_INFO_SPEC_VERSION   1
-#define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info"
-
-typedef enum VkShaderInfoTypeAMD {
-    VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0,
-    VK_SHADER_INFO_TYPE_BINARY_AMD = 1,
-    VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2,
-    VK_SHADER_INFO_TYPE_MAX_ENUM_AMD = 0x7FFFFFFF
-} VkShaderInfoTypeAMD;
-typedef struct VkShaderResourceUsageAMD {
-    uint32_t    numUsedVgprs;
-    uint32_t    numUsedSgprs;
-    uint32_t    ldsSizePerLocalWorkGroup;
-    size_t      ldsUsageSizeInBytes;
-    size_t      scratchMemUsageInBytes;
-} VkShaderResourceUsageAMD;
-
-typedef struct VkShaderStatisticsInfoAMD {
-    VkShaderStageFlags          shaderStageMask;
-    VkShaderResourceUsageAMD    resourceUsage;
-    uint32_t                    numPhysicalVgprs;
-    uint32_t                    numPhysicalSgprs;
-    uint32_t                    numAvailableVgprs;
-    uint32_t                    numAvailableSgprs;
-    uint32_t                    computeWorkGroupSize[3];
-} VkShaderStatisticsInfoAMD;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetShaderInfoAMD)(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD(
-    VkDevice                                    device,
-    VkPipeline                                  pipeline,
-    VkShaderStageFlagBits                       shaderStage,
-    VkShaderInfoTypeAMD                         infoType,
-    size_t*                                     pInfoSize,
-    void*                                       pInfo);
-#endif
-
-
-#define VK_AMD_shader_image_load_store_lod 1
-#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1
-#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod"
-
-
-#define VK_NV_corner_sampled_image 1
-#define VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION 2
-#define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image"
-typedef struct VkPhysicalDeviceCornerSampledImageFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           cornerSampledImage;
-} VkPhysicalDeviceCornerSampledImageFeaturesNV;
-
-
-
-#define VK_IMG_format_pvrtc 1
-#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION  1
-#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc"
-
-
-#define VK_NV_external_memory_capabilities 1
-#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
-#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities"
-
-typedef enum VkExternalMemoryHandleTypeFlagBitsNV {
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008,
-    VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
-} VkExternalMemoryHandleTypeFlagBitsNV;
-typedef VkFlags VkExternalMemoryHandleTypeFlagsNV;
-
-typedef enum VkExternalMemoryFeatureFlagBitsNV {
-    VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001,
-    VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002,
-    VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004,
-    VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
-} VkExternalMemoryFeatureFlagBitsNV;
-typedef VkFlags VkExternalMemoryFeatureFlagsNV;
-typedef struct VkExternalImageFormatPropertiesNV {
-    VkImageFormatProperties              imageFormatProperties;
-    VkExternalMemoryFeatureFlagsNV       externalMemoryFeatures;
-    VkExternalMemoryHandleTypeFlagsNV    exportFromImportedHandleTypes;
-    VkExternalMemoryHandleTypeFlagsNV    compatibleHandleTypes;
-} VkExternalImageFormatPropertiesNV;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
-    VkPhysicalDevice                            physicalDevice,
-    VkFormat                                    format,
-    VkImageType                                 type,
-    VkImageTiling                               tiling,
-    VkImageUsageFlags                           usage,
-    VkImageCreateFlags                          flags,
-    VkExternalMemoryHandleTypeFlagsNV           externalHandleType,
-    VkExternalImageFormatPropertiesNV*          pExternalImageFormatProperties);
-#endif
-
-
-#define VK_NV_external_memory 1
-#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1
-#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory"
-typedef struct VkExternalMemoryImageCreateInfoNV {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkExternalMemoryHandleTypeFlagsNV    handleTypes;
-} VkExternalMemoryImageCreateInfoNV;
-
-typedef struct VkExportMemoryAllocateInfoNV {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkExternalMemoryHandleTypeFlagsNV    handleTypes;
-} VkExportMemoryAllocateInfoNV;
-
-
-
-#define VK_EXT_validation_flags 1
-#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 2
-#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags"
-
-typedef enum VkValidationCheckEXT {
-    VK_VALIDATION_CHECK_ALL_EXT = 0,
-    VK_VALIDATION_CHECK_SHADERS_EXT = 1,
-    VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkValidationCheckEXT;
-typedef struct VkValidationFlagsEXT {
-    VkStructureType                sType;
-    const void*                    pNext;
-    uint32_t                       disabledValidationCheckCount;
-    const VkValidationCheckEXT*    pDisabledValidationChecks;
-} VkValidationFlagsEXT;
-
-
-
-#define VK_EXT_shader_subgroup_ballot 1
-#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1
-#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot"
-
-
-#define VK_EXT_shader_subgroup_vote 1
-#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1
-#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote"
-
-
-#define VK_EXT_texture_compression_astc_hdr 1
-#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1
-#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr"
-typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           textureCompressionASTC_HDR;
-} VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
-
-
-
-#define VK_EXT_astc_decode_mode 1
-#define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1
-#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode"
-typedef struct VkImageViewASTCDecodeModeEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkFormat           decodeMode;
-} VkImageViewASTCDecodeModeEXT;
-
-typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           decodeModeSharedExponent;
-} VkPhysicalDeviceASTCDecodeFeaturesEXT;
-
-
-
-#define VK_EXT_conditional_rendering 1
-#define VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION 2
-#define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering"
-
-typedef enum VkConditionalRenderingFlagBitsEXT {
-    VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 0x00000001,
-    VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkConditionalRenderingFlagBitsEXT;
-typedef VkFlags VkConditionalRenderingFlagsEXT;
-typedef struct VkConditionalRenderingBeginInfoEXT {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkBuffer                          buffer;
-    VkDeviceSize                      offset;
-    VkConditionalRenderingFlagsEXT    flags;
-} VkConditionalRenderingBeginInfoEXT;
-
-typedef struct VkPhysicalDeviceConditionalRenderingFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           conditionalRendering;
-    VkBool32           inheritedConditionalRendering;
-} VkPhysicalDeviceConditionalRenderingFeaturesEXT;
-
-typedef struct VkCommandBufferInheritanceConditionalRenderingInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBool32           conditionalRenderingEnable;
-} VkCommandBufferInheritanceConditionalRenderingInfoEXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdBeginConditionalRenderingEXT)(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin);
-typedef void (VKAPI_PTR *PFN_vkCmdEndConditionalRenderingEXT)(VkCommandBuffer commandBuffer);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT(
-    VkCommandBuffer                             commandBuffer,
-    const VkConditionalRenderingBeginInfoEXT*   pConditionalRenderingBegin);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT(
-    VkCommandBuffer                             commandBuffer);
-#endif
-
-
-#define VK_NV_clip_space_w_scaling 1
-#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1
-#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling"
-typedef struct VkViewportWScalingNV {
-    float    xcoeff;
-    float    ycoeff;
-} VkViewportWScalingNV;
-
-typedef struct VkPipelineViewportWScalingStateCreateInfoNV {
-    VkStructureType                sType;
-    const void*                    pNext;
-    VkBool32                       viewportWScalingEnable;
-    uint32_t                       viewportCount;
-    const VkViewportWScalingNV*    pViewportWScalings;
-} VkPipelineViewportWScalingStateCreateInfoNV;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstViewport,
-    uint32_t                                    viewportCount,
-    const VkViewportWScalingNV*                 pViewportWScalings);
-#endif
-
-
-#define VK_EXT_direct_mode_display 1
-#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
-#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display"
-typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT(
-    VkPhysicalDevice                            physicalDevice,
-    VkDisplayKHR                                display);
-#endif
-
-
-#define VK_EXT_display_surface_counter 1
-#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
-#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter"
-
-typedef enum VkSurfaceCounterFlagBitsEXT {
-    VK_SURFACE_COUNTER_VBLANK_BIT_EXT = 0x00000001,
-    VK_SURFACE_COUNTER_VBLANK_EXT = VK_SURFACE_COUNTER_VBLANK_BIT_EXT,
-    VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkSurfaceCounterFlagBitsEXT;
-typedef VkFlags VkSurfaceCounterFlagsEXT;
-typedef struct VkSurfaceCapabilities2EXT {
-    VkStructureType                  sType;
-    void*                            pNext;
-    uint32_t                         minImageCount;
-    uint32_t                         maxImageCount;
-    VkExtent2D                       currentExtent;
-    VkExtent2D                       minImageExtent;
-    VkExtent2D                       maxImageExtent;
-    uint32_t                         maxImageArrayLayers;
-    VkSurfaceTransformFlagsKHR       supportedTransforms;
-    VkSurfaceTransformFlagBitsKHR    currentTransform;
-    VkCompositeAlphaFlagsKHR         supportedCompositeAlpha;
-    VkImageUsageFlags                supportedUsageFlags;
-    VkSurfaceCounterFlagsEXT         supportedSurfaceCounters;
-} VkSurfaceCapabilities2EXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
-    VkPhysicalDevice                            physicalDevice,
-    VkSurfaceKHR                                surface,
-    VkSurfaceCapabilities2EXT*                  pSurfaceCapabilities);
-#endif
-
-
-#define VK_EXT_display_control 1
-#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
-#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control"
-
-typedef enum VkDisplayPowerStateEXT {
-    VK_DISPLAY_POWER_STATE_OFF_EXT = 0,
-    VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1,
-    VK_DISPLAY_POWER_STATE_ON_EXT = 2,
-    VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDisplayPowerStateEXT;
-
-typedef enum VkDeviceEventTypeEXT {
-    VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0,
-    VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDeviceEventTypeEXT;
-
-typedef enum VkDisplayEventTypeEXT {
-    VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0,
-    VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDisplayEventTypeEXT;
-typedef struct VkDisplayPowerInfoEXT {
-    VkStructureType           sType;
-    const void*               pNext;
-    VkDisplayPowerStateEXT    powerState;
-} VkDisplayPowerInfoEXT;
-
-typedef struct VkDeviceEventInfoEXT {
-    VkStructureType         sType;
-    const void*             pNext;
-    VkDeviceEventTypeEXT    deviceEvent;
-} VkDeviceEventInfoEXT;
-
-typedef struct VkDisplayEventInfoEXT {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkDisplayEventTypeEXT    displayEvent;
-} VkDisplayEventInfoEXT;
-
-typedef struct VkSwapchainCounterCreateInfoEXT {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkSurfaceCounterFlagsEXT    surfaceCounters;
-} VkSwapchainCounterCreateInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
-typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT(
-    VkDevice                                    device,
-    VkDisplayKHR                                display,
-    const VkDisplayPowerInfoEXT*                pDisplayPowerInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT(
-    VkDevice                                    device,
-    const VkDeviceEventInfoEXT*                 pDeviceEventInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkFence*                                    pFence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT(
-    VkDevice                                    device,
-    VkDisplayKHR                                display,
-    const VkDisplayEventInfoEXT*                pDisplayEventInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkFence*                                    pFence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain,
-    VkSurfaceCounterFlagBitsEXT                 counter,
-    uint64_t*                                   pCounterValue);
-#endif
-
-
-#define VK_GOOGLE_display_timing 1
-#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1
-#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing"
-typedef struct VkRefreshCycleDurationGOOGLE {
-    uint64_t    refreshDuration;
-} VkRefreshCycleDurationGOOGLE;
-
-typedef struct VkPastPresentationTimingGOOGLE {
-    uint32_t    presentID;
-    uint64_t    desiredPresentTime;
-    uint64_t    actualPresentTime;
-    uint64_t    earliestPresentTime;
-    uint64_t    presentMargin;
-} VkPastPresentationTimingGOOGLE;
-
-typedef struct VkPresentTimeGOOGLE {
-    uint32_t    presentID;
-    uint64_t    desiredPresentTime;
-} VkPresentTimeGOOGLE;
-
-typedef struct VkPresentTimesInfoGOOGLE {
-    VkStructureType               sType;
-    const void*                   pNext;
-    uint32_t                      swapchainCount;
-    const VkPresentTimeGOOGLE*    pTimes;
-} VkPresentTimesInfoGOOGLE;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain,
-    VkRefreshCycleDurationGOOGLE*               pDisplayTimingProperties);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain,
-    uint32_t*                                   pPresentationTimingCount,
-    VkPastPresentationTimingGOOGLE*             pPresentationTimings);
-#endif
-
-
-#define VK_NV_sample_mask_override_coverage 1
-#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1
-#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage"
-
-
-#define VK_NV_geometry_shader_passthrough 1
-#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1
-#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough"
-
-
-#define VK_NV_viewport_array2 1
-#define VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION 1
-#define VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME "VK_NV_viewport_array2"
-#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION
-#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME
-
-
-#define VK_NVX_multiview_per_view_attributes 1
-#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1
-#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes"
-typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           perViewPositionAllComponents;
-} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
-
-
-
-#define VK_NV_viewport_swizzle 1
-#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1
-#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle"
-
-typedef enum VkViewportCoordinateSwizzleNV {
-    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0,
-    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1,
-    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2,
-    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3,
-    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4,
-    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5,
-    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6,
-    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7,
-    VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkViewportCoordinateSwizzleNV;
-typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV;
-typedef struct VkViewportSwizzleNV {
-    VkViewportCoordinateSwizzleNV    x;
-    VkViewportCoordinateSwizzleNV    y;
-    VkViewportCoordinateSwizzleNV    z;
-    VkViewportCoordinateSwizzleNV    w;
-} VkViewportSwizzleNV;
-
-typedef struct VkPipelineViewportSwizzleStateCreateInfoNV {
-    VkStructureType                                sType;
-    const void*                                    pNext;
-    VkPipelineViewportSwizzleStateCreateFlagsNV    flags;
-    uint32_t                                       viewportCount;
-    const VkViewportSwizzleNV*                     pViewportSwizzles;
-} VkPipelineViewportSwizzleStateCreateInfoNV;
-
-
-
-#define VK_EXT_discard_rectangles 1
-#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
-#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
-
-typedef enum VkDiscardRectangleModeEXT {
-    VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
-    VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
-    VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDiscardRectangleModeEXT;
-typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT;
-typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxDiscardRectangles;
-} VkPhysicalDeviceDiscardRectanglePropertiesEXT;
-
-typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT {
-    VkStructureType                                  sType;
-    const void*                                      pNext;
-    VkPipelineDiscardRectangleStateCreateFlagsEXT    flags;
-    VkDiscardRectangleModeEXT                        discardRectangleMode;
-    uint32_t                                         discardRectangleCount;
-    const VkRect2D*                                  pDiscardRectangles;
-} VkPipelineDiscardRectangleStateCreateInfoEXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstDiscardRectangle,
-    uint32_t                                    discardRectangleCount,
-    const VkRect2D*                             pDiscardRectangles);
-#endif
-
-
-#define VK_EXT_conservative_rasterization 1
-#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1
-#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization"
-
-typedef enum VkConservativeRasterizationModeEXT {
-    VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0,
-    VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1,
-    VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2,
-    VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkConservativeRasterizationModeEXT;
-typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT;
-typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    float              primitiveOverestimationSize;
-    float              maxExtraPrimitiveOverestimationSize;
-    float              extraPrimitiveOverestimationSizeGranularity;
-    VkBool32           primitiveUnderestimation;
-    VkBool32           conservativePointAndLineRasterization;
-    VkBool32           degenerateTrianglesRasterized;
-    VkBool32           degenerateLinesRasterized;
-    VkBool32           fullyCoveredFragmentShaderInputVariable;
-    VkBool32           conservativeRasterizationPostDepthCoverage;
-} VkPhysicalDeviceConservativeRasterizationPropertiesEXT;
-
-typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT {
-    VkStructureType                                           sType;
-    const void*                                               pNext;
-    VkPipelineRasterizationConservativeStateCreateFlagsEXT    flags;
-    VkConservativeRasterizationModeEXT                        conservativeRasterizationMode;
-    float                                                     extraPrimitiveOverestimationSize;
-} VkPipelineRasterizationConservativeStateCreateInfoEXT;
-
-
-
-#define VK_EXT_depth_clip_enable 1
-#define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1
-#define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable"
-typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT;
-typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           depthClipEnable;
-} VkPhysicalDeviceDepthClipEnableFeaturesEXT;
-
-typedef struct VkPipelineRasterizationDepthClipStateCreateInfoEXT {
-    VkStructureType                                        sType;
-    const void*                                            pNext;
-    VkPipelineRasterizationDepthClipStateCreateFlagsEXT    flags;
-    VkBool32                                               depthClipEnable;
-} VkPipelineRasterizationDepthClipStateCreateInfoEXT;
-
-
-
-#define VK_EXT_swapchain_colorspace 1
-#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 4
-#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
-
-
-#define VK_EXT_hdr_metadata 1
-#define VK_EXT_HDR_METADATA_SPEC_VERSION  2
-#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
-typedef struct VkXYColorEXT {
-    float    x;
-    float    y;
-} VkXYColorEXT;
-
-typedef struct VkHdrMetadataEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkXYColorEXT       displayPrimaryRed;
-    VkXYColorEXT       displayPrimaryGreen;
-    VkXYColorEXT       displayPrimaryBlue;
-    VkXYColorEXT       whitePoint;
-    float              maxLuminance;
-    float              minLuminance;
-    float              maxContentLightLevel;
-    float              maxFrameAverageLightLevel;
-} VkHdrMetadataEXT;
-
-typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT(
-    VkDevice                                    device,
-    uint32_t                                    swapchainCount,
-    const VkSwapchainKHR*                       pSwapchains,
-    const VkHdrMetadataEXT*                     pMetadata);
-#endif
-
-
-#define VK_MVK_moltenvk 1
-#define VK_MVK_MOLTENVK_SPEC_VERSION      0
-#define VK_MVK_MOLTENVK_EXTENSION_NAME    "VK_MVK_moltenvk"
-typedef void (VKAPI_PTR *PFN_vkGetMTLDeviceMVK)(VkPhysicalDevice physicalDevice, void** pMTLDevice);
-typedef VkResult (VKAPI_PTR *PFN_vkSetMTLTextureMVK)(VkImage image, void* mtlTexture);
-typedef void (VKAPI_PTR *PFN_vkGetMTLTextureMVK)(VkImage image, void** pMTLTexture);
-typedef void (VKAPI_PTR *PFN_vkGetMTLBufferMVK)(VkBuffer buffer, void** pMTLBuffer);
-typedef VkResult (VKAPI_PTR *PFN_vkUseIOSurfaceMVK)(VkImage image, void* ioSurface);
-typedef void (VKAPI_PTR *PFN_vkGetIOSurfaceMVK)(VkImage image, void**  pIOSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetMTLDeviceMVK(
-    VkPhysicalDevice                            physicalDevice,
-    void**                                      pMTLDevice);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSetMTLTextureMVK(
-    VkImage                                     image,
-    void*                                       mtlTexture);
-
-VKAPI_ATTR void VKAPI_CALL vkGetMTLTextureMVK(
-    VkImage                                     image,
-    void**                                      pMTLTexture);
-
-VKAPI_ATTR void VKAPI_CALL vkGetMTLBufferMVK(
-    VkBuffer                                    buffer,
-    void**                                      pMTLBuffer);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkUseIOSurfaceMVK(
-    VkImage                                     image,
-    void*                                       ioSurface);
-
-VKAPI_ATTR void VKAPI_CALL vkGetIOSurfaceMVK(
-    VkImage                                     image,
-    void**                                      pIOSurface);
-#endif
-
-
-#define VK_EXT_external_memory_dma_buf 1
-#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1
-#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf"
-
-
-#define VK_EXT_queue_family_foreign 1
-#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
-#define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign"
-#define VK_QUEUE_FAMILY_FOREIGN_EXT       (~2U)
-
-
-#define VK_EXT_debug_utils 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT)
-#define VK_EXT_DEBUG_UTILS_SPEC_VERSION   2
-#define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils"
-typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT;
-
-typedef enum VkDebugUtilsMessageSeverityFlagBitsEXT {
-    VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001,
-    VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010,
-    VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100,
-    VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000,
-    VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDebugUtilsMessageSeverityFlagBitsEXT;
-
-typedef enum VkDebugUtilsMessageTypeFlagBitsEXT {
-    VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001,
-    VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002,
-    VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004,
-    VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDebugUtilsMessageTypeFlagBitsEXT;
-typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT;
-typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT;
-typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT;
-typedef struct VkDebugUtilsLabelEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    const char*        pLabelName;
-    float              color[4];
-} VkDebugUtilsLabelEXT;
-
-typedef struct VkDebugUtilsObjectNameInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkObjectType       objectType;
-    uint64_t           objectHandle;
-    const char*        pObjectName;
-} VkDebugUtilsObjectNameInfoEXT;
-
-typedef struct VkDebugUtilsMessengerCallbackDataEXT {
-    VkStructureType                              sType;
-    const void*                                  pNext;
-    VkDebugUtilsMessengerCallbackDataFlagsEXT    flags;
-    const char*                                  pMessageIdName;
-    int32_t                                      messageIdNumber;
-    const char*                                  pMessage;
-    uint32_t                                     queueLabelCount;
-    VkDebugUtilsLabelEXT*                        pQueueLabels;
-    uint32_t                                     cmdBufLabelCount;
-    VkDebugUtilsLabelEXT*                        pCmdBufLabels;
-    uint32_t                                     objectCount;
-    VkDebugUtilsObjectNameInfoEXT*               pObjects;
-} VkDebugUtilsMessengerCallbackDataEXT;
-
-typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)(
-    VkDebugUtilsMessageSeverityFlagBitsEXT           messageSeverity,
-    VkDebugUtilsMessageTypeFlagsEXT                  messageTypes,
-    const VkDebugUtilsMessengerCallbackDataEXT*      pCallbackData,
-    void*                                            pUserData);
-
-typedef struct VkDebugUtilsMessengerCreateInfoEXT {
-    VkStructureType                         sType;
-    const void*                             pNext;
-    VkDebugUtilsMessengerCreateFlagsEXT     flags;
-    VkDebugUtilsMessageSeverityFlagsEXT     messageSeverity;
-    VkDebugUtilsMessageTypeFlagsEXT         messageType;
-    PFN_vkDebugUtilsMessengerCallbackEXT    pfnUserCallback;
-    void*                                   pUserData;
-} VkDebugUtilsMessengerCreateInfoEXT;
-
-typedef struct VkDebugUtilsObjectTagInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkObjectType       objectType;
-    uint64_t           objectHandle;
-    uint64_t           tagName;
-    size_t             tagSize;
-    const void*        pTag;
-} VkDebugUtilsObjectTagInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectNameEXT)(VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectTagEXT)(VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo);
-typedef void (VKAPI_PTR *PFN_vkQueueBeginDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo);
-typedef void (VKAPI_PTR *PFN_vkQueueEndDebugUtilsLabelEXT)(VkQueue queue);
-typedef void (VKAPI_PTR *PFN_vkQueueInsertDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdBeginDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdEndDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer);
-typedef void (VKAPI_PTR *PFN_vkCmdInsertDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugUtilsMessengerEXT)(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger);
-typedef void (VKAPI_PTR *PFN_vkDestroyDebugUtilsMessengerEXT)(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkSubmitDebugUtilsMessageEXT)(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT(
-    VkDevice                                    device,
-    const VkDebugUtilsObjectNameInfoEXT*        pNameInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT(
-    VkDevice                                    device,
-    const VkDebugUtilsObjectTagInfoEXT*         pTagInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT(
-    VkQueue                                     queue,
-    const VkDebugUtilsLabelEXT*                 pLabelInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT(
-    VkQueue                                     queue);
-
-VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT(
-    VkQueue                                     queue,
-    const VkDebugUtilsLabelEXT*                 pLabelInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT(
-    VkCommandBuffer                             commandBuffer,
-    const VkDebugUtilsLabelEXT*                 pLabelInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT(
-    VkCommandBuffer                             commandBuffer);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT(
-    VkCommandBuffer                             commandBuffer,
-    const VkDebugUtilsLabelEXT*                 pLabelInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT(
-    VkInstance                                  instance,
-    const VkDebugUtilsMessengerCreateInfoEXT*   pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkDebugUtilsMessengerEXT*                   pMessenger);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT(
-    VkInstance                                  instance,
-    VkDebugUtilsMessengerEXT                    messenger,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT(
-    VkInstance                                  instance,
-    VkDebugUtilsMessageSeverityFlagBitsEXT      messageSeverity,
-    VkDebugUtilsMessageTypeFlagsEXT             messageTypes,
-    const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData);
-#endif
-
-
-#define VK_EXT_sampler_filter_minmax 1
-#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 2
-#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax"
-typedef VkSamplerReductionMode VkSamplerReductionModeEXT;
-
-typedef VkSamplerReductionModeCreateInfo VkSamplerReductionModeCreateInfoEXT;
-
-typedef VkPhysicalDeviceSamplerFilterMinmaxProperties VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT;
-
-
-
-#define VK_AMD_gpu_shader_int16 1
-#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 2
-#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16"
-
-
-#define VK_AMD_mixed_attachment_samples 1
-#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1
-#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples"
-
-
-#define VK_AMD_shader_fragment_mask 1
-#define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1
-#define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask"
-
-
-#define VK_EXT_inline_uniform_block 1
-#define VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION 1
-#define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block"
-typedef struct VkPhysicalDeviceInlineUniformBlockFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           inlineUniformBlock;
-    VkBool32           descriptorBindingInlineUniformBlockUpdateAfterBind;
-} VkPhysicalDeviceInlineUniformBlockFeaturesEXT;
-
-typedef struct VkPhysicalDeviceInlineUniformBlockPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxInlineUniformBlockSize;
-    uint32_t           maxPerStageDescriptorInlineUniformBlocks;
-    uint32_t           maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks;
-    uint32_t           maxDescriptorSetInlineUniformBlocks;
-    uint32_t           maxDescriptorSetUpdateAfterBindInlineUniformBlocks;
-} VkPhysicalDeviceInlineUniformBlockPropertiesEXT;
-
-typedef struct VkWriteDescriptorSetInlineUniformBlockEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           dataSize;
-    const void*        pData;
-} VkWriteDescriptorSetInlineUniformBlockEXT;
-
-typedef struct VkDescriptorPoolInlineUniformBlockCreateInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           maxInlineUniformBlockBindings;
-} VkDescriptorPoolInlineUniformBlockCreateInfoEXT;
-
-
-
-#define VK_EXT_shader_stencil_export 1
-#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1
-#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export"
-
-
-#define VK_EXT_sample_locations 1
-#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1
-#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations"
-typedef struct VkSampleLocationEXT {
-    float    x;
-    float    y;
-} VkSampleLocationEXT;
-
-typedef struct VkSampleLocationsInfoEXT {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkSampleCountFlagBits         sampleLocationsPerPixel;
-    VkExtent2D                    sampleLocationGridSize;
-    uint32_t                      sampleLocationsCount;
-    const VkSampleLocationEXT*    pSampleLocations;
-} VkSampleLocationsInfoEXT;
-
-typedef struct VkAttachmentSampleLocationsEXT {
-    uint32_t                    attachmentIndex;
-    VkSampleLocationsInfoEXT    sampleLocationsInfo;
-} VkAttachmentSampleLocationsEXT;
-
-typedef struct VkSubpassSampleLocationsEXT {
-    uint32_t                    subpassIndex;
-    VkSampleLocationsInfoEXT    sampleLocationsInfo;
-} VkSubpassSampleLocationsEXT;
-
-typedef struct VkRenderPassSampleLocationsBeginInfoEXT {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    uint32_t                                 attachmentInitialSampleLocationsCount;
-    const VkAttachmentSampleLocationsEXT*    pAttachmentInitialSampleLocations;
-    uint32_t                                 postSubpassSampleLocationsCount;
-    const VkSubpassSampleLocationsEXT*       pPostSubpassSampleLocations;
-} VkRenderPassSampleLocationsBeginInfoEXT;
-
-typedef struct VkPipelineSampleLocationsStateCreateInfoEXT {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkBool32                    sampleLocationsEnable;
-    VkSampleLocationsInfoEXT    sampleLocationsInfo;
-} VkPipelineSampleLocationsStateCreateInfoEXT;
-
-typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT {
-    VkStructureType       sType;
-    void*                 pNext;
-    VkSampleCountFlags    sampleLocationSampleCounts;
-    VkExtent2D            maxSampleLocationGridSize;
-    float                 sampleLocationCoordinateRange[2];
-    uint32_t              sampleLocationSubPixelBits;
-    VkBool32              variableSampleLocations;
-} VkPhysicalDeviceSampleLocationsPropertiesEXT;
-
-typedef struct VkMultisamplePropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkExtent2D         maxSampleLocationGridSize;
-} VkMultisamplePropertiesEXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
-typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT(
-    VkCommandBuffer                             commandBuffer,
-    const VkSampleLocationsInfoEXT*             pSampleLocationsInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT(
-    VkPhysicalDevice                            physicalDevice,
-    VkSampleCountFlagBits                       samples,
-    VkMultisamplePropertiesEXT*                 pMultisampleProperties);
-#endif
-
-
-#define VK_EXT_blend_operation_advanced 1
-#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2
-#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
-
-typedef enum VkBlendOverlapEXT {
-    VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0,
-    VK_BLEND_OVERLAP_DISJOINT_EXT = 1,
-    VK_BLEND_OVERLAP_CONJOINT_EXT = 2,
-    VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkBlendOverlapEXT;
-typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           advancedBlendCoherentOperations;
-} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
-
-typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           advancedBlendMaxColorAttachments;
-    VkBool32           advancedBlendIndependentBlend;
-    VkBool32           advancedBlendNonPremultipliedSrcColor;
-    VkBool32           advancedBlendNonPremultipliedDstColor;
-    VkBool32           advancedBlendCorrelatedOverlap;
-    VkBool32           advancedBlendAllOperations;
-} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT;
-
-typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT {
-    VkStructureType      sType;
-    const void*          pNext;
-    VkBool32             srcPremultiplied;
-    VkBool32             dstPremultiplied;
-    VkBlendOverlapEXT    blendOverlap;
-} VkPipelineColorBlendAdvancedStateCreateInfoEXT;
-
-
-
-#define VK_NV_fragment_coverage_to_color 1
-#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1
-#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color"
-typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV;
-typedef struct VkPipelineCoverageToColorStateCreateInfoNV {
-    VkStructureType                                sType;
-    const void*                                    pNext;
-    VkPipelineCoverageToColorStateCreateFlagsNV    flags;
-    VkBool32                                       coverageToColorEnable;
-    uint32_t                                       coverageToColorLocation;
-} VkPipelineCoverageToColorStateCreateInfoNV;
-
-
-
-#define VK_NV_framebuffer_mixed_samples 1
-#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1
-#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples"
-
-typedef enum VkCoverageModulationModeNV {
-    VK_COVERAGE_MODULATION_MODE_NONE_NV = 0,
-    VK_COVERAGE_MODULATION_MODE_RGB_NV = 1,
-    VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2,
-    VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3,
-    VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkCoverageModulationModeNV;
-typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV;
-typedef struct VkPipelineCoverageModulationStateCreateInfoNV {
-    VkStructureType                                   sType;
-    const void*                                       pNext;
-    VkPipelineCoverageModulationStateCreateFlagsNV    flags;
-    VkCoverageModulationModeNV                        coverageModulationMode;
-    VkBool32                                          coverageModulationTableEnable;
-    uint32_t                                          coverageModulationTableCount;
-    const float*                                      pCoverageModulationTable;
-} VkPipelineCoverageModulationStateCreateInfoNV;
-
-
-
-#define VK_NV_fill_rectangle 1
-#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1
-#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle"
-
-
-#define VK_NV_shader_sm_builtins 1
-#define VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION 1
-#define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins"
-typedef struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           shaderSMCount;
-    uint32_t           shaderWarpsPerSM;
-} VkPhysicalDeviceShaderSMBuiltinsPropertiesNV;
-
-typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderSMBuiltins;
-} VkPhysicalDeviceShaderSMBuiltinsFeaturesNV;
-
-
-
-#define VK_EXT_post_depth_coverage 1
-#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1
-#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage"
-
-
-#define VK_EXT_image_drm_format_modifier 1
-#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 2
-#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier"
-typedef struct VkDrmFormatModifierPropertiesEXT {
-    uint64_t                drmFormatModifier;
-    uint32_t                drmFormatModifierPlaneCount;
-    VkFormatFeatureFlags    drmFormatModifierTilingFeatures;
-} VkDrmFormatModifierPropertiesEXT;
-
-typedef struct VkDrmFormatModifierPropertiesListEXT {
-    VkStructureType                      sType;
-    void*                                pNext;
-    uint32_t                             drmFormatModifierCount;
-    VkDrmFormatModifierPropertiesEXT*    pDrmFormatModifierProperties;
-} VkDrmFormatModifierPropertiesListEXT;
-
-typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint64_t           drmFormatModifier;
-    VkSharingMode      sharingMode;
-    uint32_t           queueFamilyIndexCount;
-    const uint32_t*    pQueueFamilyIndices;
-} VkPhysicalDeviceImageDrmFormatModifierInfoEXT;
-
-typedef struct VkImageDrmFormatModifierListCreateInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           drmFormatModifierCount;
-    const uint64_t*    pDrmFormatModifiers;
-} VkImageDrmFormatModifierListCreateInfoEXT;
-
-typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT {
-    VkStructureType               sType;
-    const void*                   pNext;
-    uint64_t                      drmFormatModifier;
-    uint32_t                      drmFormatModifierPlaneCount;
-    const VkSubresourceLayout*    pPlaneLayouts;
-} VkImageDrmFormatModifierExplicitCreateInfoEXT;
-
-typedef struct VkImageDrmFormatModifierPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint64_t           drmFormatModifier;
-} VkImageDrmFormatModifierPropertiesEXT;
-
-typedef struct VkDrmFormatModifierProperties2EXT {
-    uint64_t                    drmFormatModifier;
-    uint32_t                    drmFormatModifierPlaneCount;
-    VkFormatFeatureFlags2KHR    drmFormatModifierTilingFeatures;
-} VkDrmFormatModifierProperties2EXT;
-
-typedef struct VkDrmFormatModifierPropertiesList2EXT {
-    VkStructureType                       sType;
-    void*                                 pNext;
-    uint32_t                              drmFormatModifierCount;
-    VkDrmFormatModifierProperties2EXT*    pDrmFormatModifierProperties;
-} VkDrmFormatModifierPropertiesList2EXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT(
-    VkDevice                                    device,
-    VkImage                                     image,
-    VkImageDrmFormatModifierPropertiesEXT*      pProperties);
-#endif
-
-
-#define VK_EXT_validation_cache 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT)
-#define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1
-#define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache"
-
-typedef enum VkValidationCacheHeaderVersionEXT {
-    VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1,
-    VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkValidationCacheHeaderVersionEXT;
-typedef VkFlags VkValidationCacheCreateFlagsEXT;
-typedef struct VkValidationCacheCreateInfoEXT {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkValidationCacheCreateFlagsEXT    flags;
-    size_t                             initialDataSize;
-    const void*                        pInitialData;
-} VkValidationCacheCreateInfoEXT;
-
-typedef struct VkShaderModuleValidationCacheCreateInfoEXT {
-    VkStructureType         sType;
-    const void*             pNext;
-    VkValidationCacheEXT    validationCache;
-} VkShaderModuleValidationCacheCreateInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache);
-typedef void (VKAPI_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches);
-typedef VkResult (VKAPI_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT(
-    VkDevice                                    device,
-    const VkValidationCacheCreateInfoEXT*       pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkValidationCacheEXT*                       pValidationCache);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT(
-    VkDevice                                    device,
-    VkValidationCacheEXT                        validationCache,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT(
-    VkDevice                                    device,
-    VkValidationCacheEXT                        dstCache,
-    uint32_t                                    srcCacheCount,
-    const VkValidationCacheEXT*                 pSrcCaches);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT(
-    VkDevice                                    device,
-    VkValidationCacheEXT                        validationCache,
-    size_t*                                     pDataSize,
-    void*                                       pData);
-#endif
-
-
-#define VK_EXT_descriptor_indexing 1
-#define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2
-#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing"
-typedef VkDescriptorBindingFlagBits VkDescriptorBindingFlagBitsEXT;
-
-typedef VkDescriptorBindingFlags VkDescriptorBindingFlagsEXT;
-
-typedef VkDescriptorSetLayoutBindingFlagsCreateInfo VkDescriptorSetLayoutBindingFlagsCreateInfoEXT;
-
-typedef VkPhysicalDeviceDescriptorIndexingFeatures VkPhysicalDeviceDescriptorIndexingFeaturesEXT;
-
-typedef VkPhysicalDeviceDescriptorIndexingProperties VkPhysicalDeviceDescriptorIndexingPropertiesEXT;
-
-typedef VkDescriptorSetVariableDescriptorCountAllocateInfo VkDescriptorSetVariableDescriptorCountAllocateInfoEXT;
-
-typedef VkDescriptorSetVariableDescriptorCountLayoutSupport VkDescriptorSetVariableDescriptorCountLayoutSupportEXT;
-
-
-
-#define VK_EXT_shader_viewport_index_layer 1
-#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1
-#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer"
-
-
-#define VK_NV_shading_rate_image 1
-#define VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION 3
-#define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image"
-
-typedef enum VkShadingRatePaletteEntryNV {
-    VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = 0,
-    VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = 1,
-    VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = 2,
-    VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = 3,
-    VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = 4,
-    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = 5,
-    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = 6,
-    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = 7,
-    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = 8,
-    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = 9,
-    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = 10,
-    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = 11,
-    VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV = 0x7FFFFFFF
-} VkShadingRatePaletteEntryNV;
-
-typedef enum VkCoarseSampleOrderTypeNV {
-    VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = 0,
-    VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = 1,
-    VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = 2,
-    VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = 3,
-    VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkCoarseSampleOrderTypeNV;
-typedef struct VkShadingRatePaletteNV {
-    uint32_t                              shadingRatePaletteEntryCount;
-    const VkShadingRatePaletteEntryNV*    pShadingRatePaletteEntries;
-} VkShadingRatePaletteNV;
-
-typedef struct VkPipelineViewportShadingRateImageStateCreateInfoNV {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkBool32                         shadingRateImageEnable;
-    uint32_t                         viewportCount;
-    const VkShadingRatePaletteNV*    pShadingRatePalettes;
-} VkPipelineViewportShadingRateImageStateCreateInfoNV;
-
-typedef struct VkPhysicalDeviceShadingRateImageFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shadingRateImage;
-    VkBool32           shadingRateCoarseSampleOrder;
-} VkPhysicalDeviceShadingRateImageFeaturesNV;
-
-typedef struct VkPhysicalDeviceShadingRateImagePropertiesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkExtent2D         shadingRateTexelSize;
-    uint32_t           shadingRatePaletteSize;
-    uint32_t           shadingRateMaxCoarseSamples;
-} VkPhysicalDeviceShadingRateImagePropertiesNV;
-
-typedef struct VkCoarseSampleLocationNV {
-    uint32_t    pixelX;
-    uint32_t    pixelY;
-    uint32_t    sample;
-} VkCoarseSampleLocationNV;
-
-typedef struct VkCoarseSampleOrderCustomNV {
-    VkShadingRatePaletteEntryNV        shadingRate;
-    uint32_t                           sampleCount;
-    uint32_t                           sampleLocationCount;
-    const VkCoarseSampleLocationNV*    pSampleLocations;
-} VkCoarseSampleOrderCustomNV;
-
-typedef struct VkPipelineViewportCoarseSampleOrderStateCreateInfoNV {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkCoarseSampleOrderTypeNV             sampleOrderType;
-    uint32_t                              customSampleOrderCount;
-    const VkCoarseSampleOrderCustomNV*    pCustomSampleOrders;
-} VkPipelineViewportCoarseSampleOrderStateCreateInfoNV;
-
-typedef void (VKAPI_PTR *PFN_vkCmdBindShadingRateImageNV)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout);
-typedef void (VKAPI_PTR *PFN_vkCmdSetViewportShadingRatePaletteNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes);
-typedef void (VKAPI_PTR *PFN_vkCmdSetCoarseSampleOrderNV)(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV(
-    VkCommandBuffer                             commandBuffer,
-    VkImageView                                 imageView,
-    VkImageLayout                               imageLayout);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstViewport,
-    uint32_t                                    viewportCount,
-    const VkShadingRatePaletteNV*               pShadingRatePalettes);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV(
-    VkCommandBuffer                             commandBuffer,
-    VkCoarseSampleOrderTypeNV                   sampleOrderType,
-    uint32_t                                    customSampleOrderCount,
-    const VkCoarseSampleOrderCustomNV*          pCustomSampleOrders);
-#endif
-
-
-#define VK_NV_ray_tracing 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV)
-#define VK_NV_RAY_TRACING_SPEC_VERSION    3
-#define VK_NV_RAY_TRACING_EXTENSION_NAME  "VK_NV_ray_tracing"
-#define VK_SHADER_UNUSED_KHR              (~0U)
-#define VK_SHADER_UNUSED_NV               VK_SHADER_UNUSED_KHR
-
-typedef enum VkRayTracingShaderGroupTypeKHR {
-    VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = 0,
-    VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = 1,
-    VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = 2,
-    VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR,
-    VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR,
-    VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR,
-    VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkRayTracingShaderGroupTypeKHR;
-typedef VkRayTracingShaderGroupTypeKHR VkRayTracingShaderGroupTypeNV;
-
-
-typedef enum VkGeometryTypeKHR {
-    VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0,
-    VK_GEOMETRY_TYPE_AABBS_KHR = 1,
-    VK_GEOMETRY_TYPE_INSTANCES_KHR = 2,
-    VK_GEOMETRY_TYPE_TRIANGLES_NV = VK_GEOMETRY_TYPE_TRIANGLES_KHR,
-    VK_GEOMETRY_TYPE_AABBS_NV = VK_GEOMETRY_TYPE_AABBS_KHR,
-    VK_GEOMETRY_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkGeometryTypeKHR;
-typedef VkGeometryTypeKHR VkGeometryTypeNV;
-
-
-typedef enum VkAccelerationStructureTypeKHR {
-    VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0,
-    VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1,
-    VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR = 2,
-    VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
-    VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR,
-    VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkAccelerationStructureTypeKHR;
-typedef VkAccelerationStructureTypeKHR VkAccelerationStructureTypeNV;
-
-
-typedef enum VkCopyAccelerationStructureModeKHR {
-    VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = 0,
-    VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = 1,
-    VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = 2,
-    VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = 3,
-    VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR,
-    VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR,
-    VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkCopyAccelerationStructureModeKHR;
-typedef VkCopyAccelerationStructureModeKHR VkCopyAccelerationStructureModeNV;
-
-
-typedef enum VkAccelerationStructureMemoryRequirementsTypeNV {
-    VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = 0,
-    VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = 1,
-    VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = 2,
-    VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkAccelerationStructureMemoryRequirementsTypeNV;
-
-typedef enum VkGeometryFlagBitsKHR {
-    VK_GEOMETRY_OPAQUE_BIT_KHR = 0x00000001,
-    VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 0x00000002,
-    VK_GEOMETRY_OPAQUE_BIT_NV = VK_GEOMETRY_OPAQUE_BIT_KHR,
-    VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR,
-    VK_GEOMETRY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkGeometryFlagBitsKHR;
-typedef VkFlags VkGeometryFlagsKHR;
-typedef VkGeometryFlagsKHR VkGeometryFlagsNV;
-
-typedef VkGeometryFlagBitsKHR VkGeometryFlagBitsNV;
-
-
-typedef enum VkGeometryInstanceFlagBitsKHR {
-    VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = 0x00000001,
-    VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR = 0x00000002,
-    VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = 0x00000004,
-    VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = 0x00000008,
-    VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR,
-    VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR,
-    VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR,
-    VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR,
-    VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR,
-    VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkGeometryInstanceFlagBitsKHR;
-typedef VkFlags VkGeometryInstanceFlagsKHR;
-typedef VkGeometryInstanceFlagsKHR VkGeometryInstanceFlagsNV;
-
-typedef VkGeometryInstanceFlagBitsKHR VkGeometryInstanceFlagBitsNV;
-
-
-typedef enum VkBuildAccelerationStructureFlagBitsKHR {
-    VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = 0x00000001,
-    VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = 0x00000002,
-    VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = 0x00000004,
-    VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 0x00000008,
-    VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 0x00000010,
-    VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV = 0x00000020,
-    VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR,
-    VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR,
-    VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR,
-    VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR,
-    VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR,
-    VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkBuildAccelerationStructureFlagBitsKHR;
-typedef VkFlags VkBuildAccelerationStructureFlagsKHR;
-typedef VkBuildAccelerationStructureFlagsKHR VkBuildAccelerationStructureFlagsNV;
-
-typedef VkBuildAccelerationStructureFlagBitsKHR VkBuildAccelerationStructureFlagBitsNV;
-
-typedef struct VkRayTracingShaderGroupCreateInfoNV {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkRayTracingShaderGroupTypeKHR    type;
-    uint32_t                          generalShader;
-    uint32_t                          closestHitShader;
-    uint32_t                          anyHitShader;
-    uint32_t                          intersectionShader;
-} VkRayTracingShaderGroupCreateInfoNV;
-
-typedef struct VkRayTracingPipelineCreateInfoNV {
-    VkStructureType                               sType;
-    const void*                                   pNext;
-    VkPipelineCreateFlags                         flags;
-    uint32_t                                      stageCount;
-    const VkPipelineShaderStageCreateInfo*        pStages;
-    uint32_t                                      groupCount;
-    const VkRayTracingShaderGroupCreateInfoNV*    pGroups;
-    uint32_t                                      maxRecursionDepth;
-    VkPipelineLayout                              layout;
-    VkPipeline                                    basePipelineHandle;
-    int32_t                                       basePipelineIndex;
-} VkRayTracingPipelineCreateInfoNV;
-
-typedef struct VkGeometryTrianglesNV {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBuffer           vertexData;
-    VkDeviceSize       vertexOffset;
-    uint32_t           vertexCount;
-    VkDeviceSize       vertexStride;
-    VkFormat           vertexFormat;
-    VkBuffer           indexData;
-    VkDeviceSize       indexOffset;
-    uint32_t           indexCount;
-    VkIndexType        indexType;
-    VkBuffer           transformData;
-    VkDeviceSize       transformOffset;
-} VkGeometryTrianglesNV;
-
-typedef struct VkGeometryAABBNV {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBuffer           aabbData;
-    uint32_t           numAABBs;
-    uint32_t           stride;
-    VkDeviceSize       offset;
-} VkGeometryAABBNV;
-
-typedef struct VkGeometryDataNV {
-    VkGeometryTrianglesNV    triangles;
-    VkGeometryAABBNV         aabbs;
-} VkGeometryDataNV;
-
-typedef struct VkGeometryNV {
-    VkStructureType       sType;
-    const void*           pNext;
-    VkGeometryTypeKHR     geometryType;
-    VkGeometryDataNV      geometry;
-    VkGeometryFlagsKHR    flags;
-} VkGeometryNV;
-
-typedef struct VkAccelerationStructureInfoNV {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    VkAccelerationStructureTypeNV          type;
-    VkBuildAccelerationStructureFlagsNV    flags;
-    uint32_t                               instanceCount;
-    uint32_t                               geometryCount;
-    const VkGeometryNV*                    pGeometries;
-} VkAccelerationStructureInfoNV;
-
-typedef struct VkAccelerationStructureCreateInfoNV {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkDeviceSize                     compactedSize;
-    VkAccelerationStructureInfoNV    info;
-} VkAccelerationStructureCreateInfoNV;
-
-typedef struct VkBindAccelerationStructureMemoryInfoNV {
-    VkStructureType              sType;
-    const void*                  pNext;
-    VkAccelerationStructureNV    accelerationStructure;
-    VkDeviceMemory               memory;
-    VkDeviceSize                 memoryOffset;
-    uint32_t                     deviceIndexCount;
-    const uint32_t*              pDeviceIndices;
-} VkBindAccelerationStructureMemoryInfoNV;
-
-typedef struct VkWriteDescriptorSetAccelerationStructureNV {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    uint32_t                            accelerationStructureCount;
-    const VkAccelerationStructureNV*    pAccelerationStructures;
-} VkWriteDescriptorSetAccelerationStructureNV;
-
-typedef struct VkAccelerationStructureMemoryRequirementsInfoNV {
-    VkStructureType                                    sType;
-    const void*                                        pNext;
-    VkAccelerationStructureMemoryRequirementsTypeNV    type;
-    VkAccelerationStructureNV                          accelerationStructure;
-} VkAccelerationStructureMemoryRequirementsInfoNV;
-
-typedef struct VkPhysicalDeviceRayTracingPropertiesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           shaderGroupHandleSize;
-    uint32_t           maxRecursionDepth;
-    uint32_t           maxShaderGroupStride;
-    uint32_t           shaderGroupBaseAlignment;
-    uint64_t           maxGeometryCount;
-    uint64_t           maxInstanceCount;
-    uint64_t           maxTriangleCount;
-    uint32_t           maxDescriptorSetAccelerationStructures;
-} VkPhysicalDeviceRayTracingPropertiesNV;
-
-typedef struct VkTransformMatrixKHR {
-    float    matrix[3][4];
-} VkTransformMatrixKHR;
-
-typedef VkTransformMatrixKHR VkTransformMatrixNV;
-
-typedef struct VkAabbPositionsKHR {
-    float    minX;
-    float    minY;
-    float    minZ;
-    float    maxX;
-    float    maxY;
-    float    maxZ;
-} VkAabbPositionsKHR;
-
-typedef VkAabbPositionsKHR VkAabbPositionsNV;
-
-typedef struct VkAccelerationStructureInstanceKHR {
-    VkTransformMatrixKHR          transform;
-    uint32_t                      instanceCustomIndex:24;
-    uint32_t                      mask:8;
-    uint32_t                      instanceShaderBindingTableRecordOffset:24;
-    VkGeometryInstanceFlagsKHR    flags:8;
-    uint64_t                      accelerationStructureReference;
-} VkAccelerationStructureInstanceKHR;
-
-typedef VkAccelerationStructureInstanceKHR VkAccelerationStructureInstanceNV;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureNV)(VkDevice device, const VkAccelerationStructureCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureNV* pAccelerationStructure);
-typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureMemoryRequirementsNV)(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
-typedef VkResult (VKAPI_PTR *PFN_vkBindAccelerationStructureMemoryNV)(VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV* pBindInfos);
-typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructureNV)(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureNV)(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode);
-typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysNV)(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesNV)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
-typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData);
-typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesNV)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData);
-typedef VkResult (VKAPI_PTR *PFN_vkGetAccelerationStructureHandleNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData);
-typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesNV)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery);
-typedef VkResult (VKAPI_PTR *PFN_vkCompileDeferredNV)(VkDevice device, VkPipeline pipeline, uint32_t shader);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV(
-    VkDevice                                    device,
-    const VkAccelerationStructureCreateInfoNV*  pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkAccelerationStructureNV*                  pAccelerationStructure);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV(
-    VkDevice                                    device,
-    VkAccelerationStructureNV                   accelerationStructure,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV(
-    VkDevice                                    device,
-    const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
-    VkMemoryRequirements2KHR*                   pMemoryRequirements);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV(
-    VkDevice                                    device,
-    uint32_t                                    bindInfoCount,
-    const VkBindAccelerationStructureMemoryInfoNV* pBindInfos);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV(
-    VkCommandBuffer                             commandBuffer,
-    const VkAccelerationStructureInfoNV*        pInfo,
-    VkBuffer                                    instanceData,
-    VkDeviceSize                                instanceOffset,
-    VkBool32                                    update,
-    VkAccelerationStructureNV                   dst,
-    VkAccelerationStructureNV                   src,
-    VkBuffer                                    scratch,
-    VkDeviceSize                                scratchOffset);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV(
-    VkCommandBuffer                             commandBuffer,
-    VkAccelerationStructureNV                   dst,
-    VkAccelerationStructureNV                   src,
-    VkCopyAccelerationStructureModeKHR          mode);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    raygenShaderBindingTableBuffer,
-    VkDeviceSize                                raygenShaderBindingOffset,
-    VkBuffer                                    missShaderBindingTableBuffer,
-    VkDeviceSize                                missShaderBindingOffset,
-    VkDeviceSize                                missShaderBindingStride,
-    VkBuffer                                    hitShaderBindingTableBuffer,
-    VkDeviceSize                                hitShaderBindingOffset,
-    VkDeviceSize                                hitShaderBindingStride,
-    VkBuffer                                    callableShaderBindingTableBuffer,
-    VkDeviceSize                                callableShaderBindingOffset,
-    VkDeviceSize                                callableShaderBindingStride,
-    uint32_t                                    width,
-    uint32_t                                    height,
-    uint32_t                                    depth);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesNV(
-    VkDevice                                    device,
-    VkPipelineCache                             pipelineCache,
-    uint32_t                                    createInfoCount,
-    const VkRayTracingPipelineCreateInfoNV*     pCreateInfos,
-    const VkAllocationCallbacks*                pAllocator,
-    VkPipeline*                                 pPipelines);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesKHR(
-    VkDevice                                    device,
-    VkPipeline                                  pipeline,
-    uint32_t                                    firstGroup,
-    uint32_t                                    groupCount,
-    size_t                                      dataSize,
-    void*                                       pData);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV(
-    VkDevice                                    device,
-    VkPipeline                                  pipeline,
-    uint32_t                                    firstGroup,
-    uint32_t                                    groupCount,
-    size_t                                      dataSize,
-    void*                                       pData);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV(
-    VkDevice                                    device,
-    VkAccelerationStructureNV                   accelerationStructure,
-    size_t                                      dataSize,
-    void*                                       pData);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    accelerationStructureCount,
-    const VkAccelerationStructureNV*            pAccelerationStructures,
-    VkQueryType                                 queryType,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    firstQuery);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV(
-    VkDevice                                    device,
-    VkPipeline                                  pipeline,
-    uint32_t                                    shader);
-#endif
-
-
-#define VK_NV_representative_fragment_test 1
-#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION 2
-#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test"
-typedef struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           representativeFragmentTest;
-} VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV;
-
-typedef struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBool32           representativeFragmentTestEnable;
-} VkPipelineRepresentativeFragmentTestStateCreateInfoNV;
-
-
-
-#define VK_EXT_filter_cubic 1
-#define VK_EXT_FILTER_CUBIC_SPEC_VERSION  3
-#define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic"
-typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkImageViewType    imageViewType;
-} VkPhysicalDeviceImageViewImageFormatInfoEXT;
-
-typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           filterCubic;
-    VkBool32           filterCubicMinmax;
-} VkFilterCubicImageViewImageFormatPropertiesEXT;
-
-
-
-#define VK_QCOM_render_pass_shader_resolve 1
-#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION 4
-#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME "VK_QCOM_render_pass_shader_resolve"
-
-
-#define VK_EXT_global_priority 1
-#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2
-#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
-
-typedef enum VkQueueGlobalPriorityEXT {
-    VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = 128,
-    VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = 256,
-    VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = 512,
-    VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = 1024,
-    VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkQueueGlobalPriorityEXT;
-typedef struct VkDeviceQueueGlobalPriorityCreateInfoEXT {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkQueueGlobalPriorityEXT    globalPriority;
-} VkDeviceQueueGlobalPriorityCreateInfoEXT;
-
-
-
-#define VK_EXT_external_memory_host 1
-#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1
-#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host"
-typedef struct VkImportMemoryHostPointerInfoEXT {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-    void*                                 pHostPointer;
-} VkImportMemoryHostPointerInfoEXT;
-
-typedef struct VkMemoryHostPointerPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           memoryTypeBits;
-} VkMemoryHostPointerPropertiesEXT;
-
-typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkDeviceSize       minImportedHostPointerAlignment;
-} VkPhysicalDeviceExternalMemoryHostPropertiesEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT(
-    VkDevice                                    device,
-    VkExternalMemoryHandleTypeFlagBits          handleType,
-    const void*                                 pHostPointer,
-    VkMemoryHostPointerPropertiesEXT*           pMemoryHostPointerProperties);
-#endif
-
-
-#define VK_AMD_buffer_marker 1
-#define VK_AMD_BUFFER_MARKER_SPEC_VERSION 1
-#define VK_AMD_BUFFER_MARKER_EXTENSION_NAME "VK_AMD_buffer_marker"
-typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarkerAMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineStageFlagBits                     pipelineStage,
-    VkBuffer                                    dstBuffer,
-    VkDeviceSize                                dstOffset,
-    uint32_t                                    marker);
-#endif
-
-
-#define VK_AMD_pipeline_compiler_control 1
-#define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1
-#define VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME "VK_AMD_pipeline_compiler_control"
-
-typedef enum VkPipelineCompilerControlFlagBitsAMD {
-    VK_PIPELINE_COMPILER_CONTROL_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF
-} VkPipelineCompilerControlFlagBitsAMD;
-typedef VkFlags VkPipelineCompilerControlFlagsAMD;
-typedef struct VkPipelineCompilerControlCreateInfoAMD {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkPipelineCompilerControlFlagsAMD    compilerControlFlags;
-} VkPipelineCompilerControlCreateInfoAMD;
-
-
-
-#define VK_EXT_calibrated_timestamps 1
-#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2
-#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps"
-
-typedef enum VkTimeDomainEXT {
-    VK_TIME_DOMAIN_DEVICE_EXT = 0,
-    VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1,
-    VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2,
-    VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3,
-    VK_TIME_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkTimeDomainEXT;
-typedef struct VkCalibratedTimestampInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkTimeDomainEXT    timeDomain;
-} VkCalibratedTimestampInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains);
-typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pTimeDomainCount,
-    VkTimeDomainEXT*                            pTimeDomains);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT(
-    VkDevice                                    device,
-    uint32_t                                    timestampCount,
-    const VkCalibratedTimestampInfoEXT*         pTimestampInfos,
-    uint64_t*                                   pTimestamps,
-    uint64_t*                                   pMaxDeviation);
-#endif
-
-
-#define VK_AMD_shader_core_properties 1
-#define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2
-#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties"
-typedef struct VkPhysicalDeviceShaderCorePropertiesAMD {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           shaderEngineCount;
-    uint32_t           shaderArraysPerEngineCount;
-    uint32_t           computeUnitsPerShaderArray;
-    uint32_t           simdPerComputeUnit;
-    uint32_t           wavefrontsPerSimd;
-    uint32_t           wavefrontSize;
-    uint32_t           sgprsPerSimd;
-    uint32_t           minSgprAllocation;
-    uint32_t           maxSgprAllocation;
-    uint32_t           sgprAllocationGranularity;
-    uint32_t           vgprsPerSimd;
-    uint32_t           minVgprAllocation;
-    uint32_t           maxVgprAllocation;
-    uint32_t           vgprAllocationGranularity;
-} VkPhysicalDeviceShaderCorePropertiesAMD;
-
-
-
-#define VK_AMD_memory_overallocation_behavior 1
-#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1
-#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME "VK_AMD_memory_overallocation_behavior"
-
-typedef enum VkMemoryOverallocationBehaviorAMD {
-    VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = 0,
-    VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = 1,
-    VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = 2,
-    VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD = 0x7FFFFFFF
-} VkMemoryOverallocationBehaviorAMD;
-typedef struct VkDeviceMemoryOverallocationCreateInfoAMD {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkMemoryOverallocationBehaviorAMD    overallocationBehavior;
-} VkDeviceMemoryOverallocationCreateInfoAMD;
-
-
-
-#define VK_EXT_vertex_attribute_divisor 1
-#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3
-#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
-typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxVertexAttribDivisor;
-} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT;
-
-typedef struct VkVertexInputBindingDivisorDescriptionEXT {
-    uint32_t    binding;
-    uint32_t    divisor;
-} VkVertexInputBindingDivisorDescriptionEXT;
-
-typedef struct VkPipelineVertexInputDivisorStateCreateInfoEXT {
-    VkStructureType                                     sType;
-    const void*                                         pNext;
-    uint32_t                                            vertexBindingDivisorCount;
-    const VkVertexInputBindingDivisorDescriptionEXT*    pVertexBindingDivisors;
-} VkPipelineVertexInputDivisorStateCreateInfoEXT;
-
-typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           vertexAttributeInstanceRateDivisor;
-    VkBool32           vertexAttributeInstanceRateZeroDivisor;
-} VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT;
-
-
-
-#define VK_EXT_pipeline_creation_feedback 1
-#define VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION 1
-#define VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME "VK_EXT_pipeline_creation_feedback"
-
-typedef enum VkPipelineCreationFeedbackFlagBitsEXT {
-    VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = 0x00000001,
-    VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = 0x00000002,
-    VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = 0x00000004,
-    VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkPipelineCreationFeedbackFlagBitsEXT;
-typedef VkFlags VkPipelineCreationFeedbackFlagsEXT;
-typedef struct VkPipelineCreationFeedbackEXT {
-    VkPipelineCreationFeedbackFlagsEXT    flags;
-    uint64_t                              duration;
-} VkPipelineCreationFeedbackEXT;
-
-typedef struct VkPipelineCreationFeedbackCreateInfoEXT {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkPipelineCreationFeedbackEXT*    pPipelineCreationFeedback;
-    uint32_t                          pipelineStageCreationFeedbackCount;
-    VkPipelineCreationFeedbackEXT*    pPipelineStageCreationFeedbacks;
-} VkPipelineCreationFeedbackCreateInfoEXT;
-
-
-
-#define VK_NV_shader_subgroup_partitioned 1
-#define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1
-#define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned"
-
-
-#define VK_NV_compute_shader_derivatives 1
-#define VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1
-#define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives"
-typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           computeDerivativeGroupQuads;
-    VkBool32           computeDerivativeGroupLinear;
-} VkPhysicalDeviceComputeShaderDerivativesFeaturesNV;
-
-
-
-#define VK_NV_mesh_shader 1
-#define VK_NV_MESH_SHADER_SPEC_VERSION    1
-#define VK_NV_MESH_SHADER_EXTENSION_NAME  "VK_NV_mesh_shader"
-typedef struct VkPhysicalDeviceMeshShaderFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           taskShader;
-    VkBool32           meshShader;
-} VkPhysicalDeviceMeshShaderFeaturesNV;
-
-typedef struct VkPhysicalDeviceMeshShaderPropertiesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxDrawMeshTasksCount;
-    uint32_t           maxTaskWorkGroupInvocations;
-    uint32_t           maxTaskWorkGroupSize[3];
-    uint32_t           maxTaskTotalMemorySize;
-    uint32_t           maxTaskOutputCount;
-    uint32_t           maxMeshWorkGroupInvocations;
-    uint32_t           maxMeshWorkGroupSize[3];
-    uint32_t           maxMeshTotalMemorySize;
-    uint32_t           maxMeshOutputVertices;
-    uint32_t           maxMeshOutputPrimitives;
-    uint32_t           maxMeshMultiviewViewCount;
-    uint32_t           meshOutputPerVertexGranularity;
-    uint32_t           meshOutputPerPrimitiveGranularity;
-} VkPhysicalDeviceMeshShaderPropertiesNV;
-
-typedef struct VkDrawMeshTasksIndirectCommandNV {
-    uint32_t    taskCount;
-    uint32_t    firstTask;
-} VkDrawMeshTasksIndirectCommandNV;
-
-typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksNV)(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectCountNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    taskCount,
-    uint32_t                                    firstTask);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    uint32_t                                    drawCount,
-    uint32_t                                    stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV(
-    VkCommandBuffer                             commandBuffer,
-    VkBuffer                                    buffer,
-    VkDeviceSize                                offset,
-    VkBuffer                                    countBuffer,
-    VkDeviceSize                                countBufferOffset,
-    uint32_t                                    maxDrawCount,
-    uint32_t                                    stride);
-#endif
-
-
-#define VK_NV_fragment_shader_barycentric 1
-#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1
-#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric"
-typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           fragmentShaderBarycentric;
-} VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV;
-
-
-
-#define VK_NV_shader_image_footprint 1
-#define VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION 2
-#define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint"
-typedef struct VkPhysicalDeviceShaderImageFootprintFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           imageFootprint;
-} VkPhysicalDeviceShaderImageFootprintFeaturesNV;
-
-
-
-#define VK_NV_scissor_exclusive 1
-#define VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION 1
-#define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive"
-typedef struct VkPipelineViewportExclusiveScissorStateCreateInfoNV {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           exclusiveScissorCount;
-    const VkRect2D*    pExclusiveScissors;
-} VkPipelineViewportExclusiveScissorStateCreateInfoNV;
-
-typedef struct VkPhysicalDeviceExclusiveScissorFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           exclusiveScissor;
-} VkPhysicalDeviceExclusiveScissorFeaturesNV;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetExclusiveScissorNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstExclusiveScissor,
-    uint32_t                                    exclusiveScissorCount,
-    const VkRect2D*                             pExclusiveScissors);
-#endif
-
-
-#define VK_NV_device_diagnostic_checkpoints 1
-#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION 2
-#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME "VK_NV_device_diagnostic_checkpoints"
-typedef struct VkQueueFamilyCheckpointPropertiesNV {
-    VkStructureType         sType;
-    void*                   pNext;
-    VkPipelineStageFlags    checkpointExecutionStageMask;
-} VkQueueFamilyCheckpointPropertiesNV;
-
-typedef struct VkCheckpointDataNV {
-    VkStructureType            sType;
-    void*                      pNext;
-    VkPipelineStageFlagBits    stage;
-    void*                      pCheckpointMarker;
-} VkCheckpointDataNV;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetCheckpointNV)(VkCommandBuffer commandBuffer, const void* pCheckpointMarker);
-typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointDataNV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV(
-    VkCommandBuffer                             commandBuffer,
-    const void*                                 pCheckpointMarker);
-
-VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV(
-    VkQueue                                     queue,
-    uint32_t*                                   pCheckpointDataCount,
-    VkCheckpointDataNV*                         pCheckpointData);
-#endif
-
-
-#define VK_INTEL_shader_integer_functions2 1
-#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION 1
-#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2"
-typedef struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderIntegerFunctions2;
-} VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL;
-
-
-
-#define VK_INTEL_performance_query 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL)
-#define VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION 2
-#define VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME "VK_INTEL_performance_query"
-
-typedef enum VkPerformanceConfigurationTypeINTEL {
-    VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0,
-    VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF
-} VkPerformanceConfigurationTypeINTEL;
-
-typedef enum VkQueryPoolSamplingModeINTEL {
-    VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0,
-    VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL = 0x7FFFFFFF
-} VkQueryPoolSamplingModeINTEL;
-
-typedef enum VkPerformanceOverrideTypeINTEL {
-    VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0,
-    VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1,
-    VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF
-} VkPerformanceOverrideTypeINTEL;
-
-typedef enum VkPerformanceParameterTypeINTEL {
-    VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = 0,
-    VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = 1,
-    VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF
-} VkPerformanceParameterTypeINTEL;
-
-typedef enum VkPerformanceValueTypeINTEL {
-    VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL = 0,
-    VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL = 1,
-    VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = 2,
-    VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL = 3,
-    VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL = 4,
-    VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF
-} VkPerformanceValueTypeINTEL;
-typedef union VkPerformanceValueDataINTEL {
-    uint32_t       value32;
-    uint64_t       value64;
-    float          valueFloat;
-    VkBool32       valueBool;
-    const char*    valueString;
-} VkPerformanceValueDataINTEL;
-
-typedef struct VkPerformanceValueINTEL {
-    VkPerformanceValueTypeINTEL    type;
-    VkPerformanceValueDataINTEL    data;
-} VkPerformanceValueINTEL;
-
-typedef struct VkInitializePerformanceApiInfoINTEL {
-    VkStructureType    sType;
-    const void*        pNext;
-    void*              pUserData;
-} VkInitializePerformanceApiInfoINTEL;
-
-typedef struct VkQueryPoolPerformanceQueryCreateInfoINTEL {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkQueryPoolSamplingModeINTEL    performanceCountersSampling;
-} VkQueryPoolPerformanceQueryCreateInfoINTEL;
-
-typedef VkQueryPoolPerformanceQueryCreateInfoINTEL VkQueryPoolCreateInfoINTEL;
-
-typedef struct VkPerformanceMarkerInfoINTEL {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint64_t           marker;
-} VkPerformanceMarkerInfoINTEL;
-
-typedef struct VkPerformanceStreamMarkerInfoINTEL {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           marker;
-} VkPerformanceStreamMarkerInfoINTEL;
-
-typedef struct VkPerformanceOverrideInfoINTEL {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkPerformanceOverrideTypeINTEL    type;
-    VkBool32                          enable;
-    uint64_t                          parameter;
-} VkPerformanceOverrideInfoINTEL;
-
-typedef struct VkPerformanceConfigurationAcquireInfoINTEL {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    VkPerformanceConfigurationTypeINTEL    type;
-} VkPerformanceConfigurationAcquireInfoINTEL;
-
-typedef VkResult (VKAPI_PTR *PFN_vkInitializePerformanceApiINTEL)(VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo);
-typedef void (VKAPI_PTR *PFN_vkUninitializePerformanceApiINTEL)(VkDevice device);
-typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceStreamMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceOverrideINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkAcquirePerformanceConfigurationINTEL)(VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration);
-typedef VkResult (VKAPI_PTR *PFN_vkReleasePerformanceConfigurationINTEL)(VkDevice device, VkPerformanceConfigurationINTEL configuration);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueSetPerformanceConfigurationINTEL)(VkQueue queue, VkPerformanceConfigurationINTEL configuration);
-typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceParameterINTEL)(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL(
-    VkDevice                                    device,
-    const VkInitializePerformanceApiInfoINTEL*  pInitializeInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL(
-    VkDevice                                    device);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL(
-    VkCommandBuffer                             commandBuffer,
-    const VkPerformanceMarkerInfoINTEL*         pMarkerInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL(
-    VkCommandBuffer                             commandBuffer,
-    const VkPerformanceStreamMarkerInfoINTEL*   pMarkerInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL(
-    VkCommandBuffer                             commandBuffer,
-    const VkPerformanceOverrideInfoINTEL*       pOverrideInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL(
-    VkDevice                                    device,
-    const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
-    VkPerformanceConfigurationINTEL*            pConfiguration);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL(
-    VkDevice                                    device,
-    VkPerformanceConfigurationINTEL             configuration);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL(
-    VkQueue                                     queue,
-    VkPerformanceConfigurationINTEL             configuration);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL(
-    VkDevice                                    device,
-    VkPerformanceParameterTypeINTEL             parameter,
-    VkPerformanceValueINTEL*                    pValue);
-#endif
-
-
-#define VK_EXT_pci_bus_info 1
-#define VK_EXT_PCI_BUS_INFO_SPEC_VERSION  2
-#define VK_EXT_PCI_BUS_INFO_EXTENSION_NAME "VK_EXT_pci_bus_info"
-typedef struct VkPhysicalDevicePCIBusInfoPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           pciDomain;
-    uint32_t           pciBus;
-    uint32_t           pciDevice;
-    uint32_t           pciFunction;
-} VkPhysicalDevicePCIBusInfoPropertiesEXT;
-
-
-
-#define VK_AMD_display_native_hdr 1
-#define VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION 1
-#define VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME "VK_AMD_display_native_hdr"
-typedef struct VkDisplayNativeHdrSurfaceCapabilitiesAMD {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           localDimmingSupport;
-} VkDisplayNativeHdrSurfaceCapabilitiesAMD;
-
-typedef struct VkSwapchainDisplayNativeHdrCreateInfoAMD {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkBool32           localDimmingEnable;
-} VkSwapchainDisplayNativeHdrCreateInfoAMD;
-
-typedef void (VKAPI_PTR *PFN_vkSetLocalDimmingAMD)(VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapChain,
-    VkBool32                                    localDimmingEnable);
-#endif
-
-
-#define VK_EXT_fragment_density_map 1
-#define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 2
-#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map"
-typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           fragmentDensityMap;
-    VkBool32           fragmentDensityMapDynamic;
-    VkBool32           fragmentDensityMapNonSubsampledImages;
-} VkPhysicalDeviceFragmentDensityMapFeaturesEXT;
-
-typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkExtent2D         minFragmentDensityTexelSize;
-    VkExtent2D         maxFragmentDensityTexelSize;
-    VkBool32           fragmentDensityInvocations;
-} VkPhysicalDeviceFragmentDensityMapPropertiesEXT;
-
-typedef struct VkRenderPassFragmentDensityMapCreateInfoEXT {
-    VkStructureType          sType;
-    const void*              pNext;
-    VkAttachmentReference    fragmentDensityMapAttachment;
-} VkRenderPassFragmentDensityMapCreateInfoEXT;
-
-
-
-#define VK_EXT_scalar_block_layout 1
-#define VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION 1
-#define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout"
-typedef VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLayoutFeaturesEXT;
-
-
-
-#define VK_GOOGLE_hlsl_functionality1 1
-#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION 1
-#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1"
-#define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION
-#define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME
-
-
-#define VK_GOOGLE_decorate_string 1
-#define VK_GOOGLE_DECORATE_STRING_SPEC_VERSION 1
-#define VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME "VK_GOOGLE_decorate_string"
-
-
-#define VK_EXT_subgroup_size_control 1
-#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2
-#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
-typedef struct VkPhysicalDeviceSubgroupSizeControlFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           subgroupSizeControl;
-    VkBool32           computeFullSubgroups;
-} VkPhysicalDeviceSubgroupSizeControlFeaturesEXT;
-
-typedef struct VkPhysicalDeviceSubgroupSizeControlPropertiesEXT {
-    VkStructureType       sType;
-    void*                 pNext;
-    uint32_t              minSubgroupSize;
-    uint32_t              maxSubgroupSize;
-    uint32_t              maxComputeWorkgroupSubgroups;
-    VkShaderStageFlags    requiredSubgroupSizeStages;
-} VkPhysicalDeviceSubgroupSizeControlPropertiesEXT;
-
-typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           requiredSubgroupSize;
-} VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
-
-
-
-#define VK_AMD_shader_core_properties2 1
-#define VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION 1
-#define VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME "VK_AMD_shader_core_properties2"
-
-typedef enum VkShaderCorePropertiesFlagBitsAMD {
-    VK_SHADER_CORE_PROPERTIES_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF
-} VkShaderCorePropertiesFlagBitsAMD;
-typedef VkFlags VkShaderCorePropertiesFlagsAMD;
-typedef struct VkPhysicalDeviceShaderCoreProperties2AMD {
-    VkStructureType                   sType;
-    void*                             pNext;
-    VkShaderCorePropertiesFlagsAMD    shaderCoreFeatures;
-    uint32_t                          activeComputeUnitCount;
-} VkPhysicalDeviceShaderCoreProperties2AMD;
-
-
-
-#define VK_AMD_device_coherent_memory 1
-#define VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION 1
-#define VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME "VK_AMD_device_coherent_memory"
-typedef struct VkPhysicalDeviceCoherentMemoryFeaturesAMD {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           deviceCoherentMemory;
-} VkPhysicalDeviceCoherentMemoryFeaturesAMD;
-
-
-
-#define VK_EXT_shader_image_atomic_int64 1
-#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION 1
-#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64"
-typedef struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderImageInt64Atomics;
-    VkBool32           sparseImageInt64Atomics;
-} VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT;
-
-
-
-#define VK_EXT_memory_budget 1
-#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1
-#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget"
-typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkDeviceSize       heapBudget[VK_MAX_MEMORY_HEAPS];
-    VkDeviceSize       heapUsage[VK_MAX_MEMORY_HEAPS];
-} VkPhysicalDeviceMemoryBudgetPropertiesEXT;
-
-
-
-#define VK_EXT_memory_priority 1
-#define VK_EXT_MEMORY_PRIORITY_SPEC_VERSION 1
-#define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority"
-typedef struct VkPhysicalDeviceMemoryPriorityFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           memoryPriority;
-} VkPhysicalDeviceMemoryPriorityFeaturesEXT;
-
-typedef struct VkMemoryPriorityAllocateInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    float              priority;
-} VkMemoryPriorityAllocateInfoEXT;
-
-
-
-#define VK_NV_dedicated_allocation_image_aliasing 1
-#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION 1
-#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing"
-typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           dedicatedAllocationImageAliasing;
-} VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
-
-
-
-#define VK_EXT_buffer_device_address 1
-#define VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 2
-#define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address"
-typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           bufferDeviceAddress;
-    VkBool32           bufferDeviceAddressCaptureReplay;
-    VkBool32           bufferDeviceAddressMultiDevice;
-} VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
-
-typedef VkPhysicalDeviceBufferDeviceAddressFeaturesEXT VkPhysicalDeviceBufferAddressFeaturesEXT;
-
-typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoEXT;
-
-typedef struct VkBufferDeviceAddressCreateInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkDeviceAddress    deviceAddress;
-} VkBufferDeviceAddressCreateInfoEXT;
-
-typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressEXT)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT(
-    VkDevice                                    device,
-    const VkBufferDeviceAddressInfo*            pInfo);
-#endif
-
-
-#define VK_EXT_tooling_info 1
-#define VK_EXT_TOOLING_INFO_SPEC_VERSION  1
-#define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info"
-
-typedef enum VkToolPurposeFlagBitsEXT {
-    VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = 0x00000001,
-    VK_TOOL_PURPOSE_PROFILING_BIT_EXT = 0x00000002,
-    VK_TOOL_PURPOSE_TRACING_BIT_EXT = 0x00000004,
-    VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = 0x00000008,
-    VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = 0x00000010,
-    VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020,
-    VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040,
-    VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkToolPurposeFlagBitsEXT;
-typedef VkFlags VkToolPurposeFlagsEXT;
-typedef struct VkPhysicalDeviceToolPropertiesEXT {
-    VkStructureType          sType;
-    void*                    pNext;
-    char                     name[VK_MAX_EXTENSION_NAME_SIZE];
-    char                     version[VK_MAX_EXTENSION_NAME_SIZE];
-    VkToolPurposeFlagsEXT    purposes;
-    char                     description[VK_MAX_DESCRIPTION_SIZE];
-    char                     layer[VK_MAX_EXTENSION_NAME_SIZE];
-} VkPhysicalDeviceToolPropertiesEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolPropertiesEXT* pToolProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pToolCount,
-    VkPhysicalDeviceToolPropertiesEXT*          pToolProperties);
-#endif
-
-
-#define VK_EXT_separate_stencil_usage 1
-#define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1
-#define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage"
-typedef VkImageStencilUsageCreateInfo VkImageStencilUsageCreateInfoEXT;
-
-
-
-#define VK_EXT_validation_features 1
-#define VK_EXT_VALIDATION_FEATURES_SPEC_VERSION 5
-#define VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME "VK_EXT_validation_features"
-
-typedef enum VkValidationFeatureEnableEXT {
-    VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0,
-    VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1,
-    VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2,
-    VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3,
-    VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = 4,
-    VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkValidationFeatureEnableEXT;
-
-typedef enum VkValidationFeatureDisableEXT {
-    VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0,
-    VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1,
-    VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2,
-    VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3,
-    VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4,
-    VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5,
-    VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6,
-    VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT = 7,
-    VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkValidationFeatureDisableEXT;
-typedef struct VkValidationFeaturesEXT {
-    VkStructureType                         sType;
-    const void*                             pNext;
-    uint32_t                                enabledValidationFeatureCount;
-    const VkValidationFeatureEnableEXT*     pEnabledValidationFeatures;
-    uint32_t                                disabledValidationFeatureCount;
-    const VkValidationFeatureDisableEXT*    pDisabledValidationFeatures;
-} VkValidationFeaturesEXT;
-
-
-
-#define VK_NV_cooperative_matrix 1
-#define VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION 1
-#define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix"
-
-typedef enum VkComponentTypeNV {
-    VK_COMPONENT_TYPE_FLOAT16_NV = 0,
-    VK_COMPONENT_TYPE_FLOAT32_NV = 1,
-    VK_COMPONENT_TYPE_FLOAT64_NV = 2,
-    VK_COMPONENT_TYPE_SINT8_NV = 3,
-    VK_COMPONENT_TYPE_SINT16_NV = 4,
-    VK_COMPONENT_TYPE_SINT32_NV = 5,
-    VK_COMPONENT_TYPE_SINT64_NV = 6,
-    VK_COMPONENT_TYPE_UINT8_NV = 7,
-    VK_COMPONENT_TYPE_UINT16_NV = 8,
-    VK_COMPONENT_TYPE_UINT32_NV = 9,
-    VK_COMPONENT_TYPE_UINT64_NV = 10,
-    VK_COMPONENT_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkComponentTypeNV;
-
-typedef enum VkScopeNV {
-    VK_SCOPE_DEVICE_NV = 1,
-    VK_SCOPE_WORKGROUP_NV = 2,
-    VK_SCOPE_SUBGROUP_NV = 3,
-    VK_SCOPE_QUEUE_FAMILY_NV = 5,
-    VK_SCOPE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkScopeNV;
-typedef struct VkCooperativeMatrixPropertiesNV {
-    VkStructureType      sType;
-    void*                pNext;
-    uint32_t             MSize;
-    uint32_t             NSize;
-    uint32_t             KSize;
-    VkComponentTypeNV    AType;
-    VkComponentTypeNV    BType;
-    VkComponentTypeNV    CType;
-    VkComponentTypeNV    DType;
-    VkScopeNV            scope;
-} VkCooperativeMatrixPropertiesNV;
-
-typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           cooperativeMatrix;
-    VkBool32           cooperativeMatrixRobustBufferAccess;
-} VkPhysicalDeviceCooperativeMatrixFeaturesNV;
-
-typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesNV {
-    VkStructureType       sType;
-    void*                 pNext;
-    VkShaderStageFlags    cooperativeMatrixSupportedStages;
-} VkPhysicalDeviceCooperativeMatrixPropertiesNV;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesNV* pProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pPropertyCount,
-    VkCooperativeMatrixPropertiesNV*            pProperties);
-#endif
-
-
-#define VK_NV_coverage_reduction_mode 1
-#define VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION 1
-#define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode"
-
-typedef enum VkCoverageReductionModeNV {
-    VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0,
-    VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1,
-    VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkCoverageReductionModeNV;
-typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV;
-typedef struct VkPhysicalDeviceCoverageReductionModeFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           coverageReductionMode;
-} VkPhysicalDeviceCoverageReductionModeFeaturesNV;
-
-typedef struct VkPipelineCoverageReductionStateCreateInfoNV {
-    VkStructureType                                  sType;
-    const void*                                      pNext;
-    VkPipelineCoverageReductionStateCreateFlagsNV    flags;
-    VkCoverageReductionModeNV                        coverageReductionMode;
-} VkPipelineCoverageReductionStateCreateInfoNV;
-
-typedef struct VkFramebufferMixedSamplesCombinationNV {
-    VkStructureType              sType;
-    void*                        pNext;
-    VkCoverageReductionModeNV    coverageReductionMode;
-    VkSampleCountFlagBits        rasterizationSamples;
-    VkSampleCountFlags           depthStencilSamples;
-    VkSampleCountFlags           colorSamples;
-} VkFramebufferMixedSamplesCombinationNV;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)(VkPhysicalDevice physicalDevice, uint32_t* pCombinationCount, VkFramebufferMixedSamplesCombinationNV* pCombinations);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t*                                   pCombinationCount,
-    VkFramebufferMixedSamplesCombinationNV*     pCombinations);
-#endif
-
-
-#define VK_EXT_fragment_shader_interlock 1
-#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1
-#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock"
-typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           fragmentShaderSampleInterlock;
-    VkBool32           fragmentShaderPixelInterlock;
-    VkBool32           fragmentShaderShadingRateInterlock;
-} VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT;
-
-
-
-#define VK_EXT_ycbcr_image_arrays 1
-#define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1
-#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
-typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           ycbcrImageArrays;
-} VkPhysicalDeviceYcbcrImageArraysFeaturesEXT;
-
-
-
-#define VK_EXT_provoking_vertex 1
-#define VK_EXT_PROVOKING_VERTEX_SPEC_VERSION 1
-#define VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME "VK_EXT_provoking_vertex"
-
-typedef enum VkProvokingVertexModeEXT {
-    VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT = 0,
-    VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT = 1,
-    VK_PROVOKING_VERTEX_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkProvokingVertexModeEXT;
-typedef struct VkPhysicalDeviceProvokingVertexFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           provokingVertexLast;
-    VkBool32           transformFeedbackPreservesProvokingVertex;
-} VkPhysicalDeviceProvokingVertexFeaturesEXT;
-
-typedef struct VkPhysicalDeviceProvokingVertexPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           provokingVertexModePerPipeline;
-    VkBool32           transformFeedbackPreservesTriangleFanProvokingVertex;
-} VkPhysicalDeviceProvokingVertexPropertiesEXT;
-
-typedef struct VkPipelineRasterizationProvokingVertexStateCreateInfoEXT {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkProvokingVertexModeEXT    provokingVertexMode;
-} VkPipelineRasterizationProvokingVertexStateCreateInfoEXT;
-
-
-
-#define VK_EXT_headless_surface 1
-#define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1
-#define VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME "VK_EXT_headless_surface"
-typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT;
-typedef struct VkHeadlessSurfaceCreateInfoEXT {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkHeadlessSurfaceCreateFlagsEXT    flags;
-} VkHeadlessSurfaceCreateInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateHeadlessSurfaceEXT)(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT(
-    VkInstance                                  instance,
-    const VkHeadlessSurfaceCreateInfoEXT*       pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-
-#define VK_EXT_line_rasterization 1
-#define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1
-#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization"
-
-typedef enum VkLineRasterizationModeEXT {
-    VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = 0,
-    VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = 1,
-    VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = 2,
-    VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = 3,
-    VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkLineRasterizationModeEXT;
-typedef struct VkPhysicalDeviceLineRasterizationFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           rectangularLines;
-    VkBool32           bresenhamLines;
-    VkBool32           smoothLines;
-    VkBool32           stippledRectangularLines;
-    VkBool32           stippledBresenhamLines;
-    VkBool32           stippledSmoothLines;
-} VkPhysicalDeviceLineRasterizationFeaturesEXT;
-
-typedef struct VkPhysicalDeviceLineRasterizationPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           lineSubPixelPrecisionBits;
-} VkPhysicalDeviceLineRasterizationPropertiesEXT;
-
-typedef struct VkPipelineRasterizationLineStateCreateInfoEXT {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkLineRasterizationModeEXT    lineRasterizationMode;
-    VkBool32                      stippledLineEnable;
-    uint32_t                      lineStippleFactor;
-    uint16_t                      lineStipplePattern;
-} VkPipelineRasterizationLineStateCreateInfoEXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    lineStippleFactor,
-    uint16_t                                    lineStipplePattern);
-#endif
-
-
-#define VK_EXT_shader_atomic_float 1
-#define VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION 1
-#define VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME "VK_EXT_shader_atomic_float"
-typedef struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderBufferFloat32Atomics;
-    VkBool32           shaderBufferFloat32AtomicAdd;
-    VkBool32           shaderBufferFloat64Atomics;
-    VkBool32           shaderBufferFloat64AtomicAdd;
-    VkBool32           shaderSharedFloat32Atomics;
-    VkBool32           shaderSharedFloat32AtomicAdd;
-    VkBool32           shaderSharedFloat64Atomics;
-    VkBool32           shaderSharedFloat64AtomicAdd;
-    VkBool32           shaderImageFloat32Atomics;
-    VkBool32           shaderImageFloat32AtomicAdd;
-    VkBool32           sparseImageFloat32Atomics;
-    VkBool32           sparseImageFloat32AtomicAdd;
-} VkPhysicalDeviceShaderAtomicFloatFeaturesEXT;
-
-
-
-#define VK_EXT_host_query_reset 1
-#define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1
-#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset"
-typedef VkPhysicalDeviceHostQueryResetFeatures VkPhysicalDeviceHostQueryResetFeaturesEXT;
-
-typedef void (VKAPI_PTR *PFN_vkResetQueryPoolEXT)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT(
-    VkDevice                                    device,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    firstQuery,
-    uint32_t                                    queryCount);
-#endif
-
-
-#define VK_EXT_index_type_uint8 1
-#define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1
-#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
-typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           indexTypeUint8;
-} VkPhysicalDeviceIndexTypeUint8FeaturesEXT;
-
-
-
-#define VK_EXT_extended_dynamic_state 1
-#define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1
-#define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state"
-typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           extendedDynamicState;
-} VkPhysicalDeviceExtendedDynamicStateFeaturesEXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetCullModeEXT)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode);
-typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFaceEXT)(VkCommandBuffer commandBuffer, VkFrontFace frontFace);
-typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopologyEXT)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology);
-typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports);
-typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
-typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2EXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOpEXT)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable);
-typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable);
-typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOpEXT)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkCullModeFlags                             cullMode);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkFrontFace                                 frontFace);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkPrimitiveTopology                         primitiveTopology);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    viewportCount,
-    const VkViewport*                           pViewports);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    scissorCount,
-    const VkRect2D*                             pScissors);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    firstBinding,
-    uint32_t                                    bindingCount,
-    const VkBuffer*                             pBuffers,
-    const VkDeviceSize*                         pOffsets,
-    const VkDeviceSize*                         pSizes,
-    const VkDeviceSize*                         pStrides);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkBool32                                    depthTestEnable);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkBool32                                    depthWriteEnable);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkCompareOp                                 depthCompareOp);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkBool32                                    depthBoundsTestEnable);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkBool32                                    stencilTestEnable);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkStencilFaceFlags                          faceMask,
-    VkStencilOp                                 failOp,
-    VkStencilOp                                 passOp,
-    VkStencilOp                                 depthFailOp,
-    VkCompareOp                                 compareOp);
-#endif
-
-
-#define VK_EXT_shader_atomic_float2 1
-#define VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION 1
-#define VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME "VK_EXT_shader_atomic_float2"
-typedef struct VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderBufferFloat16Atomics;
-    VkBool32           shaderBufferFloat16AtomicAdd;
-    VkBool32           shaderBufferFloat16AtomicMinMax;
-    VkBool32           shaderBufferFloat32AtomicMinMax;
-    VkBool32           shaderBufferFloat64AtomicMinMax;
-    VkBool32           shaderSharedFloat16Atomics;
-    VkBool32           shaderSharedFloat16AtomicAdd;
-    VkBool32           shaderSharedFloat16AtomicMinMax;
-    VkBool32           shaderSharedFloat32AtomicMinMax;
-    VkBool32           shaderSharedFloat64AtomicMinMax;
-    VkBool32           shaderImageFloat32AtomicMinMax;
-    VkBool32           sparseImageFloat32AtomicMinMax;
-} VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT;
-
-
-
-#define VK_EXT_shader_demote_to_helper_invocation 1
-#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1
-#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation"
-typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           shaderDemoteToHelperInvocation;
-} VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
-
-
-
-#define VK_NV_device_generated_commands 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNV)
-#define VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3
-#define VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NV_device_generated_commands"
-
-typedef enum VkIndirectCommandsTokenTypeNV {
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = 0,
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = 1,
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = 2,
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = 3,
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = 4,
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = 5,
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = 6,
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = 7,
-    VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkIndirectCommandsTokenTypeNV;
-
-typedef enum VkIndirectStateFlagBitsNV {
-    VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = 0x00000001,
-    VK_INDIRECT_STATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
-} VkIndirectStateFlagBitsNV;
-typedef VkFlags VkIndirectStateFlagsNV;
-
-typedef enum VkIndirectCommandsLayoutUsageFlagBitsNV {
-    VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = 0x00000001,
-    VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = 0x00000002,
-    VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = 0x00000004,
-    VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
-} VkIndirectCommandsLayoutUsageFlagBitsNV;
-typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNV;
-typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxGraphicsShaderGroupCount;
-    uint32_t           maxIndirectSequenceCount;
-    uint32_t           maxIndirectCommandsTokenCount;
-    uint32_t           maxIndirectCommandsStreamCount;
-    uint32_t           maxIndirectCommandsTokenOffset;
-    uint32_t           maxIndirectCommandsStreamStride;
-    uint32_t           minSequencesCountBufferOffsetAlignment;
-    uint32_t           minSequencesIndexBufferOffsetAlignment;
-    uint32_t           minIndirectCommandsBufferOffsetAlignment;
-} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV;
-
-typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           deviceGeneratedCommands;
-} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV;
-
-typedef struct VkGraphicsShaderGroupCreateInfoNV {
-    VkStructureType                                 sType;
-    const void*                                     pNext;
-    uint32_t                                        stageCount;
-    const VkPipelineShaderStageCreateInfo*          pStages;
-    const VkPipelineVertexInputStateCreateInfo*     pVertexInputState;
-    const VkPipelineTessellationStateCreateInfo*    pTessellationState;
-} VkGraphicsShaderGroupCreateInfoNV;
-
-typedef struct VkGraphicsPipelineShaderGroupsCreateInfoNV {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    uint32_t                                    groupCount;
-    const VkGraphicsShaderGroupCreateInfoNV*    pGroups;
-    uint32_t                                    pipelineCount;
-    const VkPipeline*                           pPipelines;
-} VkGraphicsPipelineShaderGroupsCreateInfoNV;
-
-typedef struct VkBindShaderGroupIndirectCommandNV {
-    uint32_t    groupIndex;
-} VkBindShaderGroupIndirectCommandNV;
-
-typedef struct VkBindIndexBufferIndirectCommandNV {
-    VkDeviceAddress    bufferAddress;
-    uint32_t           size;
-    VkIndexType        indexType;
-} VkBindIndexBufferIndirectCommandNV;
-
-typedef struct VkBindVertexBufferIndirectCommandNV {
-    VkDeviceAddress    bufferAddress;
-    uint32_t           size;
-    uint32_t           stride;
-} VkBindVertexBufferIndirectCommandNV;
-
-typedef struct VkSetStateFlagsIndirectCommandNV {
-    uint32_t    data;
-} VkSetStateFlagsIndirectCommandNV;
-
-typedef struct VkIndirectCommandsStreamNV {
-    VkBuffer        buffer;
-    VkDeviceSize    offset;
-} VkIndirectCommandsStreamNV;
-
-typedef struct VkIndirectCommandsLayoutTokenNV {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkIndirectCommandsTokenTypeNV    tokenType;
-    uint32_t                         stream;
-    uint32_t                         offset;
-    uint32_t                         vertexBindingUnit;
-    VkBool32                         vertexDynamicStride;
-    VkPipelineLayout                 pushconstantPipelineLayout;
-    VkShaderStageFlags               pushconstantShaderStageFlags;
-    uint32_t                         pushconstantOffset;
-    uint32_t                         pushconstantSize;
-    VkIndirectStateFlagsNV           indirectStateFlags;
-    uint32_t                         indexTypeCount;
-    const VkIndexType*               pIndexTypes;
-    const uint32_t*                  pIndexTypeValues;
-} VkIndirectCommandsLayoutTokenNV;
-
-typedef struct VkIndirectCommandsLayoutCreateInfoNV {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    VkIndirectCommandsLayoutUsageFlagsNV      flags;
-    VkPipelineBindPoint                       pipelineBindPoint;
-    uint32_t                                  tokenCount;
-    const VkIndirectCommandsLayoutTokenNV*    pTokens;
-    uint32_t                                  streamCount;
-    const uint32_t*                           pStreamStrides;
-} VkIndirectCommandsLayoutCreateInfoNV;
-
-typedef struct VkGeneratedCommandsInfoNV {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkPipelineBindPoint                  pipelineBindPoint;
-    VkPipeline                           pipeline;
-    VkIndirectCommandsLayoutNV           indirectCommandsLayout;
-    uint32_t                             streamCount;
-    const VkIndirectCommandsStreamNV*    pStreams;
-    uint32_t                             sequencesCount;
-    VkBuffer                             preprocessBuffer;
-    VkDeviceSize                         preprocessOffset;
-    VkDeviceSize                         preprocessSize;
-    VkBuffer                             sequencesCountBuffer;
-    VkDeviceSize                         sequencesCountOffset;
-    VkBuffer                             sequencesIndexBuffer;
-    VkDeviceSize                         sequencesIndexOffset;
-} VkGeneratedCommandsInfoNV;
-
-typedef struct VkGeneratedCommandsMemoryRequirementsInfoNV {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkPipelineBindPoint           pipelineBindPoint;
-    VkPipeline                    pipeline;
-    VkIndirectCommandsLayoutNV    indirectCommandsLayout;
-    uint32_t                      maxSequencesCount;
-} VkGeneratedCommandsMemoryRequirementsInfoNV;
-
-typedef void (VKAPI_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsNV)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2* pMemoryRequirements);
-typedef void (VKAPI_PTR *PFN_vkCmdPreprocessGeneratedCommandsNV)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdExecuteGeneratedCommandsNV)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdBindPipelineShaderGroupNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNV)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout);
-typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNV)(VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsNV(
-    VkDevice                                    device,
-    const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo,
-    VkMemoryRequirements2*                      pMemoryRequirements);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsNV(
-    VkCommandBuffer                             commandBuffer,
-    const VkGeneratedCommandsInfoNV*            pGeneratedCommandsInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsNV(
-    VkCommandBuffer                             commandBuffer,
-    VkBool32                                    isPreprocessed,
-    const VkGeneratedCommandsInfoNV*            pGeneratedCommandsInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBindPipelineShaderGroupNV(
-    VkCommandBuffer                             commandBuffer,
-    VkPipelineBindPoint                         pipelineBindPoint,
-    VkPipeline                                  pipeline,
-    uint32_t                                    groupIndex);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNV(
-    VkDevice                                    device,
-    const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkIndirectCommandsLayoutNV*                 pIndirectCommandsLayout);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNV(
-    VkDevice                                    device,
-    VkIndirectCommandsLayoutNV                  indirectCommandsLayout,
-    const VkAllocationCallbacks*                pAllocator);
-#endif
-
-
-#define VK_NV_inherited_viewport_scissor 1
-#define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1
-#define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor"
-typedef struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           inheritedViewportScissor2D;
-} VkPhysicalDeviceInheritedViewportScissorFeaturesNV;
-
-typedef struct VkCommandBufferInheritanceViewportScissorInfoNV {
-    VkStructureType      sType;
-    const void*          pNext;
-    VkBool32             viewportScissor2D;
-    uint32_t             viewportDepthCount;
-    const VkViewport*    pViewportDepths;
-} VkCommandBufferInheritanceViewportScissorInfoNV;
-
-
-
-#define VK_EXT_texel_buffer_alignment 1
-#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1
-#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
-typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           texelBufferAlignment;
-} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
-
-typedef struct VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkDeviceSize       storageTexelBufferOffsetAlignmentBytes;
-    VkBool32           storageTexelBufferOffsetSingleTexelAlignment;
-    VkDeviceSize       uniformTexelBufferOffsetAlignmentBytes;
-    VkBool32           uniformTexelBufferOffsetSingleTexelAlignment;
-} VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT;
-
-
-
-#define VK_QCOM_render_pass_transform 1
-#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 2
-#define VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME "VK_QCOM_render_pass_transform"
-typedef struct VkRenderPassTransformBeginInfoQCOM {
-    VkStructureType                  sType;
-    void*                            pNext;
-    VkSurfaceTransformFlagBitsKHR    transform;
-} VkRenderPassTransformBeginInfoQCOM;
-
-typedef struct VkCommandBufferInheritanceRenderPassTransformInfoQCOM {
-    VkStructureType                  sType;
-    void*                            pNext;
-    VkSurfaceTransformFlagBitsKHR    transform;
-    VkRect2D                         renderArea;
-} VkCommandBufferInheritanceRenderPassTransformInfoQCOM;
-
-
-
-#define VK_EXT_device_memory_report 1
-#define VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION 2
-#define VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME "VK_EXT_device_memory_report"
-
-typedef enum VkDeviceMemoryReportEventTypeEXT {
-    VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT = 0,
-    VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT = 1,
-    VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT = 2,
-    VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT = 3,
-    VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT = 4,
-    VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkDeviceMemoryReportEventTypeEXT;
-typedef VkFlags VkDeviceMemoryReportFlagsEXT;
-typedef struct VkPhysicalDeviceDeviceMemoryReportFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           deviceMemoryReport;
-} VkPhysicalDeviceDeviceMemoryReportFeaturesEXT;
-
-typedef struct VkDeviceMemoryReportCallbackDataEXT {
-    VkStructureType                     sType;
-    void*                               pNext;
-    VkDeviceMemoryReportFlagsEXT        flags;
-    VkDeviceMemoryReportEventTypeEXT    type;
-    uint64_t                            memoryObjectId;
-    VkDeviceSize                        size;
-    VkObjectType                        objectType;
-    uint64_t                            objectHandle;
-    uint32_t                            heapIndex;
-} VkDeviceMemoryReportCallbackDataEXT;
-
-typedef void (VKAPI_PTR *PFN_vkDeviceMemoryReportCallbackEXT)(
-    const VkDeviceMemoryReportCallbackDataEXT*  pCallbackData,
-    void*                                       pUserData);
-
-typedef struct VkDeviceDeviceMemoryReportCreateInfoEXT {
-    VkStructureType                        sType;
-    const void*                            pNext;
-    VkDeviceMemoryReportFlagsEXT           flags;
-    PFN_vkDeviceMemoryReportCallbackEXT    pfnUserCallback;
-    void*                                  pUserData;
-} VkDeviceDeviceMemoryReportCreateInfoEXT;
-
-
-
-#define VK_EXT_acquire_drm_display 1
-#define VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION 1
-#define VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_drm_display"
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, VkDisplayKHR display);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId, VkDisplayKHR* display);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireDrmDisplayEXT(
-    VkPhysicalDevice                            physicalDevice,
-    int32_t                                     drmFd,
-    VkDisplayKHR                                display);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDrmDisplayEXT(
-    VkPhysicalDevice                            physicalDevice,
-    int32_t                                     drmFd,
-    uint32_t                                    connectorId,
-    VkDisplayKHR*                               display);
-#endif
-
-
-#define VK_EXT_robustness2 1
-#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION  1
-#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2"
-typedef struct VkPhysicalDeviceRobustness2FeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           robustBufferAccess2;
-    VkBool32           robustImageAccess2;
-    VkBool32           nullDescriptor;
-} VkPhysicalDeviceRobustness2FeaturesEXT;
-
-typedef struct VkPhysicalDeviceRobustness2PropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkDeviceSize       robustStorageBufferAccessSizeAlignment;
-    VkDeviceSize       robustUniformBufferAccessSizeAlignment;
-} VkPhysicalDeviceRobustness2PropertiesEXT;
-
-
-
-#define VK_EXT_custom_border_color 1
-#define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12
-#define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color"
-typedef struct VkSamplerCustomBorderColorCreateInfoEXT {
-    VkStructureType      sType;
-    const void*          pNext;
-    VkClearColorValue    customBorderColor;
-    VkFormat             format;
-} VkSamplerCustomBorderColorCreateInfoEXT;
-
-typedef struct VkPhysicalDeviceCustomBorderColorPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxCustomBorderColorSamplers;
-} VkPhysicalDeviceCustomBorderColorPropertiesEXT;
-
-typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           customBorderColors;
-    VkBool32           customBorderColorWithoutFormat;
-} VkPhysicalDeviceCustomBorderColorFeaturesEXT;
-
-
-
-#define VK_GOOGLE_user_type 1
-#define VK_GOOGLE_USER_TYPE_SPEC_VERSION  1
-#define VK_GOOGLE_USER_TYPE_EXTENSION_NAME "VK_GOOGLE_user_type"
-
-
-#define VK_EXT_private_data 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlotEXT)
-#define VK_EXT_PRIVATE_DATA_SPEC_VERSION  1
-#define VK_EXT_PRIVATE_DATA_EXTENSION_NAME "VK_EXT_private_data"
-
-typedef enum VkPrivateDataSlotCreateFlagBitsEXT {
-    VK_PRIVATE_DATA_SLOT_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkPrivateDataSlotCreateFlagBitsEXT;
-typedef VkFlags VkPrivateDataSlotCreateFlagsEXT;
-typedef struct VkPhysicalDevicePrivateDataFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           privateData;
-} VkPhysicalDevicePrivateDataFeaturesEXT;
-
-typedef struct VkDevicePrivateDataCreateInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           privateDataSlotRequestCount;
-} VkDevicePrivateDataCreateInfoEXT;
-
-typedef struct VkPrivateDataSlotCreateInfoEXT {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkPrivateDataSlotCreateFlagsEXT    flags;
-} VkPrivateDataSlotCreateInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlotEXT)(VkDevice device, const VkPrivateDataSlotCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlotEXT* pPrivateDataSlot);
-typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlotEXT)(VkDevice device, VkPrivateDataSlotEXT privateDataSlot, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, uint64_t data);
-typedef void (VKAPI_PTR *PFN_vkGetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, uint64_t* pData);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT(
-    VkDevice                                    device,
-    const VkPrivateDataSlotCreateInfoEXT*       pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkPrivateDataSlotEXT*                       pPrivateDataSlot);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT(
-    VkDevice                                    device,
-    VkPrivateDataSlotEXT                        privateDataSlot,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT(
-    VkDevice                                    device,
-    VkObjectType                                objectType,
-    uint64_t                                    objectHandle,
-    VkPrivateDataSlotEXT                        privateDataSlot,
-    uint64_t                                    data);
-
-VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT(
-    VkDevice                                    device,
-    VkObjectType                                objectType,
-    uint64_t                                    objectHandle,
-    VkPrivateDataSlotEXT                        privateDataSlot,
-    uint64_t*                                   pData);
-#endif
-
-
-#define VK_EXT_pipeline_creation_cache_control 1
-#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION 3
-#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME "VK_EXT_pipeline_creation_cache_control"
-typedef struct VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           pipelineCreationCacheControl;
-} VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT;
-
-
-
-#define VK_NV_device_diagnostics_config 1
-#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 1
-#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME "VK_NV_device_diagnostics_config"
-
-typedef enum VkDeviceDiagnosticsConfigFlagBitsNV {
-    VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = 0x00000001,
-    VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = 0x00000002,
-    VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = 0x00000004,
-    VK_DEVICE_DIAGNOSTICS_CONFIG_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
-} VkDeviceDiagnosticsConfigFlagBitsNV;
-typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV;
-typedef struct VkPhysicalDeviceDiagnosticsConfigFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           diagnosticsConfig;
-} VkPhysicalDeviceDiagnosticsConfigFeaturesNV;
-
-typedef struct VkDeviceDiagnosticsConfigCreateInfoNV {
-    VkStructureType                     sType;
-    const void*                         pNext;
-    VkDeviceDiagnosticsConfigFlagsNV    flags;
-} VkDeviceDiagnosticsConfigCreateInfoNV;
-
-
-
-#define VK_QCOM_render_pass_store_ops 1
-#define VK_QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION 2
-#define VK_QCOM_RENDER_PASS_STORE_OPS_EXTENSION_NAME "VK_QCOM_render_pass_store_ops"
-
-
-#define VK_NV_fragment_shading_rate_enums 1
-#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION 1
-#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME "VK_NV_fragment_shading_rate_enums"
-
-typedef enum VkFragmentShadingRateTypeNV {
-    VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV = 0,
-    VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV = 1,
-    VK_FRAGMENT_SHADING_RATE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkFragmentShadingRateTypeNV;
-
-typedef enum VkFragmentShadingRateNV {
-    VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = 0,
-    VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = 1,
-    VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = 4,
-    VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = 5,
-    VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = 6,
-    VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = 9,
-    VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = 10,
-    VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = 11,
-    VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = 12,
-    VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = 13,
-    VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = 14,
-    VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV = 15,
-    VK_FRAGMENT_SHADING_RATE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkFragmentShadingRateNV;
-typedef struct VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           fragmentShadingRateEnums;
-    VkBool32           supersampleFragmentShadingRates;
-    VkBool32           noInvocationFragmentShadingRates;
-} VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV;
-
-typedef struct VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV {
-    VkStructureType          sType;
-    void*                    pNext;
-    VkSampleCountFlagBits    maxFragmentShadingRateInvocationCount;
-} VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV;
-
-typedef struct VkPipelineFragmentShadingRateEnumStateCreateInfoNV {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkFragmentShadingRateTypeNV           shadingRateType;
-    VkFragmentShadingRateNV               shadingRate;
-    VkFragmentShadingRateCombinerOpKHR    combinerOps[2];
-} VkPipelineFragmentShadingRateEnumStateCreateInfoNV;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateEnumNV)(VkCommandBuffer           commandBuffer, VkFragmentShadingRateNV                     shadingRate, const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV(
-    VkCommandBuffer                             commandBuffer,
-    VkFragmentShadingRateNV                     shadingRate,
-    const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
-#endif
-
-
-#define VK_NV_ray_tracing_motion_blur 1
-#define VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION 1
-#define VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME "VK_NV_ray_tracing_motion_blur"
-
-typedef enum VkAccelerationStructureMotionInstanceTypeNV {
-    VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV = 0,
-    VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV = 1,
-    VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV = 2,
-    VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF
-} VkAccelerationStructureMotionInstanceTypeNV;
-typedef VkFlags VkAccelerationStructureMotionInfoFlagsNV;
-typedef VkFlags VkAccelerationStructureMotionInstanceFlagsNV;
-typedef union VkDeviceOrHostAddressConstKHR {
-    VkDeviceAddress    deviceAddress;
-    const void*        hostAddress;
-} VkDeviceOrHostAddressConstKHR;
-
-typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkDeviceOrHostAddressConstKHR    vertexData;
-} VkAccelerationStructureGeometryMotionTrianglesDataNV;
-
-typedef struct VkAccelerationStructureMotionInfoNV {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    uint32_t                                    maxInstances;
-    VkAccelerationStructureMotionInfoFlagsNV    flags;
-} VkAccelerationStructureMotionInfoNV;
-
-typedef struct VkAccelerationStructureMatrixMotionInstanceNV {
-    VkTransformMatrixKHR          transformT0;
-    VkTransformMatrixKHR          transformT1;
-    uint32_t                      instanceCustomIndex:24;
-    uint32_t                      mask:8;
-    uint32_t                      instanceShaderBindingTableRecordOffset:24;
-    VkGeometryInstanceFlagsKHR    flags:8;
-    uint64_t                      accelerationStructureReference;
-} VkAccelerationStructureMatrixMotionInstanceNV;
-
-typedef struct VkSRTDataNV {
-    float    sx;
-    float    a;
-    float    b;
-    float    pvx;
-    float    sy;
-    float    c;
-    float    pvy;
-    float    sz;
-    float    pvz;
-    float    qx;
-    float    qy;
-    float    qz;
-    float    qw;
-    float    tx;
-    float    ty;
-    float    tz;
-} VkSRTDataNV;
-
-typedef struct VkAccelerationStructureSRTMotionInstanceNV {
-    VkSRTDataNV                   transformT0;
-    VkSRTDataNV                   transformT1;
-    uint32_t                      instanceCustomIndex:24;
-    uint32_t                      mask:8;
-    uint32_t                      instanceShaderBindingTableRecordOffset:24;
-    VkGeometryInstanceFlagsKHR    flags:8;
-    uint64_t                      accelerationStructureReference;
-} VkAccelerationStructureSRTMotionInstanceNV;
-
-typedef union VkAccelerationStructureMotionInstanceDataNV {
-    VkAccelerationStructureInstanceKHR               staticInstance;
-    VkAccelerationStructureMatrixMotionInstanceNV    matrixMotionInstance;
-    VkAccelerationStructureSRTMotionInstanceNV       srtMotionInstance;
-} VkAccelerationStructureMotionInstanceDataNV;
-
-typedef struct VkAccelerationStructureMotionInstanceNV {
-    VkAccelerationStructureMotionInstanceTypeNV     type;
-    VkAccelerationStructureMotionInstanceFlagsNV    flags;
-    VkAccelerationStructureMotionInstanceDataNV     data;
-} VkAccelerationStructureMotionInstanceNV;
-
-typedef struct VkPhysicalDeviceRayTracingMotionBlurFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           rayTracingMotionBlur;
-    VkBool32           rayTracingMotionBlurPipelineTraceRaysIndirect;
-} VkPhysicalDeviceRayTracingMotionBlurFeaturesNV;
-
-
-
-#define VK_EXT_ycbcr_2plane_444_formats 1
-#define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1
-#define VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME "VK_EXT_ycbcr_2plane_444_formats"
-typedef struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           ycbcr2plane444Formats;
-} VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
-
-
-
-#define VK_EXT_fragment_density_map2 1
-#define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1
-#define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2"
-typedef struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           fragmentDensityMapDeferred;
-} VkPhysicalDeviceFragmentDensityMap2FeaturesEXT;
-
-typedef struct VkPhysicalDeviceFragmentDensityMap2PropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           subsampledLoads;
-    VkBool32           subsampledCoarseReconstructionEarlyAccess;
-    uint32_t           maxSubsampledArrayLayers;
-    uint32_t           maxDescriptorSetSubsampledSamplers;
-} VkPhysicalDeviceFragmentDensityMap2PropertiesEXT;
-
-
-
-#define VK_QCOM_rotated_copy_commands 1
-#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 1
-#define VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME "VK_QCOM_rotated_copy_commands"
-typedef struct VkCopyCommandTransformInfoQCOM {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkSurfaceTransformFlagBitsKHR    transform;
-} VkCopyCommandTransformInfoQCOM;
-
-
-
-#define VK_EXT_image_robustness 1
-#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1
-#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness"
-typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           robustImageAccess;
-} VkPhysicalDeviceImageRobustnessFeaturesEXT;
-
-
-
-#define VK_EXT_4444_formats 1
-#define VK_EXT_4444_FORMATS_SPEC_VERSION  1
-#define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats"
-typedef struct VkPhysicalDevice4444FormatsFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           formatA4R4G4B4;
-    VkBool32           formatA4B4G4R4;
-} VkPhysicalDevice4444FormatsFeaturesEXT;
-
-
-
-#define VK_EXT_rgba10x6_formats 1
-#define VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION 1
-#define VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME "VK_EXT_rgba10x6_formats"
-typedef struct VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           formatRgba10x6WithoutYCbCrSampler;
-} VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT;
-
-
-
-#define VK_NV_acquire_winrt_display 1
-#define VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION 1
-#define VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME "VK_NV_acquire_winrt_display"
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireWinrtDisplayNV)(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
-typedef VkResult (VKAPI_PTR *PFN_vkGetWinrtDisplayNV)(VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR* pDisplay);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireWinrtDisplayNV(
-    VkPhysicalDevice                            physicalDevice,
-    VkDisplayKHR                                display);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetWinrtDisplayNV(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    deviceRelativeId,
-    VkDisplayKHR*                               pDisplay);
-#endif
-
-
-#define VK_VALVE_mutable_descriptor_type 1
-#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1
-#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_VALVE_mutable_descriptor_type"
-typedef struct VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           mutableDescriptorType;
-} VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE;
-
-typedef struct VkMutableDescriptorTypeListVALVE {
-    uint32_t                   descriptorTypeCount;
-    const VkDescriptorType*    pDescriptorTypes;
-} VkMutableDescriptorTypeListVALVE;
-
-typedef struct VkMutableDescriptorTypeCreateInfoVALVE {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    uint32_t                                   mutableDescriptorTypeListCount;
-    const VkMutableDescriptorTypeListVALVE*    pMutableDescriptorTypeLists;
-} VkMutableDescriptorTypeCreateInfoVALVE;
-
-
-
-#define VK_EXT_vertex_input_dynamic_state 1
-#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2
-#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state"
-typedef struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           vertexInputDynamicState;
-} VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT;
-
-typedef struct VkVertexInputBindingDescription2EXT {
-    VkStructureType      sType;
-    void*                pNext;
-    uint32_t             binding;
-    uint32_t             stride;
-    VkVertexInputRate    inputRate;
-    uint32_t             divisor;
-} VkVertexInputBindingDescription2EXT;
-
-typedef struct VkVertexInputAttributeDescription2EXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           location;
-    uint32_t           binding;
-    VkFormat           format;
-    uint32_t           offset;
-} VkVertexInputAttributeDescription2EXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetVertexInputEXT)(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    vertexBindingDescriptionCount,
-    const VkVertexInputBindingDescription2EXT*  pVertexBindingDescriptions,
-    uint32_t                                    vertexAttributeDescriptionCount,
-    const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
-#endif
-
-
-#define VK_EXT_physical_device_drm 1
-#define VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION 1
-#define VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME "VK_EXT_physical_device_drm"
-typedef struct VkPhysicalDeviceDrmPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           hasPrimary;
-    VkBool32           hasRender;
-    int64_t            primaryMajor;
-    int64_t            primaryMinor;
-    int64_t            renderMajor;
-    int64_t            renderMinor;
-} VkPhysicalDeviceDrmPropertiesEXT;
-
-
-
-#define VK_EXT_primitive_topology_list_restart 1
-#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION 1
-#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME "VK_EXT_primitive_topology_list_restart"
-typedef struct VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           primitiveTopologyListRestart;
-    VkBool32           primitiveTopologyPatchListRestart;
-} VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT;
-
-
-
-#define VK_HUAWEI_subpass_shading 1
-#define VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION 2
-#define VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME "VK_HUAWEI_subpass_shading"
-typedef struct VkSubpassShadingPipelineCreateInfoHUAWEI {
-    VkStructureType    sType;
-    void*              pNext;
-    VkRenderPass       renderPass;
-    uint32_t           subpass;
-} VkSubpassShadingPipelineCreateInfoHUAWEI;
-
-typedef struct VkPhysicalDeviceSubpassShadingFeaturesHUAWEI {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           subpassShading;
-} VkPhysicalDeviceSubpassShadingFeaturesHUAWEI;
-
-typedef struct VkPhysicalDeviceSubpassShadingPropertiesHUAWEI {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxSubpassShadingWorkgroupSizeAspectRatio;
-} VkPhysicalDeviceSubpassShadingPropertiesHUAWEI;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)(VkDevice device, VkRenderPass renderpass, VkExtent2D* pMaxWorkgroupSize);
-typedef void (VKAPI_PTR *PFN_vkCmdSubpassShadingHUAWEI)(VkCommandBuffer commandBuffer);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
-    VkDevice                                    device,
-    VkRenderPass                                renderpass,
-    VkExtent2D*                                 pMaxWorkgroupSize);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSubpassShadingHUAWEI(
-    VkCommandBuffer                             commandBuffer);
-#endif
-
-
-#define VK_HUAWEI_invocation_mask 1
-#define VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION 1
-#define VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME "VK_HUAWEI_invocation_mask"
-typedef struct VkPhysicalDeviceInvocationMaskFeaturesHUAWEI {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           invocationMask;
-} VkPhysicalDeviceInvocationMaskFeaturesHUAWEI;
-
-typedef void (VKAPI_PTR *PFN_vkCmdBindInvocationMaskHUAWEI)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdBindInvocationMaskHUAWEI(
-    VkCommandBuffer                             commandBuffer,
-    VkImageView                                 imageView,
-    VkImageLayout                               imageLayout);
-#endif
-
-
-#define VK_NV_external_memory_rdma 1
-typedef void* VkRemoteAddressNV;
-#define VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION 1
-#define VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME "VK_NV_external_memory_rdma"
-typedef struct VkMemoryGetRemoteAddressInfoNV {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkDeviceMemory                        memory;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-} VkMemoryGetRemoteAddressInfoNV;
-
-typedef struct VkPhysicalDeviceExternalMemoryRDMAFeaturesNV {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           externalMemoryRDMA;
-} VkPhysicalDeviceExternalMemoryRDMAFeaturesNV;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryRemoteAddressNV)(VkDevice device, const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, VkRemoteAddressNV* pAddress);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryRemoteAddressNV(
-    VkDevice                                    device,
-    const VkMemoryGetRemoteAddressInfoNV*       pMemoryGetRemoteAddressInfo,
-    VkRemoteAddressNV*                          pAddress);
-#endif
-
-
-#define VK_EXT_extended_dynamic_state2 1
-#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1
-#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2"
-typedef struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           extendedDynamicState2;
-    VkBool32           extendedDynamicState2LogicOp;
-    VkBool32           extendedDynamicState2PatchControlPoints;
-} VkPhysicalDeviceExtendedDynamicState2FeaturesEXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdSetPatchControlPointsEXT)(VkCommandBuffer commandBuffer, uint32_t patchControlPoints);
-typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable);
-typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable);
-typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEXT)(VkCommandBuffer commandBuffer, VkLogicOp logicOp);
-typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    patchControlPoints);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkBool32                                    rasterizerDiscardEnable);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkBool32                                    depthBiasEnable);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkLogicOp                                   logicOp);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT(
-    VkCommandBuffer                             commandBuffer,
-    VkBool32                                    primitiveRestartEnable);
-#endif
-
-
-#define VK_EXT_color_write_enable 1
-#define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1
-#define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable"
-typedef struct VkPhysicalDeviceColorWriteEnableFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           colorWriteEnable;
-} VkPhysicalDeviceColorWriteEnableFeaturesEXT;
-
-typedef struct VkPipelineColorWriteCreateInfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           attachmentCount;
-    const VkBool32*    pColorWriteEnables;
-} VkPipelineColorWriteCreateInfoEXT;
-
-typedef void                                    (VKAPI_PTR *PFN_vkCmdSetColorWriteEnableEXT)(VkCommandBuffer       commandBuffer, uint32_t                                attachmentCount, const VkBool32*   pColorWriteEnables);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void                                    VKAPI_CALL vkCmdSetColorWriteEnableEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    attachmentCount,
-    const VkBool32*                             pColorWriteEnables);
-#endif
-
-
-#define VK_EXT_global_priority_query 1
-#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT   16U
-#define VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION 1
-#define VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME "VK_EXT_global_priority_query"
-typedef struct VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           globalPriorityQuery;
-} VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT;
-
-typedef struct VkQueueFamilyGlobalPriorityPropertiesEXT {
-    VkStructureType             sType;
-    void*                       pNext;
-    uint32_t                    priorityCount;
-    VkQueueGlobalPriorityEXT    priorities[VK_MAX_GLOBAL_PRIORITY_SIZE_EXT];
-} VkQueueFamilyGlobalPriorityPropertiesEXT;
-
-
-
-#define VK_EXT_multi_draw 1
-#define VK_EXT_MULTI_DRAW_SPEC_VERSION    1
-#define VK_EXT_MULTI_DRAW_EXTENSION_NAME  "VK_EXT_multi_draw"
-typedef struct VkPhysicalDeviceMultiDrawFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           multiDraw;
-} VkPhysicalDeviceMultiDrawFeaturesEXT;
-
-typedef struct VkPhysicalDeviceMultiDrawPropertiesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           maxMultiDrawCount;
-} VkPhysicalDeviceMultiDrawPropertiesEXT;
-
-typedef struct VkMultiDrawInfoEXT {
-    uint32_t    firstVertex;
-    uint32_t    vertexCount;
-} VkMultiDrawInfoEXT;
-
-typedef struct VkMultiDrawIndexedInfoEXT {
-    uint32_t    firstIndex;
-    uint32_t    indexCount;
-    int32_t     vertexOffset;
-} VkMultiDrawIndexedInfoEXT;
-
-typedef void (VKAPI_PTR *PFN_vkCmdDrawMultiEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdDrawMultiIndexedEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    drawCount,
-    const VkMultiDrawInfoEXT*                   pVertexInfo,
-    uint32_t                                    instanceCount,
-    uint32_t                                    firstInstance,
-    uint32_t                                    stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiIndexedEXT(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    drawCount,
-    const VkMultiDrawIndexedInfoEXT*            pIndexInfo,
-    uint32_t                                    instanceCount,
-    uint32_t                                    firstInstance,
-    uint32_t                                    stride,
-    const int32_t*                              pVertexOffset);
-#endif
-
-
-#define VK_EXT_load_store_op_none 1
-#define VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION 1
-#define VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_EXT_load_store_op_none"
-
-
-#define VK_EXT_border_color_swizzle 1
-#define VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION 1
-#define VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME "VK_EXT_border_color_swizzle"
-typedef struct VkPhysicalDeviceBorderColorSwizzleFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           borderColorSwizzle;
-    VkBool32           borderColorSwizzleFromImage;
-} VkPhysicalDeviceBorderColorSwizzleFeaturesEXT;
-
-typedef struct VkSamplerBorderColorComponentMappingCreateInfoEXT {
-    VkStructureType       sType;
-    const void*           pNext;
-    VkComponentMapping    components;
-    VkBool32              srgb;
-} VkSamplerBorderColorComponentMappingCreateInfoEXT;
-
-
-
-#define VK_EXT_pageable_device_local_memory 1
-#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION 1
-#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME "VK_EXT_pageable_device_local_memory"
-typedef struct VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           pageableDeviceLocalMemory;
-} VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
-
-typedef void (VKAPI_PTR *PFN_vkSetDeviceMemoryPriorityEXT)(VkDevice       device, VkDeviceMemory memory, float          priority);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkSetDeviceMemoryPriorityEXT(
-    VkDevice                                    device,
-    VkDeviceMemory                              memory,
-    float                                       priority);
-#endif
-
-
-#define VK_KHR_acceleration_structure 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR)
-#define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13
-#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure"
-
-typedef enum VkBuildAccelerationStructureModeKHR {
-    VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR = 0,
-    VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR = 1,
-    VK_BUILD_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkBuildAccelerationStructureModeKHR;
-
-typedef enum VkAccelerationStructureBuildTypeKHR {
-    VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0,
-    VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1,
-    VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2,
-    VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkAccelerationStructureBuildTypeKHR;
-
-typedef enum VkAccelerationStructureCompatibilityKHR {
-    VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR = 0,
-    VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR = 1,
-    VK_ACCELERATION_STRUCTURE_COMPATIBILITY_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkAccelerationStructureCompatibilityKHR;
-
-typedef enum VkAccelerationStructureCreateFlagBitsKHR {
-    VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = 0x00000001,
-    VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV = 0x00000004,
-    VK_ACCELERATION_STRUCTURE_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkAccelerationStructureCreateFlagBitsKHR;
-typedef VkFlags VkAccelerationStructureCreateFlagsKHR;
-typedef union VkDeviceOrHostAddressKHR {
-    VkDeviceAddress    deviceAddress;
-    void*              hostAddress;
-} VkDeviceOrHostAddressKHR;
-
-typedef struct VkAccelerationStructureBuildRangeInfoKHR {
-    uint32_t    primitiveCount;
-    uint32_t    primitiveOffset;
-    uint32_t    firstVertex;
-    uint32_t    transformOffset;
-} VkAccelerationStructureBuildRangeInfoKHR;
-
-typedef struct VkAccelerationStructureGeometryTrianglesDataKHR {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkFormat                         vertexFormat;
-    VkDeviceOrHostAddressConstKHR    vertexData;
-    VkDeviceSize                     vertexStride;
-    uint32_t                         maxVertex;
-    VkIndexType                      indexType;
-    VkDeviceOrHostAddressConstKHR    indexData;
-    VkDeviceOrHostAddressConstKHR    transformData;
-} VkAccelerationStructureGeometryTrianglesDataKHR;
-
-typedef struct VkAccelerationStructureGeometryAabbsDataKHR {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkDeviceOrHostAddressConstKHR    data;
-    VkDeviceSize                     stride;
-} VkAccelerationStructureGeometryAabbsDataKHR;
-
-typedef struct VkAccelerationStructureGeometryInstancesDataKHR {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkBool32                         arrayOfPointers;
-    VkDeviceOrHostAddressConstKHR    data;
-} VkAccelerationStructureGeometryInstancesDataKHR;
-
-typedef union VkAccelerationStructureGeometryDataKHR {
-    VkAccelerationStructureGeometryTrianglesDataKHR    triangles;
-    VkAccelerationStructureGeometryAabbsDataKHR        aabbs;
-    VkAccelerationStructureGeometryInstancesDataKHR    instances;
-} VkAccelerationStructureGeometryDataKHR;
-
-typedef struct VkAccelerationStructureGeometryKHR {
-    VkStructureType                           sType;
-    const void*                               pNext;
-    VkGeometryTypeKHR                         geometryType;
-    VkAccelerationStructureGeometryDataKHR    geometry;
-    VkGeometryFlagsKHR                        flags;
-} VkAccelerationStructureGeometryKHR;
-
-typedef struct VkAccelerationStructureBuildGeometryInfoKHR {
-    VkStructureType                                     sType;
-    const void*                                         pNext;
-    VkAccelerationStructureTypeKHR                      type;
-    VkBuildAccelerationStructureFlagsKHR                flags;
-    VkBuildAccelerationStructureModeKHR                 mode;
-    VkAccelerationStructureKHR                          srcAccelerationStructure;
-    VkAccelerationStructureKHR                          dstAccelerationStructure;
-    uint32_t                                            geometryCount;
-    const VkAccelerationStructureGeometryKHR*           pGeometries;
-    const VkAccelerationStructureGeometryKHR* const*    ppGeometries;
-    VkDeviceOrHostAddressKHR                            scratchData;
-} VkAccelerationStructureBuildGeometryInfoKHR;
-
-typedef struct VkAccelerationStructureCreateInfoKHR {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkAccelerationStructureCreateFlagsKHR    createFlags;
-    VkBuffer                                 buffer;
-    VkDeviceSize                             offset;
-    VkDeviceSize                             size;
-    VkAccelerationStructureTypeKHR           type;
-    VkDeviceAddress                          deviceAddress;
-} VkAccelerationStructureCreateInfoKHR;
-
-typedef struct VkWriteDescriptorSetAccelerationStructureKHR {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    uint32_t                             accelerationStructureCount;
-    const VkAccelerationStructureKHR*    pAccelerationStructures;
-} VkWriteDescriptorSetAccelerationStructureKHR;
-
-typedef struct VkPhysicalDeviceAccelerationStructureFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           accelerationStructure;
-    VkBool32           accelerationStructureCaptureReplay;
-    VkBool32           accelerationStructureIndirectBuild;
-    VkBool32           accelerationStructureHostCommands;
-    VkBool32           descriptorBindingAccelerationStructureUpdateAfterBind;
-} VkPhysicalDeviceAccelerationStructureFeaturesKHR;
-
-typedef struct VkPhysicalDeviceAccelerationStructurePropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    uint64_t           maxGeometryCount;
-    uint64_t           maxInstanceCount;
-    uint64_t           maxPrimitiveCount;
-    uint32_t           maxPerStageDescriptorAccelerationStructures;
-    uint32_t           maxPerStageDescriptorUpdateAfterBindAccelerationStructures;
-    uint32_t           maxDescriptorSetAccelerationStructures;
-    uint32_t           maxDescriptorSetUpdateAfterBindAccelerationStructures;
-    uint32_t           minAccelerationStructureScratchOffsetAlignment;
-} VkPhysicalDeviceAccelerationStructurePropertiesKHR;
-
-typedef struct VkAccelerationStructureDeviceAddressInfoKHR {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkAccelerationStructureKHR    accelerationStructure;
-} VkAccelerationStructureDeviceAddressInfoKHR;
-
-typedef struct VkAccelerationStructureVersionInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    const uint8_t*     pVersionData;
-} VkAccelerationStructureVersionInfoKHR;
-
-typedef struct VkCopyAccelerationStructureToMemoryInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkAccelerationStructureKHR            src;
-    VkDeviceOrHostAddressKHR              dst;
-    VkCopyAccelerationStructureModeKHR    mode;
-} VkCopyAccelerationStructureToMemoryInfoKHR;
-
-typedef struct VkCopyMemoryToAccelerationStructureInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkDeviceOrHostAddressConstKHR         src;
-    VkAccelerationStructureKHR            dst;
-    VkCopyAccelerationStructureModeKHR    mode;
-} VkCopyMemoryToAccelerationStructureInfoKHR;
-
-typedef struct VkCopyAccelerationStructureInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkAccelerationStructureKHR            src;
-    VkAccelerationStructureKHR            dst;
-    VkCopyAccelerationStructureModeKHR    mode;
-} VkCopyAccelerationStructureInfoKHR;
-
-typedef struct VkAccelerationStructureBuildSizesInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    VkDeviceSize       accelerationStructureSize;
-    VkDeviceSize       updateScratchSize;
-    VkDeviceSize       buildScratchSize;
-} VkAccelerationStructureBuildSizesInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureKHR)(VkDevice                                           device, const VkAccelerationStructureCreateInfoKHR*        pCreateInfo, const VkAllocationCallbacks*       pAllocator, VkAccelerationStructureKHR*                        pAccelerationStructure);
-typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureKHR)(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator);
-typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresKHR)(VkCommandBuffer                                    commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos);
-typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresIndirectKHR)(VkCommandBuffer                  commandBuffer, uint32_t                                           infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkDeviceAddress*             pIndirectDeviceAddresses, const uint32_t*                    pIndirectStrides, const uint32_t* const*             ppMaxPrimitiveCounts);
-typedef VkResult (VKAPI_PTR *PFN_vkBuildAccelerationStructuresKHR)(VkDevice                                           device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos);
-typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureInfoKHR* pInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureToMemoryKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkWriteAccelerationStructuresPropertiesKHR)(VkDevice device, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType  queryType, size_t       dataSize, void* pData, size_t stride);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureToMemoryKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo);
-typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetAccelerationStructureDeviceAddressKHR)(VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR* pInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery);
-typedef void (VKAPI_PTR *PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)(VkDevice device, const VkAccelerationStructureVersionInfoKHR* pVersionInfo, VkAccelerationStructureCompatibilityKHR* pCompatibility);
-typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureBuildSizesKHR)(VkDevice                                            device, VkAccelerationStructureBuildTypeKHR                 buildType, const VkAccelerationStructureBuildGeometryInfoKHR*  pBuildInfo, const uint32_t*  pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR*           pSizeInfo);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR(
-    VkDevice                                    device,
-    const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkAccelerationStructureKHR*                 pAccelerationStructure);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureKHR(
-    VkDevice                                    device,
-    VkAccelerationStructureKHR                  accelerationStructure,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresKHR(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    infoCount,
-    const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
-    const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresIndirectKHR(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    infoCount,
-    const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
-    const VkDeviceAddress*                      pIndirectDeviceAddresses,
-    const uint32_t*                             pIndirectStrides,
-    const uint32_t* const*                      ppMaxPrimitiveCounts);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkBuildAccelerationStructuresKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      deferredOperation,
-    uint32_t                                    infoCount,
-    const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
-    const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      deferredOperation,
-    const VkCopyAccelerationStructureInfoKHR*   pInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureToMemoryKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      deferredOperation,
-    const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToAccelerationStructureKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      deferredOperation,
-    const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkWriteAccelerationStructuresPropertiesKHR(
-    VkDevice                                    device,
-    uint32_t                                    accelerationStructureCount,
-    const VkAccelerationStructureKHR*           pAccelerationStructures,
-    VkQueryType                                 queryType,
-    size_t                                      dataSize,
-    void*                                       pData,
-    size_t                                      stride);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkCopyAccelerationStructureInfoKHR*   pInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureToMemoryKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToAccelerationStructureKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo);
-
-VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetAccelerationStructureDeviceAddressKHR(
-    VkDevice                                    device,
-    const VkAccelerationStructureDeviceAddressInfoKHR* pInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesKHR(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    accelerationStructureCount,
-    const VkAccelerationStructureKHR*           pAccelerationStructures,
-    VkQueryType                                 queryType,
-    VkQueryPool                                 queryPool,
-    uint32_t                                    firstQuery);
-
-VKAPI_ATTR void VKAPI_CALL vkGetDeviceAccelerationStructureCompatibilityKHR(
-    VkDevice                                    device,
-    const VkAccelerationStructureVersionInfoKHR* pVersionInfo,
-    VkAccelerationStructureCompatibilityKHR*    pCompatibility);
-
-VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureBuildSizesKHR(
-    VkDevice                                    device,
-    VkAccelerationStructureBuildTypeKHR         buildType,
-    const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo,
-    const uint32_t*                             pMaxPrimitiveCounts,
-    VkAccelerationStructureBuildSizesInfoKHR*   pSizeInfo);
-#endif
-
-
-#define VK_KHR_ray_tracing_pipeline 1
-#define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1
-#define VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME "VK_KHR_ray_tracing_pipeline"
-
-typedef enum VkShaderGroupShaderKHR {
-    VK_SHADER_GROUP_SHADER_GENERAL_KHR = 0,
-    VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR = 1,
-    VK_SHADER_GROUP_SHADER_ANY_HIT_KHR = 2,
-    VK_SHADER_GROUP_SHADER_INTERSECTION_KHR = 3,
-    VK_SHADER_GROUP_SHADER_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkShaderGroupShaderKHR;
-typedef struct VkRayTracingShaderGroupCreateInfoKHR {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkRayTracingShaderGroupTypeKHR    type;
-    uint32_t                          generalShader;
-    uint32_t                          closestHitShader;
-    uint32_t                          anyHitShader;
-    uint32_t                          intersectionShader;
-    const void*                       pShaderGroupCaptureReplayHandle;
-} VkRayTracingShaderGroupCreateInfoKHR;
-
-typedef struct VkRayTracingPipelineInterfaceCreateInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           maxPipelineRayPayloadSize;
-    uint32_t           maxPipelineRayHitAttributeSize;
-} VkRayTracingPipelineInterfaceCreateInfoKHR;
-
-typedef struct VkRayTracingPipelineCreateInfoKHR {
-    VkStructureType                                      sType;
-    const void*                                          pNext;
-    VkPipelineCreateFlags                                flags;
-    uint32_t                                             stageCount;
-    const VkPipelineShaderStageCreateInfo*               pStages;
-    uint32_t                                             groupCount;
-    const VkRayTracingShaderGroupCreateInfoKHR*          pGroups;
-    uint32_t                                             maxPipelineRayRecursionDepth;
-    const VkPipelineLibraryCreateInfoKHR*                pLibraryInfo;
-    const VkRayTracingPipelineInterfaceCreateInfoKHR*    pLibraryInterface;
-    const VkPipelineDynamicStateCreateInfo*              pDynamicState;
-    VkPipelineLayout                                     layout;
-    VkPipeline                                           basePipelineHandle;
-    int32_t                                              basePipelineIndex;
-} VkRayTracingPipelineCreateInfoKHR;
-
-typedef struct VkPhysicalDeviceRayTracingPipelineFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           rayTracingPipeline;
-    VkBool32           rayTracingPipelineShaderGroupHandleCaptureReplay;
-    VkBool32           rayTracingPipelineShaderGroupHandleCaptureReplayMixed;
-    VkBool32           rayTracingPipelineTraceRaysIndirect;
-    VkBool32           rayTraversalPrimitiveCulling;
-} VkPhysicalDeviceRayTracingPipelineFeaturesKHR;
-
-typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           shaderGroupHandleSize;
-    uint32_t           maxRayRecursionDepth;
-    uint32_t           maxShaderGroupStride;
-    uint32_t           shaderGroupBaseAlignment;
-    uint32_t           shaderGroupHandleCaptureReplaySize;
-    uint32_t           maxRayDispatchInvocationCount;
-    uint32_t           shaderGroupHandleAlignment;
-    uint32_t           maxRayHitAttributeSize;
-} VkPhysicalDeviceRayTracingPipelinePropertiesKHR;
-
-typedef struct VkStridedDeviceAddressRegionKHR {
-    VkDeviceAddress    deviceAddress;
-    VkDeviceSize       stride;
-    VkDeviceSize       size;
-} VkStridedDeviceAddressRegionKHR;
-
-typedef struct VkTraceRaysIndirectCommandKHR {
-    uint32_t    width;
-    uint32_t    height;
-    uint32_t    depth;
-} VkTraceRaysIndirectCommandKHR;
-
-typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth);
-typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
-typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData);
-typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirectKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress);
-typedef VkDeviceSize (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupStackSizeKHR)(VkDevice device, VkPipeline pipeline, uint32_t group, VkShaderGroupShaderKHR groupShader);
-typedef void (VKAPI_PTR *PFN_vkCmdSetRayTracingPipelineStackSizeKHR)(VkCommandBuffer commandBuffer, uint32_t pipelineStackSize);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkStridedDeviceAddressRegionKHR*      pRaygenShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR*      pMissShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR*      pHitShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR*      pCallableShaderBindingTable,
-    uint32_t                                    width,
-    uint32_t                                    height,
-    uint32_t                                    depth);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesKHR(
-    VkDevice                                    device,
-    VkDeferredOperationKHR                      deferredOperation,
-    VkPipelineCache                             pipelineCache,
-    uint32_t                                    createInfoCount,
-    const VkRayTracingPipelineCreateInfoKHR*    pCreateInfos,
-    const VkAllocationCallbacks*                pAllocator,
-    VkPipeline*                                 pPipelines);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingCaptureReplayShaderGroupHandlesKHR(
-    VkDevice                                    device,
-    VkPipeline                                  pipeline,
-    uint32_t                                    firstGroup,
-    uint32_t                                    groupCount,
-    size_t                                      dataSize,
-    void*                                       pData);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirectKHR(
-    VkCommandBuffer                             commandBuffer,
-    const VkStridedDeviceAddressRegionKHR*      pRaygenShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR*      pMissShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR*      pHitShaderBindingTable,
-    const VkStridedDeviceAddressRegionKHR*      pCallableShaderBindingTable,
-    VkDeviceAddress                             indirectDeviceAddress);
-
-VKAPI_ATTR VkDeviceSize VKAPI_CALL vkGetRayTracingShaderGroupStackSizeKHR(
-    VkDevice                                    device,
-    VkPipeline                                  pipeline,
-    uint32_t                                    group,
-    VkShaderGroupShaderKHR                      groupShader);
-
-VKAPI_ATTR void VKAPI_CALL vkCmdSetRayTracingPipelineStackSizeKHR(
-    VkCommandBuffer                             commandBuffer,
-    uint32_t                                    pipelineStackSize);
-#endif
-
-
-#define VK_KHR_ray_query 1
-#define VK_KHR_RAY_QUERY_SPEC_VERSION     1
-#define VK_KHR_RAY_QUERY_EXTENSION_NAME   "VK_KHR_ray_query"
-typedef struct VkPhysicalDeviceRayQueryFeaturesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           rayQuery;
-} VkPhysicalDeviceRayQueryFeaturesKHR;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_directfb.h b/common/vulkan/include/vulkan/vulkan_directfb.h
deleted file mode 100644
index 8eaac6e..0000000
--- a/common/vulkan/include/vulkan/vulkan_directfb.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef VULKAN_DIRECTFB_H_
-#define VULKAN_DIRECTFB_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_EXT_directfb_surface 1
-#define VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION 1
-#define VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME "VK_EXT_directfb_surface"
-typedef VkFlags VkDirectFBSurfaceCreateFlagsEXT;
-typedef struct VkDirectFBSurfaceCreateInfoEXT {
-    VkStructureType                    sType;
-    const void*                        pNext;
-    VkDirectFBSurfaceCreateFlagsEXT    flags;
-    IDirectFB*                         dfb;
-    IDirectFBSurface*                  surface;
-} VkDirectFBSurfaceCreateInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateDirectFBSurfaceEXT)(VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT(
-    VkInstance                                  instance,
-    const VkDirectFBSurfaceCreateInfoEXT*       pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex,
-    IDirectFB*                                  dfb);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_fuchsia.h b/common/vulkan/include/vulkan/vulkan_fuchsia.h
deleted file mode 100644
index 44b4ace..0000000
--- a/common/vulkan/include/vulkan/vulkan_fuchsia.h
+++ /dev/null
@@ -1,258 +0,0 @@
-#ifndef VULKAN_FUCHSIA_H_
-#define VULKAN_FUCHSIA_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_FUCHSIA_imagepipe_surface 1
-#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1
-#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface"
-typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA;
-typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA {
-    VkStructureType                         sType;
-    const void*                             pNext;
-    VkImagePipeSurfaceCreateFlagsFUCHSIA    flags;
-    zx_handle_t                             imagePipeHandle;
-} VkImagePipeSurfaceCreateInfoFUCHSIA;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(
-    VkInstance                                  instance,
-    const VkImagePipeSurfaceCreateInfoFUCHSIA*  pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-
-#define VK_FUCHSIA_external_memory 1
-#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1
-#define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory"
-typedef struct VkImportMemoryZirconHandleInfoFUCHSIA {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-    zx_handle_t                           handle;
-} VkImportMemoryZirconHandleInfoFUCHSIA;
-
-typedef struct VkMemoryZirconHandlePropertiesFUCHSIA {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           memoryTypeBits;
-} VkMemoryZirconHandlePropertiesFUCHSIA;
-
-typedef struct VkMemoryGetZirconHandleInfoFUCHSIA {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkDeviceMemory                        memory;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-} VkMemoryGetZirconHandleInfoFUCHSIA;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle);
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA(
-    VkDevice                                    device,
-    const VkMemoryGetZirconHandleInfoFUCHSIA*   pGetZirconHandleInfo,
-    zx_handle_t*                                pZirconHandle);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA(
-    VkDevice                                    device,
-    VkExternalMemoryHandleTypeFlagBits          handleType,
-    zx_handle_t                                 zirconHandle,
-    VkMemoryZirconHandlePropertiesFUCHSIA*      pMemoryZirconHandleProperties);
-#endif
-
-
-#define VK_FUCHSIA_external_semaphore 1
-#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
-#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore"
-typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkSemaphore                              semaphore;
-    VkSemaphoreImportFlags                   flags;
-    VkExternalSemaphoreHandleTypeFlagBits    handleType;
-    zx_handle_t                              zirconHandle;
-} VkImportSemaphoreZirconHandleInfoFUCHSIA;
-
-typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkSemaphore                              semaphore;
-    VkExternalSemaphoreHandleTypeFlagBits    handleType;
-} VkSemaphoreGetZirconHandleInfoFUCHSIA;
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
-    VkDevice                                    device,
-    const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA(
-    VkDevice                                    device,
-    const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
-    zx_handle_t*                                pZirconHandle);
-#endif
-
-
-#define VK_FUCHSIA_buffer_collection 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA)
-#define VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION 2
-#define VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME "VK_FUCHSIA_buffer_collection"
-typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIA;
-
-typedef enum VkImageConstraintsInfoFlagBitsFUCHSIA {
-    VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA = 0x00000001,
-    VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA = 0x00000002,
-    VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA = 0x00000004,
-    VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA = 0x00000008,
-    VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA = 0x00000010,
-    VK_IMAGE_CONSTRAINTS_INFO_FLAG_BITS_MAX_ENUM_FUCHSIA = 0x7FFFFFFF
-} VkImageConstraintsInfoFlagBitsFUCHSIA;
-typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIA;
-typedef struct VkBufferCollectionCreateInfoFUCHSIA {
-    VkStructureType    sType;
-    const void*        pNext;
-    zx_handle_t        collectionToken;
-} VkBufferCollectionCreateInfoFUCHSIA;
-
-typedef struct VkImportMemoryBufferCollectionFUCHSIA {
-    VkStructureType              sType;
-    const void*                  pNext;
-    VkBufferCollectionFUCHSIA    collection;
-    uint32_t                     index;
-} VkImportMemoryBufferCollectionFUCHSIA;
-
-typedef struct VkBufferCollectionImageCreateInfoFUCHSIA {
-    VkStructureType              sType;
-    const void*                  pNext;
-    VkBufferCollectionFUCHSIA    collection;
-    uint32_t                     index;
-} VkBufferCollectionImageCreateInfoFUCHSIA;
-
-typedef struct VkBufferCollectionConstraintsInfoFUCHSIA {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           minBufferCount;
-    uint32_t           maxBufferCount;
-    uint32_t           minBufferCountForCamping;
-    uint32_t           minBufferCountForDedicatedSlack;
-    uint32_t           minBufferCountForSharedSlack;
-} VkBufferCollectionConstraintsInfoFUCHSIA;
-
-typedef struct VkBufferConstraintsInfoFUCHSIA {
-    VkStructureType                             sType;
-    const void*                                 pNext;
-    VkBufferCreateInfo                          createInfo;
-    VkFormatFeatureFlags                        requiredFormatFeatures;
-    VkBufferCollectionConstraintsInfoFUCHSIA    bufferCollectionConstraints;
-} VkBufferConstraintsInfoFUCHSIA;
-
-typedef struct VkBufferCollectionBufferCreateInfoFUCHSIA {
-    VkStructureType              sType;
-    const void*                  pNext;
-    VkBufferCollectionFUCHSIA    collection;
-    uint32_t                     index;
-} VkBufferCollectionBufferCreateInfoFUCHSIA;
-
-typedef struct VkSysmemColorSpaceFUCHSIA {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           colorSpace;
-} VkSysmemColorSpaceFUCHSIA;
-
-typedef struct VkBufferCollectionPropertiesFUCHSIA {
-    VkStructureType                  sType;
-    void*                            pNext;
-    uint32_t                         memoryTypeBits;
-    uint32_t                         bufferCount;
-    uint32_t                         createInfoIndex;
-    uint64_t                         sysmemPixelFormat;
-    VkFormatFeatureFlags             formatFeatures;
-    VkSysmemColorSpaceFUCHSIA        sysmemColorSpaceIndex;
-    VkComponentMapping               samplerYcbcrConversionComponents;
-    VkSamplerYcbcrModelConversion    suggestedYcbcrModel;
-    VkSamplerYcbcrRange              suggestedYcbcrRange;
-    VkChromaLocation                 suggestedXChromaOffset;
-    VkChromaLocation                 suggestedYChromaOffset;
-} VkBufferCollectionPropertiesFUCHSIA;
-
-typedef struct VkImageFormatConstraintsInfoFUCHSIA {
-    VkStructureType                         sType;
-    const void*                             pNext;
-    VkImageCreateInfo                       imageCreateInfo;
-    VkFormatFeatureFlags                    requiredFormatFeatures;
-    VkImageFormatConstraintsFlagsFUCHSIA    flags;
-    uint64_t                                sysmemPixelFormat;
-    uint32_t                                colorSpaceCount;
-    const VkSysmemColorSpaceFUCHSIA*        pColorSpaces;
-} VkImageFormatConstraintsInfoFUCHSIA;
-
-typedef struct VkImageConstraintsInfoFUCHSIA {
-    VkStructureType                               sType;
-    const void*                                   pNext;
-    uint32_t                                      formatConstraintsCount;
-    const VkImageFormatConstraintsInfoFUCHSIA*    pFormatConstraints;
-    VkBufferCollectionConstraintsInfoFUCHSIA      bufferCollectionConstraints;
-    VkImageConstraintsInfoFlagsFUCHSIA            flags;
-} VkImageConstraintsInfoFUCHSIA;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferCollectionFUCHSIA)(VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferCollectionFUCHSIA* pCollection);
-typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
-typedef void (VKAPI_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA(
-    VkDevice                                    device,
-    const VkBufferCollectionCreateInfoFUCHSIA*  pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkBufferCollectionFUCHSIA*                  pCollection);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionImageConstraintsFUCHSIA(
-    VkDevice                                    device,
-    VkBufferCollectionFUCHSIA                   collection,
-    const VkImageConstraintsInfoFUCHSIA*        pImageConstraintsInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA(
-    VkDevice                                    device,
-    VkBufferCollectionFUCHSIA                   collection,
-    const VkBufferConstraintsInfoFUCHSIA*       pBufferConstraintsInfo);
-
-VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA(
-    VkDevice                                    device,
-    VkBufferCollectionFUCHSIA                   collection,
-    const VkAllocationCallbacks*                pAllocator);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA(
-    VkDevice                                    device,
-    VkBufferCollectionFUCHSIA                   collection,
-    VkBufferCollectionPropertiesFUCHSIA*        pProperties);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_ggp.h b/common/vulkan/include/vulkan/vulkan_ggp.h
deleted file mode 100644
index 9a6a582..0000000
--- a/common/vulkan/include/vulkan/vulkan_ggp.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef VULKAN_GGP_H_
-#define VULKAN_GGP_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_GGP_stream_descriptor_surface 1
-#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1
-#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface"
-typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP;
-typedef struct VkStreamDescriptorSurfaceCreateInfoGGP {
-    VkStructureType                            sType;
-    const void*                                pNext;
-    VkStreamDescriptorSurfaceCreateFlagsGGP    flags;
-    GgpStreamDescriptor                        streamDescriptor;
-} VkStreamDescriptorSurfaceCreateInfoGGP;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(
-    VkInstance                                  instance,
-    const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-
-#define VK_GGP_frame_token 1
-#define VK_GGP_FRAME_TOKEN_SPEC_VERSION   1
-#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token"
-typedef struct VkPresentFrameTokenGGP {
-    VkStructureType    sType;
-    const void*        pNext;
-    GgpFrameToken      frameToken;
-} VkPresentFrameTokenGGP;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_ios.h b/common/vulkan/include/vulkan/vulkan_ios.h
deleted file mode 100644
index 6e7e6af..0000000
--- a/common/vulkan/include/vulkan/vulkan_ios.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef VULKAN_IOS_H_
-#define VULKAN_IOS_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_MVK_ios_surface 1
-#define VK_MVK_IOS_SURFACE_SPEC_VERSION   3
-#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface"
-typedef VkFlags VkIOSSurfaceCreateFlagsMVK;
-typedef struct VkIOSSurfaceCreateInfoMVK {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkIOSSurfaceCreateFlagsMVK    flags;
-    const void*                   pView;
-} VkIOSSurfaceCreateInfoMVK;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
-    VkInstance                                  instance,
-    const VkIOSSurfaceCreateInfoMVK*            pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_macos.h b/common/vulkan/include/vulkan/vulkan_macos.h
deleted file mode 100644
index c49b123..0000000
--- a/common/vulkan/include/vulkan/vulkan_macos.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef VULKAN_MACOS_H_
-#define VULKAN_MACOS_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_MVK_macos_surface 1
-#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 3
-#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface"
-typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
-typedef struct VkMacOSSurfaceCreateInfoMVK {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkMacOSSurfaceCreateFlagsMVK    flags;
-    const void*                     pView;
-} VkMacOSSurfaceCreateInfoMVK;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
-    VkInstance                                  instance,
-    const VkMacOSSurfaceCreateInfoMVK*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_metal.h b/common/vulkan/include/vulkan/vulkan_metal.h
deleted file mode 100644
index 5cf4a70..0000000
--- a/common/vulkan/include/vulkan/vulkan_metal.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef VULKAN_METAL_H_
-#define VULKAN_METAL_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_EXT_metal_surface 1
-
-#ifdef __OBJC__
-@class CAMetalLayer;
-#else
-typedef void CAMetalLayer;
-#endif
-
-#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1
-#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface"
-typedef VkFlags VkMetalSurfaceCreateFlagsEXT;
-typedef struct VkMetalSurfaceCreateInfoEXT {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkMetalSurfaceCreateFlagsEXT    flags;
-    const CAMetalLayer*             pLayer;
-} VkMetalSurfaceCreateInfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
-    VkInstance                                  instance,
-    const VkMetalSurfaceCreateInfoEXT*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_screen.h b/common/vulkan/include/vulkan/vulkan_screen.h
deleted file mode 100644
index 92ad9bf..0000000
--- a/common/vulkan/include/vulkan/vulkan_screen.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef VULKAN_SCREEN_H_
-#define VULKAN_SCREEN_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_QNX_screen_surface 1
-#define VK_QNX_SCREEN_SURFACE_SPEC_VERSION 1
-#define VK_QNX_SCREEN_SURFACE_EXTENSION_NAME "VK_QNX_screen_surface"
-typedef VkFlags VkScreenSurfaceCreateFlagsQNX;
-typedef struct VkScreenSurfaceCreateInfoQNX {
-    VkStructureType                  sType;
-    const void*                      pNext;
-    VkScreenSurfaceCreateFlagsQNX    flags;
-    struct _screen_context*          context;
-    struct _screen_window*           window;
-} VkScreenSurfaceCreateInfoQNX;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateScreenSurfaceQNX)(VkInstance instance, const VkScreenSurfaceCreateInfoQNX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window* window);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX(
-    VkInstance                                  instance,
-    const VkScreenSurfaceCreateInfoQNX*         pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex,
-    struct _screen_window*                      window);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_vi.h b/common/vulkan/include/vulkan/vulkan_vi.h
deleted file mode 100644
index 9e0dcca..0000000
--- a/common/vulkan/include/vulkan/vulkan_vi.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef VULKAN_VI_H_
-#define VULKAN_VI_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_NN_vi_surface 1
-#define VK_NN_VI_SURFACE_SPEC_VERSION     1
-#define VK_NN_VI_SURFACE_EXTENSION_NAME   "VK_NN_vi_surface"
-typedef VkFlags VkViSurfaceCreateFlagsNN;
-typedef struct VkViSurfaceCreateInfoNN {
-    VkStructureType             sType;
-    const void*                 pNext;
-    VkViSurfaceCreateFlagsNN    flags;
-    void*                       window;
-} VkViSurfaceCreateInfoNN;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
-    VkInstance                                  instance,
-    const VkViSurfaceCreateInfoNN*              pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_wayland.h b/common/vulkan/include/vulkan/vulkan_wayland.h
deleted file mode 100644
index 2a329be..0000000
--- a/common/vulkan/include/vulkan/vulkan_wayland.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef VULKAN_WAYLAND_H_
-#define VULKAN_WAYLAND_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_KHR_wayland_surface 1
-#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6
-#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
-typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
-typedef struct VkWaylandSurfaceCreateInfoKHR {
-    VkStructureType                   sType;
-    const void*                       pNext;
-    VkWaylandSurfaceCreateFlagsKHR    flags;
-    struct wl_display*                display;
-    struct wl_surface*                surface;
-} VkWaylandSurfaceCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
-    VkInstance                                  instance,
-    const VkWaylandSurfaceCreateInfoKHR*        pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex,
-    struct wl_display*                          display);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_win32.h b/common/vulkan/include/vulkan/vulkan_win32.h
deleted file mode 100644
index 1b680f0..0000000
--- a/common/vulkan/include/vulkan/vulkan_win32.h
+++ /dev/null
@@ -1,315 +0,0 @@
-#ifndef VULKAN_WIN32_H_
-#define VULKAN_WIN32_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_KHR_win32_surface 1
-#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6
-#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
-typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
-typedef struct VkWin32SurfaceCreateInfoKHR {
-    VkStructureType                 sType;
-    const void*                     pNext;
-    VkWin32SurfaceCreateFlagsKHR    flags;
-    HINSTANCE                       hinstance;
-    HWND                            hwnd;
-} VkWin32SurfaceCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
-    VkInstance                                  instance,
-    const VkWin32SurfaceCreateInfoKHR*          pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex);
-#endif
-
-
-#define VK_KHR_external_memory_win32 1
-#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32"
-typedef struct VkImportMemoryWin32HandleInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-    HANDLE                                handle;
-    LPCWSTR                               name;
-} VkImportMemoryWin32HandleInfoKHR;
-
-typedef struct VkExportMemoryWin32HandleInfoKHR {
-    VkStructureType               sType;
-    const void*                   pNext;
-    const SECURITY_ATTRIBUTES*    pAttributes;
-    DWORD                         dwAccess;
-    LPCWSTR                       name;
-} VkExportMemoryWin32HandleInfoKHR;
-
-typedef struct VkMemoryWin32HandlePropertiesKHR {
-    VkStructureType    sType;
-    void*              pNext;
-    uint32_t           memoryTypeBits;
-} VkMemoryWin32HandlePropertiesKHR;
-
-typedef struct VkMemoryGetWin32HandleInfoKHR {
-    VkStructureType                       sType;
-    const void*                           pNext;
-    VkDeviceMemory                        memory;
-    VkExternalMemoryHandleTypeFlagBits    handleType;
-} VkMemoryGetWin32HandleInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR(
-    VkDevice                                    device,
-    const VkMemoryGetWin32HandleInfoKHR*        pGetWin32HandleInfo,
-    HANDLE*                                     pHandle);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR(
-    VkDevice                                    device,
-    VkExternalMemoryHandleTypeFlagBits          handleType,
-    HANDLE                                      handle,
-    VkMemoryWin32HandlePropertiesKHR*           pMemoryWin32HandleProperties);
-#endif
-
-
-#define VK_KHR_win32_keyed_mutex 1
-#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1
-#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex"
-typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR {
-    VkStructureType          sType;
-    const void*              pNext;
-    uint32_t                 acquireCount;
-    const VkDeviceMemory*    pAcquireSyncs;
-    const uint64_t*          pAcquireKeys;
-    const uint32_t*          pAcquireTimeouts;
-    uint32_t                 releaseCount;
-    const VkDeviceMemory*    pReleaseSyncs;
-    const uint64_t*          pReleaseKeys;
-} VkWin32KeyedMutexAcquireReleaseInfoKHR;
-
-
-
-#define VK_KHR_external_semaphore_win32 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32"
-typedef struct VkImportSemaphoreWin32HandleInfoKHR {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkSemaphore                              semaphore;
-    VkSemaphoreImportFlags                   flags;
-    VkExternalSemaphoreHandleTypeFlagBits    handleType;
-    HANDLE                                   handle;
-    LPCWSTR                                  name;
-} VkImportSemaphoreWin32HandleInfoKHR;
-
-typedef struct VkExportSemaphoreWin32HandleInfoKHR {
-    VkStructureType               sType;
-    const void*                   pNext;
-    const SECURITY_ATTRIBUTES*    pAttributes;
-    DWORD                         dwAccess;
-    LPCWSTR                       name;
-} VkExportSemaphoreWin32HandleInfoKHR;
-
-typedef struct VkD3D12FenceSubmitInfoKHR {
-    VkStructureType    sType;
-    const void*        pNext;
-    uint32_t           waitSemaphoreValuesCount;
-    const uint64_t*    pWaitSemaphoreValues;
-    uint32_t           signalSemaphoreValuesCount;
-    const uint64_t*    pSignalSemaphoreValues;
-} VkD3D12FenceSubmitInfoKHR;
-
-typedef struct VkSemaphoreGetWin32HandleInfoKHR {
-    VkStructureType                          sType;
-    const void*                              pNext;
-    VkSemaphore                              semaphore;
-    VkExternalSemaphoreHandleTypeFlagBits    handleType;
-} VkSemaphoreGetWin32HandleInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR(
-    VkDevice                                    device,
-    const VkImportSemaphoreWin32HandleInfoKHR*  pImportSemaphoreWin32HandleInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR(
-    VkDevice                                    device,
-    const VkSemaphoreGetWin32HandleInfoKHR*     pGetWin32HandleInfo,
-    HANDLE*                                     pHandle);
-#endif
-
-
-#define VK_KHR_external_fence_win32 1
-#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1
-#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32"
-typedef struct VkImportFenceWin32HandleInfoKHR {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkFence                              fence;
-    VkFenceImportFlags                   flags;
-    VkExternalFenceHandleTypeFlagBits    handleType;
-    HANDLE                               handle;
-    LPCWSTR                              name;
-} VkImportFenceWin32HandleInfoKHR;
-
-typedef struct VkExportFenceWin32HandleInfoKHR {
-    VkStructureType               sType;
-    const void*                   pNext;
-    const SECURITY_ATTRIBUTES*    pAttributes;
-    DWORD                         dwAccess;
-    LPCWSTR                       name;
-} VkExportFenceWin32HandleInfoKHR;
-
-typedef struct VkFenceGetWin32HandleInfoKHR {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkFence                              fence;
-    VkExternalFenceHandleTypeFlagBits    handleType;
-} VkFenceGetWin32HandleInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
-typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR(
-    VkDevice                                    device,
-    const VkImportFenceWin32HandleInfoKHR*      pImportFenceWin32HandleInfo);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR(
-    VkDevice                                    device,
-    const VkFenceGetWin32HandleInfoKHR*         pGetWin32HandleInfo,
-    HANDLE*                                     pHandle);
-#endif
-
-
-#define VK_NV_external_memory_win32 1
-#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
-#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
-typedef struct VkImportMemoryWin32HandleInfoNV {
-    VkStructureType                      sType;
-    const void*                          pNext;
-    VkExternalMemoryHandleTypeFlagsNV    handleType;
-    HANDLE                               handle;
-} VkImportMemoryWin32HandleInfoNV;
-
-typedef struct VkExportMemoryWin32HandleInfoNV {
-    VkStructureType               sType;
-    const void*                   pNext;
-    const SECURITY_ATTRIBUTES*    pAttributes;
-    DWORD                         dwAccess;
-} VkExportMemoryWin32HandleInfoNV;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
-    VkDevice                                    device,
-    VkDeviceMemory                              memory,
-    VkExternalMemoryHandleTypeFlagsNV           handleType,
-    HANDLE*                                     pHandle);
-#endif
-
-
-#define VK_NV_win32_keyed_mutex 1
-#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 2
-#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
-typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
-    VkStructureType          sType;
-    const void*              pNext;
-    uint32_t                 acquireCount;
-    const VkDeviceMemory*    pAcquireSyncs;
-    const uint64_t*          pAcquireKeys;
-    const uint32_t*          pAcquireTimeoutMilliseconds;
-    uint32_t                 releaseCount;
-    const VkDeviceMemory*    pReleaseSyncs;
-    const uint64_t*          pReleaseKeys;
-} VkWin32KeyedMutexAcquireReleaseInfoNV;
-
-
-
-#define VK_EXT_full_screen_exclusive 1
-#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 4
-#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive"
-
-typedef enum VkFullScreenExclusiveEXT {
-    VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0,
-    VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1,
-    VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2,
-    VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3,
-    VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkFullScreenExclusiveEXT;
-typedef struct VkSurfaceFullScreenExclusiveInfoEXT {
-    VkStructureType             sType;
-    void*                       pNext;
-    VkFullScreenExclusiveEXT    fullScreenExclusive;
-} VkSurfaceFullScreenExclusiveInfoEXT;
-
-typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT {
-    VkStructureType    sType;
-    void*              pNext;
-    VkBool32           fullScreenExclusiveSupported;
-} VkSurfaceCapabilitiesFullScreenExclusiveEXT;
-
-typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT {
-    VkStructureType    sType;
-    const void*        pNext;
-    HMONITOR           hmonitor;
-} VkSurfaceFullScreenExclusiveWin32InfoEXT;
-
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
-typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
-typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT(
-    VkPhysicalDevice                            physicalDevice,
-    const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
-    uint32_t*                                   pPresentModeCount,
-    VkPresentModeKHR*                           pPresentModes);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT(
-    VkDevice                                    device,
-    VkSwapchainKHR                              swapchain);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT(
-    VkDevice                                    device,
-    const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
-    VkDeviceGroupPresentModeFlagsKHR*           pModes);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_xcb.h b/common/vulkan/include/vulkan/vulkan_xcb.h
deleted file mode 100644
index 5ba2ad8..0000000
--- a/common/vulkan/include/vulkan/vulkan_xcb.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef VULKAN_XCB_H_
-#define VULKAN_XCB_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_KHR_xcb_surface 1
-#define VK_KHR_XCB_SURFACE_SPEC_VERSION   6
-#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
-typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
-typedef struct VkXcbSurfaceCreateInfoKHR {
-    VkStructureType               sType;
-    const void*                   pNext;
-    VkXcbSurfaceCreateFlagsKHR    flags;
-    xcb_connection_t*             connection;
-    xcb_window_t                  window;
-} VkXcbSurfaceCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
-    VkInstance                                  instance,
-    const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex,
-    xcb_connection_t*                           connection,
-    xcb_visualid_t                              visual_id);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_xlib.h b/common/vulkan/include/vulkan/vulkan_xlib.h
deleted file mode 100644
index 75c75dc..0000000
--- a/common/vulkan/include/vulkan/vulkan_xlib.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef VULKAN_XLIB_H_
-#define VULKAN_XLIB_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_KHR_xlib_surface 1
-#define VK_KHR_XLIB_SURFACE_SPEC_VERSION  6
-#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
-typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
-typedef struct VkXlibSurfaceCreateInfoKHR {
-    VkStructureType                sType;
-    const void*                    pNext;
-    VkXlibSurfaceCreateFlagsKHR    flags;
-    Display*                       dpy;
-    Window                         window;
-} VkXlibSurfaceCreateInfoKHR;
-
-typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
-typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
-    VkInstance                                  instance,
-    const VkXlibSurfaceCreateInfoKHR*           pCreateInfo,
-    const VkAllocationCallbacks*                pAllocator,
-    VkSurfaceKHR*                               pSurface);
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
-    VkPhysicalDevice                            physicalDevice,
-    uint32_t                                    queueFamilyIndex,
-    Display*                                    dpy,
-    VisualID                                    visualID);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/common/vulkan/include/vulkan/vulkan_xlib_xrandr.h b/common/vulkan/include/vulkan/vulkan_xlib_xrandr.h
deleted file mode 100644
index fa27493..0000000
--- a/common/vulkan/include/vulkan/vulkan_xlib_xrandr.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef VULKAN_XLIB_XRANDR_H_
-#define VULKAN_XLIB_XRANDR_H_ 1
-
-/*
-** Copyright 2015-2021 The Khronos Group Inc.
-**
-** SPDX-License-Identifier: Apache-2.0
-*/
-
-/*
-** This header is generated from the Khronos Vulkan XML API Registry.
-**
-*/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#define VK_EXT_acquire_xlib_display 1
-#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
-#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
-typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display);
-typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT(
-    VkPhysicalDevice                            physicalDevice,
-    Display*                                    dpy,
-    VkDisplayKHR                                display);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT(
-    VkPhysicalDevice                            physicalDevice,
-    Display*                                    dpy,
-    RROutput                                    rrOutput,
-    VkDisplayKHR*                               pDisplay);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
